Bitcoin Forum
August 04, 2024, 12:40:21 PM *
News: Latest Bitcoin Core release: 27.1 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: 258: txn-mempool-conflict  (Read 989 times)
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
June 06, 2017, 09:27:41 AM
 #1

Есть знающие люди: как руками сделать транзакцию, которая будет тратить неподтвержденные входы? Но не просто сделать, а чтобы мемпул эту транзакцию принял вместе с другой неподтвержденной.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
June 06, 2017, 09: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 (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
June 07, 2017, 02:05:10 AM
 #3

Ну да, это не про даблспенд, а про пеймент процессинг  Smiley

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

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

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

ЗЫ за утилиту спасибо, при случае воспользуюсь.

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
June 07, 2017, 03:05:51 AM
 #4

Под "собрать транзу руками" подразумевал, что может кто-то знает метод типа RBF
(какую-то переменную в транзе), но не для даблспенда, а для "пуш-унспенда" ))
это называется CPFP  Grin
И опять же - не все пулы это поддерживают "из коробки".
Более того, если первая транзакция не будет включена в мемпул по какой-то причине,
то второй её после этого "не пропихнуть"
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
June 07, 2017, 03:16:18 AM
 #5

Под "собрать транзу руками" подразумевал, что может кто-то знает метод типа RBF
(какую-то переменную в транзе), но не для даблспенда, а для "пуш-унспенда" ))
это называется CPFP  Grin

Это начиная с версии 0.13 появилось?
То есть 0.12 кошель никак не заставить принимать в мемпул обе транзы?

OpenTrade - Open Source Cryptocurrency Exchange
amaclin
Legendary
*
Offline Offline

Activity: 1260
Merit: 1019


View Profile
June 07, 2017, 03:55:17 AM
Last edit: June 07, 2017, 04:25:20 AM by amaclin
 #6

Это начиная с версии 0.13 появилось?
ХЗ. Ты же понимаешь - каждая нода может как угодно хранить транзакции в памяти.

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

UPDATE:
Вообще-то 258: txn-mempool-conflict возникает из-за конфликта по инпутам, то
есть ты пытаешься вставить в мемпул транзакцию, расходующую уже израсходованные
выходы.
kzv (OP)
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
June 08, 2017, 01:12:01 PM
 #7

UPDATE:
Вообще-то 258: txn-mempool-conflict возникает из-за конфликта по инпутам, то
есть ты пытаешься вставить в мемпул транзакцию, расходующую уже израсходованные
выходы.


Ну да, похоже мой косяк: пытался одни и те же инпуты в двух транзакциях использовать и обе эти транзы в один мемпул запихнуть  Smiley

OpenTrade - Open Source Cryptocurrency Exchange
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!