Author

Topic: 258: txn-mempool-conflict (Read 999 times)

kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
June 08, 2017, 08:12:01 AM
#7
UPDATE:
Вообще-то 258: txn-mempool-conflict возникает из-за конфликта по инпутам, то
есть ты пытаешься вставить в мемпул транзакцию, расходующую уже израсходованные
выходы.


Ну да, похоже мой косяк: пытался одни и те же инпуты в двух транзакциях использовать и обе эти транзы в один мемпул запихнуть  Smiley
legendary
Activity: 1260
Merit: 1019
June 06, 2017, 10:55:17 PM
#6
Это начиная с версии 0.13 появилось?
ХЗ. Ты же понимаешь - каждая нода может как угодно хранить транзакции в памяти.

Quote
То есть 0.12 кошель никак не заставить принимать в мемпул обе транзы?
Надо смотреть по коду.
Посмотри когда внесли CPFP в референсную имплементацию.
Я никогда не заморачивался вопросом "как мне добавить транзакцию
в мемпул на моей машине" (у меня вообще -blocksonly параметр при запуске),
а всегда думал "как мне отправить транзакцию в сеть таким образом чтобы она смайнилась"

UPDATE:
Вообще-то 258: txn-mempool-conflict возникает из-за конфликта по инпутам, то
есть ты пытаешься вставить в мемпул транзакцию, расходующую уже израсходованные
выходы.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
June 06, 2017, 10:16:18 PM
#5
Под "собрать транзу руками" подразумевал, что может кто-то знает метод типа RBF
(какую-то переменную в транзе), но не для даблспенда, а для "пуш-унспенда" ))
это называется CPFP  Grin

Это начиная с версии 0.13 появилось?
То есть 0.12 кошель никак не заставить принимать в мемпул обе транзы?
legendary
Activity: 1260
Merit: 1019
June 06, 2017, 10:05:51 PM
#4
Под "собрать транзу руками" подразумевал, что может кто-то знает метод типа RBF
(какую-то переменную в транзе), но не для даблспенда, а для "пуш-унспенда" ))
это называется CPFP  Grin
И опять же - не все пулы это поддерживают "из коробки".
Более того, если первая транзакция не будет включена в мемпул по какой-то причине,
то второй её после этого "не пропихнуть"
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
June 06, 2017, 09:05:10 PM
#3
Ну да, это не про даблспенд, а про пеймент процессинг  Smiley

Есть две транзакции
1. A->B
2. B->C

Я хочу послать сначала первую, потом за ней вторую. Дак вот я тоже думал, что мемпулу будет похуй, что первая неподтверждена... Однако или я что-то делаю не так или мемпул все-таки запрограммирован реджектить вторую транзу пока в нем есть первая.
Идея была в первой транзе указать нулевую комиссию, а во второй комиссию в два раза больше и посмотреть - включатся ли в блок обе? Где-то читал, что так делается когда хотят протолкнуть зависшую транзакцию, вот и решил попробовать.

Под "собрать транзу руками" подразумевал, что может кто-то знает метод типа RBF (какую-то переменную в транзе), но не для даблспенда, а для "пуш-унспенда" ))
Как сделать рав-транзакцию я могу сам разобраться, а вот тут есть неплохой билдер для тех, кому лень программированием заниматься: https://coinb.in/#newTransaction

ЗЫ за утилиту спасибо, при случае воспользуюсь.
legendary
Activity: 1260
Merit: 1019
June 06, 2017, 04:19:34 PM
#2
Есть знающие люди: как руками сделать транзакцию, которая будет тратить неподтвержденные входы? Но не просто сделать, а чтобы мемпул эту транзакцию принял вместе с другой неподтвержденной.

Два вопроса в одном. Причем первый из двух частей.
1а) Руками можно по-разному сделать. Я пробовал через createrawtransaction штатного клиента
и мне не понравилось - уж больно гиморно. В результате у меня есть просто движок/либа/тулкит - не знаю как назвать
и вот таким кодом я собираю транзакцию. Ну приблизительно таким Smiley

Code:
     UxToList list;
      list.append(UxTo("e530ef9292137eb7cd493dc4dbcb4f0ae3f7b2cb5dd69b3e279075894f9ca899:1", 100000, "1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN" ));
      list.append(UxTo("69bc8caecb7bb2924c304fcb4e9a09379a7b65c7fc6c4d39c39ae7ed8eaceee8:0", 5500,   "1LzCTTy2BgqtVrpwbFn9KYziCR8stdXkKX" ));
      list.append(UxTo("451d1bb69253bbb031d8b7e4bf0472fb142f6f2a755074642bf1e0ce03054e11:0", 34039, "2103db3c3977c5165058bf38c46f72d32f4e872112dbafc13083a948676165cd1603ac" ));
      list.append(UxTo("44faaf956ef8afb87d395f0be5b72408afab736a2a4a65f22c1c371d19f5e14f:0", 1726655, "2103db3c3977c5165058bf38c46f72d32f4e872112dbafc13083a948676165cd1603ac" ));
      list.append(UxTo("8f6981599c85548af45c91065c57b94dde78b720d58d1492ed281d8a102c85d9:0", 70000, "2103db3c3977c5165058bf38c46f72d32f4e872112dbafc13083a948676165cd1603ac" ));
      list.append(UxTo("e8d4ef4ba7bec74b1e07391e18eec7d5a8b165ebdd336d8f6406c8b7fca4a6d2:0", 53183212, "2103db3c3977c5165058bf38c46f72d32f4e872112dbafc13083a948676165cd1603ac" ));

      for ( quint64 fee ( 0 );; )
      {
        Outer outer ( list, fee );
        outer.add ( "2103db3c3977c5165058bf38c46f72d32f4e872112dbafc13083a948676165cd1603ac", list.sum ( ) - fee );

        const QByteArray outTx ( list.createRawTransaction ( outer ) );
        if ( outTx.size ( ) * 1 > fee )
          {
            fee = outTx.size ( ) * 1;
            _trace ( QString ( "# fee = %1 sum = %2 #" ).arg ( fee ).arg ( Util::getAmount ( list.sum ( ) ) ) );
            continue;
          }

        const MyKey32 outKey ( MyKey32::calc ( outTx ) );
        _trace ( outKey.toString ( ) );
        QFile ff ( "txraw.main" );
        ff.open ( QIODevice::WriteOnly | QIODevice::Append );
        ff.write ( outTx.toHex ( ).constData ( ) );
        ff.write ( "\n" );
        ff.close ( );
        _trace ( QString ( "txsize=%1 fee=%2" ).arg ( outTx.size ( ) ).arg ( fee ) );
        break;
      }

1б) А спросите вы как имея свои приватные ключи найти все свои неизрасходованные выходы?
Берем блокчейн и парсим. Можно не с самого начала, а с какого-то определенного blk-файла

2) Как отправить трензакцию в сеть? Ну для этого у меня есть прграммка - могу поделиться:
https://cloud.mail.ru/public/2rUa/zgcW6vf8g
Писалась для себя, так что не взыщите.

С другой неподтвержденной мемпул примет только если стоит режим RBF - он условно говоря заменит транзакцию
если будет больше комиссия. Но если послать транзакцию на 100500 нод в сети - есть большой шанс что транзакция
и дойдет до какого-то майнера у которого RBF включен

UPDATE:
Ой, перечитал вопрос и понял, что речь не про дабл-спенд-транзакцию,
а про неподтвержденные выходы. Вообще-то мемпулу похуй - подтверждены
выходы или нет. Главное - что они неизрасходованы. Так что все точно также.
Вот только как вы будете искать неподтвержденные выходы? Либо на какой-то
сервис завязываться, либо у себя на ноде ловить и парсить все транзакции...
Вариантов куча
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
June 06, 2017, 04:27:41 AM
#1
Есть знающие люди: как руками сделать транзакцию, которая будет тратить неподтвержденные входы? Но не просто сделать, а чтобы мемпул эту транзакцию принял вместе с другой неподтвержденной.
Jump to: