Меня попросили, чтобы восстановить некоторую привязь, которые были отправлены не по адресу ... Сидя на blockchain в multisig счет доплаты.
Я написал небольшой PHP инструменты командной строки для воспроизведения дела и узнать больше о том, как работает Bitcoin. Я разработчик программного обеспечения, работает в основном с NEM, где blockchain сильно отличается. Итак, все, что дает мне энтузиазм и страсть, когда дело доходит до blockchains, много часов прошло ... и я узнал много нового о multisig на Bitcoin, OP_RETURNs, используемые в всенаправленный (USDT будучи smartproperty на многофункциональном слое), и многие другие удивительные вещи о иерархической генерации ключей, ключевых функций деривации, и многие другие предметы.
Но я борюсь получить обратно этот фал к другому адресу Конечно, у меня есть эти 3 cosigners сконфигурированных с доплатой, но я слишком много нуба, чтобы получить этот фал обратно. Факт есть, NEM blockchain очень отличается, когда речь идет о multisig и пользовательских активов. Так что я прошел через процесс обучения для ключей HD и XPRV и XPUBs. Который я также построил команду для. Команда, которая, при условии, с правильным путем вывода и xpubs или мнемониками, будет генерировать же cosigners xpubs, как в дисплеях доплаты странице информации multisig бумажника.
Я также построил команду, которая, из XPUBs, будет отображать * redeemScript * для данного пути вывода, а также scriptPubKey производного счета (доплата использует м / 44 «/ 0» / 0' для основных счетов ( cosigners), но использует м / 0 / х, где х представляет собой счетчик адреса, для генерации платежных адресов.
Я могу воспроизвести точно такой же OP_HASH160 THE_HASH OP_EQUAL. И я имею в виду выход действительные Bitcoin транзакции в моих сделках входов.
У меня 2 входа (оба multisig выходных скриптов, генерируемые с Bitcoin PHP Lib от Bit-осы), первый вход содержит привязи OP_RETURN наряду с OP_HASH160 multisig проверки. Второй вход содержит достаточно BTC, чтобы внести плату шахтера (0,002 BTC для 487 байт транзакциев), а также имеет OP_HASH160 multisig проверки.
Так как мои сгенерированные входы равны scriptPubKey что я могу генерировать с моим HD вывода инструмента. RedeemScript порождена этим инструментом говорит мне порядок cosignatories (лексический ordeded открытых ключей) и путь для multisig адреса доплат являются xpub / 0/1 xpub / 0/2, и т.д., где xpub является xpubs из cosigners, которые генерируются с путем вывода м / 44 '/ 0' / 0'. Таким образом, абсолютный путь к сгенерированным адресам являются: м / 44 '/ 0' / 0' / 0/1, Следующий адрес будет м / 44 '/ 0' / 0' / 0/2, и т.п.
Отлично, я так много узнал о ключевом выводе и как multisig представлен на Bitcoin !!!
А теперь самое интересное происходит .. Как получить этот OP_RETURN заявление будет воспроизведен на адрес привязи? Оказывается, они всегда Bitcoin адреса.
Так я думал, что мне нужно 2 выхода, то же, что случилось с привязи первоначально, я бы воспроизвести, посылая пакет к omniwallet адресу.
А вот моя проблема .. Я не в полной мере понять всенаправленные сделки. Я преобразовал хэш в костюм больших чисел обратным порядком байтов (также работают за мизерную с обратным порядком байтов и машина байт-код заказа так .. может быть, я неправильно выбрать).
Но от моего понимания redeemScript и scriptPubKey, я должен воспроизвести хэш OP_RETURN в моей продукции, или это право только скопировать его в новую последовательность опкодов?. То, что я сделал сейчас, так что один из моего выхода указует то же OP_RETURN ххое как входная сделка Bitcoin я имею в вид и значение 0. Во втором выходе, который является payToAddress с многофункциональном адресом, я поставил 0.0005 BTC сумма, которая оставит 0.0015 BTC за плату. Транзакция 487 байт большая.
Так что я не уверен здесь .. Я прошел через несколько ошибок, исходящих из pushtx API, ошибка я застрял на сейчас 16: обязательный-скрипт-проверить флаг-не удалось (Сценарий оценивается без ошибок, но закончил с ложным / пустым верхним элементом стеки)
Хорошо, эта ошибка действительно не хуже, я видел, его очень четко .. и вот что мне нужна помощь. Мне нужно знать, как правильно читать omniwallet данные Op_Return так, что сценарий оценивается правильно, или что-то еще, что мне не хватает?
Я могу предоставить скриншоты, а также данные неподписанных транзакций и будет делать это, но мне нужно немного вход первого, может быть, моя ошибка очевидна для специалистов сети Bitcoin.
Я воспроизвел этот случай на адрес с не много денег и обеспечит скриншоты и исходный код в утренние часы.
Пожалуйста, люди, я люблю blockchains и я до сих пор узнать о криптографии. Я закодировал много вокруг blockchain NEM для моего личного прогресса и профессиональных способностей и мне очень нравится сцена Bitcoin в качестве разработчика программного обеспечения. Это очень интересный сообщество, мы должны сказать, слишком
Спасибо за чтение, и я надеюсь, что кто-то может помочь мне!
Источники коды & Скриншоты
1) BIP32 + 44 HD адреса Generation Tool на Github
2) BIP39 Seed Выведение (получить Частные ключи) на Github
3) Мое создание P2SH Цветной сделки на Github
4) Снимок экрана ERROR
5) OP_RETURN шестнадцатеричное чтение полезной нагрузки (Все это он читать значения Integer, пожалуйста, скажите мне, есть еще сзади)
С этими исходными кодами, проходящими правильные параметры, как описано ниже, я могу произвести сделку, что я добавить к скриншоту ниже. К сожалению, транзакция отклонена с сообщением, указанными выше, а также отображаются на скриншоте. Я не думаю, что проблема заключается в smartbit API я использую, это только быстрый инструмент широковещательного я интегрирован в мой сценарий.
Код:
$ Приложений PHP кошелек: p2sh цвета \
--цветные-TX "9141346500a45fb588e2ee2908583d9d2b0484b1941dcb0e50fbf9bf1e4e5b51" \
--BTC-вход-TX "4ef5d6c42ceec8d53a896f1bc6b15fa07c52b9f29db0d8e3ce6a4aa5fb9e0ecb" \
--путь ="м / 44 '/ 0' / 0'" \
--мин 1 = --cosig1"это не право мнемонические" \
--cosig2 ="это один не либо" \
--cosig3 ="и, конечно же, ни это один" \
--место назначения "1PFSCWbPdfQfwtRidBxj5x2HxigG7JGFNb" \
--изменение "143f5QPkc5mJurEr2kGPPoecJqkhvaQ2u2" \
--Bitcoin 200000
--цветные-TX "9141346500a45fb588e2ee2908583d9d2b0484b1941dcb0e50fbf9bf1e4e5b51" \
--BTC-вход-TX "4ef5d6c42ceec8d53a896f1bc6b15fa07c52b9f29db0d8e3ce6a4aa5fb9e0ecb" \
--путь ="м / 44 '/ 0' / 0'" \
--мин 1 = --cosig1"это не право мнемонические" \
--cosig2 ="это один не либо" \
--cosig3 ="и, конечно же, ни это один" \
--место назначения "1PFSCWbPdfQfwtRidBxj5x2HxigG7JGFNb" \
--изменение "143f5QPkc5mJurEr2kGPPoecJqkhvaQ2u2" \
--Bitcoin 200000
Другие * страховки * я получаю от вызова следующей команды:
Код:
$ Приложений PHP бумажник: HD-из-xpub --xpubs ="my_cosigner_lists_xpubs, separated_by_comma, very_basic" --path ="м / 0"
Эта команда чуть выше будет возвращать следующие scriptPubKey: OP_HASH160 d7fb889271798a9244f47320aec28b926a2bb7a4 OP_EQUAL - также как и redeemScript содержащий лексикографически упорядоченные открытых ключей cosigners в счет доплаты. Итак, как вы можете видеть при проверке экрана от создания транзакции, это d7fb8 ... это именно то, что я в состоянии воспроизвести, когда я подписал входы. Теперь я спрашиваю себя, где эта проблема может быть и надеется, что все эти детали могут помочь вам человек больше за помощь!
Вот Транзакция байт данных копировать / вставить в coin.bin, например:
Код:
0100000002515b4e1ebff9fb500ecb1d94b184042b9d3d580829eee288b55fa4006534419101000000b4004730440220533476590d6f978491499559c34916a4318c36ff6656f00449ba8bc41c4c1b47022007e8fc60706abcc0d1523f3bc0e5768cc4a32fd3774eb69d8621527ad15d340e014c6951210247bcd2c9e1bf8bfc9e567c8f9c81ef5f2c5356e544ab7b9141b7ef93f272da9f2102771dbfd6b9e6183e893c07ea49cfc781d1836e42b6425ff2a59100cc2e9b11222102ab0456bde3a2a8f5066fa4827c8a00c9388e6da1fdc22f90c406d89112c8bacb53aeffffffffcb0e9efba54a6acee3d8b09df2b9527ca05fb1c61b6f893ad5c8ee2cc4d6f54e00000000b4004730440220787016c5ad971514fd925b7407230430d365242a679e7237d492101a7b1c31d5022055098842dc35764b498ab4633fad4b9da929f00a34a07aa5e8dfd3b9e5b760d8014c6951210247bcd2c9e1bf8bfc9e567c8f9c81ef5f2c5356e544ab7b9141b7ef93f272da9f2102771dbfd6b9e6183e893c07ea49cfc781d1836e42b6425ff2a59100cc2e9b11222102ab0456bde3a2a8f5066fa4827c8a00c9388e6da1fdc22f90c406d89112c8bacb53aeffffffff030000000000000000166a146f6d6e69000000000000001f000000002faf0800c4090000000000001976a914f40da014c137ad8800 6608834887556944e2dfeb88acf0490200000000001976a9142168fe52d8c1cbc656a544859c4193dd4b92e23788ac00000000
Я думаю, что моя проблема заключается в OP_RETURN выход, потому что все, что я сделал это скопировать его из транзакции ввода и я не уверен, если я должен решить сценарий или любой другой. Я был бы признателен за любую помощь от людей, знающих нашу OP_RETURN может работать в моем случае Multisig (доплата, которую я, кажется, воспроизводя отлично)
Для тех, кто не нажал на скриншот, вот * var_dump () * выход моего содержания сделки после подписания, это похоже на то, что * coin.bin * будет отображаться для транзакции байтов данных выше.
Код:
массив (
«Версия» => 1,
«» = входы>
массив (
0 => 'OP_HASH160 d7fb889271798a9244f47320aec28b926a2bb7a4 OP_EQUAL',
1 => 'OP_HASH160 d7fb889271798a9244f47320aec28b926a2bb7a4 OP_EQUAL',
),
«» = выходы>
массив (
0 =>
массив (
«Значение» => 0,
«Скрипт» => 'OP_RETURN 6f6d6e69000000000000001f000000002faf0800',
),
1 =>
массив (
«Значение» => 2500,
«Скрипт» => 'OP_DUP OP_HASH160 f40da014c137ad88006608834887556944e2dfeb OP_EQUALVERIFY OP_CHECKSIG',
),
2 =>
массив (
«Значение» => 150000,
«Скрипт» => 'OP_DUP OP_HASH160 2168fe52d8c1cbc656a544859c4193dd4b92e237 OP_EQUALVERIFY OP_CHECKSIG',
),
),
)
«Версия» => 1,
«» = входы>
массив (
0 => 'OP_HASH160 d7fb889271798a9244f47320aec28b926a2bb7a4 OP_EQUAL',
1 => 'OP_HASH160 d7fb889271798a9244f47320aec28b926a2bb7a4 OP_EQUAL',
),
«» = выходы>
массив (
0 =>
массив (
«Значение» => 0,
«Скрипт» => 'OP_RETURN 6f6d6e69000000000000001f000000002faf0800',
),
1 =>
массив (
«Значение» => 2500,
«Скрипт» => 'OP_DUP OP_HASH160 f40da014c137ad88006608834887556944e2dfeb OP_EQUALVERIFY OP_CHECKSIG',
),
2 =>
массив (
«Значение» => 150000,
«Скрипт» => 'OP_DUP OP_HASH160 2168fe52d8c1cbc656a544859c4193dd4b92e237 OP_EQUALVERIFY OP_CHECKSIG',
),
),
)
И ошибка, когда я вещать эту сделку:
Код:
массив (
«Успех» => ложный,
«Ошибка» =>
массив (
«Код» => 'REQ_ERROR',
«Сообщение» => '16: обязательный-скрипт-проверить-флаг-неудачного (Сценарий оценивается без ошибок, но закончил с ложным / пустым верхним элементом стеки)»,
),
)
«Успех» => ложный,
«Ошибка» =>
массив (
«Код» => 'REQ_ERROR',
«Сообщение» => '16: обязательный-скрипт-проверить-флаг-неудачного (Сценарий оценивается без ошибок, но закончил с ложным / пустым верхним элементом стеки)»,
),
)
Этот ответ API является из API Smartbit по адресу: https://www.smartbit.com.au/api которая позволяет толкать транзакции быстро с запросами POST. Это сообщение, кажется, ошибка Bitcoin сценариев, и именно поэтому я уверен, что я что-то пропустил!
Хорошего дня.
Greg
[EDIT 1]: Добавлены некоторые PHPBB форматирование заменить MD.
[EDIT 2]: Измененное название, чтобы отразить контент.
[EDIT 3]: Добавить создание транзакции Скриншоты + исходные коды
[EDIT 4]: Добавлен `сценарий: оп-return` источник GitHub ссылка