Как рассчитать txid этой необработанной транзакции?

Я пытаюсь разобрать биткойн-блок с помощью Python.

Я вызвал getrawtransaction над JSON-RPC. Я получил это:

01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d014dffffffff0100f2052a01000000434104e70a02f5af48a1989bf630d92523c9d14c45c75f7d1b998e962bff6ff9995fc5bdb44f1793b37495d80324acba7c8f537caaf8432b8d47987313060cc82d8a93ac00000000

Как рассчитать txid этой необработанной транзакции?

4 голоса | спросил user21322 28 52014vEurope/Moscow11bEurope/MoscowFri, 28 Nov 2014 18:56:50 +0300 2014, 18:56:50

2 ответа


3

TXID имеют две формы ; форма, используемая внутренне для outpoints и merkle leaves (внутренний порядок байтов) и форма, используемая в вызовах RPC и блочных исследователях (порядок байтов RPC). Они часто называются, соответственно, порядком байтового порядка и порядком байтов (хотя эти описания не совсем точны).

Вот код python из Документация разработчика Bitcoin.org обе формы для TXID для транзакции в вашем вопросе:

#!/usr/bin/env python

from sys import byteorder
from hashlib import sha256

## You can put in $data an 80-byte block header to get its header hash,
## or a raw transaction to get its txid
data = "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d014dffffffff0100f2052a01000000434104e70a02f5af48a1989bf630d92523c9d14c45c75f7d1b998e962bff6ff9995fc5bdb44f1793b37495d80324acba7c8f537caaf8432b8d47987313060cc82d8a93ac00000000".decode("hex")
hash = sha256(sha256(data).digest()).digest()

print "Warning: this code only tested on a little-endian x86_64 arch"
print
print "System byte order:", byteorder
print "Internal-Byte-Order Hash: ", hash.encode('hex_codec')
print "RPC-Byte-Order Hash:      ", hash[::-1].encode('hex_codec')

И вот результат:

Warning: this code only tested on a little-endian x86_64 arch

System byte order: little
Internal-Byte-Order Hash:  660802c98f18fd34fd16d61c63cf447568370124ac5f3be626c2e1c3c9f0052d
RPC-Byte-Order Hash:       2d05f0c9c3e1c226e63b5fac240137687544cf631cd616fd34fd188fc9020866
ответил David A. Harding 28 52014vEurope/Moscow11bEurope/MoscowFri, 28 Nov 2014 19:21:10 +0300 2014, 19:21:10
0

Вызов: bitcoin-cli decoderawtransaction 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d014dffffffff0100f2052a01000000434104e70a02f5af48a1989bf630d92523c9d14c45c75f7d1b998e962bff6ff9995fc5bdb44f1793b37495d80324acba7c8f537caaf8432b8d47987313060cc82d8a93ac00000000 от вашего клиента биткойн, вы получите:

{
    "txid" : "2d05f0c9c3e1c226e63b5fac240137687544cf631cd616fd34fd188fc9020866",
    "version" : 1,
    "locktime" : 0,
    "vin" : [
        {
            "coinbase" : "04ffff001d014d",
            "sequence" : 4294967295
        }
    ],
    "vout" : [
        {
            "value" : 50.00000000,
            "n" : 0,
            "scriptPubKey" : {
                "asm" : "04e70a02f5af48a1989bf630d92523c9d14c45c75f7d1b998e962bff6ff9995fc5bdb44f1793b37495d80324acba7c8f537caaf8432b8d47987313060cc82d8a93 OP_CHECKSIG",
                "hex" : "4104e70a02f5af48a1989bf630d92523c9d14c45c75f7d1b998e962bff6ff9995fc5bdb44f1793b37495d80324acba7c8f537caaf8432b8d47987313060cc82d8a93ac",
                "reqSigs" : 1,
                "type" : "pubkey",
                "addresses" : [
                    "13A1W4jLPP75pzvn2qJ5KyyqG3qPSpb9jM"
                ]
            }
        }
    ]

В качестве альтернативы вы можете использовать десериализующий скрипт Gavin Andresen, написанный на Python: https: //github.com/gavinandresen/bitcointools/blob/master/deserialize.py

ответил George Kimionis 28 52014vEurope/Moscow11bEurope/MoscowFri, 28 Nov 2014 19:17:58 +0300 2014, 19:17:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132