Entiendo que "OP_CHECKSIG" hace esto, pero no puedo ver cómo recrearlo. Probé SHA1 y SHA256 de parte de la información en una transacción de bitcoin dada, pero no me dio valores confirmados de Z. ¿Puede alguien seleccionar una transacción, decirme cuál es y mostrarme lo que necesito para cortar y pegar? en una calculadora SHA1 para obtener el valor Z real?
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) leer ¿Cómo redimir un Tx básico?
1) tome su transacción como una matriz de bytes
2) reemplazar todos los guiones de entrada por guiones vacíos
3) reemplace un script de entrada por el original "OP_DUP OP_HASH160..."
4) agregar "tipo de código hash" SIGHASH_ALL
5) tomar sha256 (sha256 (datos))
eso es todo
Echa un vistazo a mi código
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
}
Mío
amaclin
Mío