Title: Transaction malleability на примере Post by: Erzhan_ast on April 07, 2014, 01:42:06 PM Всем доброго времени суток!
Пишу дипломную работу, как вы наверное догадались на тему Биткоин. Было много шумихи по поводу краха MtGox и я решил попробовать провести пример того, как гибкость транзакции работает(я не хочу обманывать биржи и т.д поэтому буду использовать созданные мной самим транзакции, которые посылают BTC с одного моего адреса на другой). Теоретический шаги: 1) создаю TX1 с одним входом и одним выходом 2) пока она еще не подтверждена, нахожу ее в списке неподтвержденных транзакций, немного меняю подпись и отправляю уже измененную транзакцию обратно в сеть(TX2). Т.е в сети будут две по сути одинаковые транзакции(одинаковая сумма посылается с одного адреса на другой), но в следствии измененной подписи в TX2 у них будет разный хэш(TX ID). Никакого double-spending'а или чего то подобного. Практические шаги: 1) в Bitcoin QT открываю консоль, выписываю список неподтвержденных транзакции с помощью приказа getrawmempool 2) нахожу там нужную и выписываю ее: getrawtransaction "..." 3) получаю данные этой транзакции в hex форме, меняю какие то данные в подписи и отправляю обратно с помощью приказа sendrawtransaction "..." Теперь вопрос: что именно и каким образов я могу изменить в результатах приказа getrawtransaction "..."? Знаю что можно перевести эти данные в нормальный вид с помощью приказа decoderawtransaction, чтобы посмотреть в JSON виде что там к чему. Помогите пожалуйста студенту, буду очень благодарен! Всем заранее спасибо, Ержан:) P.S не прошу сделать всю работу за меня, прошу лишь подсказать что и где можно поменять. Изучаю ECDSA подписи, постепенно вникаю, но времени осталось до 17 апреля, надо сдать готовую работу. Title: Re: Transaction malleability на примере Post by: CyberMOS on April 07, 2014, 03:11:20 PM Меняй байт OP_0 на OP_PUSHDATA2
Title: Re: Transaction malleability на примере Post by: yurm on April 07, 2014, 09:18:54 PM Небольшой практический нюанс: bitcoind не отправит вторую транзакцию в сеть, ибо выходы он будет считать уже потраченными. Эксперимент нужно проводить так: готовим две malleable транзакции с помощью createrawtransaction/signrawtransaction, одну отправляем через https://blockchain.info/pushtx (https://blockchain.info/pushtx), одновременно вторую из кошелька посредством sendrawtransaction. Чем одновременнее, тем лучше.
Title: Re: Transaction malleability на примере Post by: Erzhan_ast on April 08, 2014, 08:51:45 AM Меняй байт OP_0 на OP_PUSHDATA2 Можно на примере этой транзакции показать где именно найти этот байт OP_0? "txid" : "890b15aeeac3db018173aecc95087cca8c7ce3c997387e332c5a9bd65b9aa8d2" Приказом getrawtransaction 890b15aeeac3db018173aecc95087cca8c7ce3c997387e332c5a9bd65b9aa8d2 показывает следующее: Code: { Title: Re: Transaction malleability на примере Post by: Erzhan_ast on April 08, 2014, 09:01:40 AM готовим две malleable транзакции с помощью createrawtransaction/signrawtransaction Как я говорил, в этих всех приказах пока что разбираюсь слабо...createrawtransaction [{"txid":txid,"vout":n},...] {address:amount,...} получается здесь я должен буду все данные забить вручную, так? signrawtransaction <hex string> [{"txid":txid,"vout":n,"scriptPubKey":hex},...] [<privatekey1>,...] [sighash="ALL"] сюда напишу результат приказа createrawtransaction, так? P.S. Прошу прощения если вопросы глупые, понимаю что "гугл в помощь" и т.д, но время поджимает, поэтому и спрашиваю у тех кто в этом разбирается Title: Re: Transaction malleability на примере Post by: Erzhan_ast on April 08, 2014, 01:35:57 PM ок, в этих двух приказах наконец то разобрался, если кому то из новичков будет интересно, то перед тем как подписывать транзакцию, надо разблокировать кошелек с помощью команды walletpassphrase <pass> <time> где time - время в секундах.
теперь самое важное: как мне подготовить 2 почти одинаковые транзакции с разным ID? Ответили насчет того что надо поменять байт OP_0 на OP_PUSHDATA2. Ок, только где его найти? Судя по всему этот байт должен находится где то в подписи. Code: { Code: "scriptPubKey" : { Code: "scriptPubKey" : { Title: Re: Transaction malleability на примере Post by: Erzhan_ast on April 08, 2014, 04:33:33 PM почитал я всякие разные форумы... и понял что менять надо что то здесь:
Code: "scriptSig" : { Title: Re: Transaction malleability на примере Post by: CyberMOS on April 09, 2014, 06:02:36 PM http://bitcoin.stackexchange.com/questions/22051/transaction-malleability-in-the-blockchain
|