Я понимаю, что это делает "OP_CHECKSIG", но я не понимаю, как его воссоздать. Я попробовал SHA1 и SHA256 некоторой информации в данной биткойн-транзакции, но это не дало мне подтвержденных значений Z. Может ли кто-нибудь выбрать транзакцию, сказать мне, какая это и показать мне, что мне нужно вырезать и вставить в калькулятор SHA1, чтобы получить фактическое значение Z?
The hash value of TX 9ec4bc49e828d924af1d1029cacf709431abbde46d59554b62bc270e3b29c4b1 is supposed to be z = c0e2d0a89a348de88fda08211c70d1d7e52ccef2eb9459911bf977d587784c6e and also z = 17b0f41c8c337ac1e18c98759e83a8cccbc368dd9d89e5f03cb633c265fd0ddc but I do not see how the z values are achieved.
0) читать Как выкупить базовый Tx?
1) возьмите вашу транзакцию как массив байтов
2) заменить все входные скрипты на пустые скрипты
3) заменить один входной скрипт на оригинальный "OP_DUP OP_HASH160..."
4) добавить "тип хэш-кода" SIGHASH_ALL
5) взять ша256 (ша256 (данные))
вот и все
Посмотрите на мой код
const MyKey32 Transaction::getRawHash ( const int n, const QByteArray& scr ) const
{
MyByteArray ret; // create empty array
Stream stream ( s );
ret.putInt32 ( stream.readU32 ( ) ); // version
ret.putVarInt ( stream.readVar ( ) ); // input count
for ( int i ( 0 ); i < inputs; i++ ) // copy all inputs
{
ret.append ( stream.readHash ( ) );
ret.putInt32 ( stream.readU32 ( ) );
stream.skipVarData ( ); // skip original script
ret.putPrefixed ( i == n ? scr : QByteArray ( ) ); // !!! script replacement
ret.putInt32 ( stream.readU32 ( ) );
}
ret.putVarInt ( stream.readVar ( ) ); // output count
for ( int i ( 0 ); i < outputs; i++ ) // copy all outputs byte-by-byte
{
ret.putInt64 ( stream.readU64 ( ) );
ret.putPrefixed ( stream.readVarData ( ) );
}
ret.putInt32 ( stream.readU32 ( ) ); // lock
ret.putInt32 ( SIGHASH_ALL ); // !!! append hashcode
return MyKey32 ( ret.constData ( ), ret.size ( ) ); // create hash256 of array
}
Мой
амаклин
Мой