レシートハッシュを求める(Symbol,Catapult,Fushicho4)
はじめに
あるブロックチェーンの/block/1
の応答。
レシートハッシュ(receiptsHash)にある、
8D3DEE3481284DEA5E0C0C6E6D1410F6E0B6B95439ACD3FACC2E5E2B854E5C5E
を計算で求めてみようと思います。
レシートの情報
レシートの情報は、/block/1/receipts
にあります。
mosaicResolutionStatements
とtransactionStatements
があります。
おそらく、これらの情報をシリアライズして、ハッシュ化すると、レシートハッシュが求められると思います。
シリアライズ
さて、シリアライズの方法を探していきます。
Symbol SDKを参考にします。Fushicho4なので、0.16.5を見てますが、0.17でも変わらないかと思います。
Transaction Statement
ReceiptVersion
とReceiptType
、ReceiptSource
を結合したのち、各レシートをシリアライズして結合したものをハッシュするようです。
レシートのシリアライズは次を参考にします。
ReceiptVersion
とReceiptType
、MosaicId
、Amount
、PublicKey
を結合するようです。
データにすると、前半が010043e10000000000000000
、後半が01004321a84582052890a95100000000000000009be93593c699867f1b4f624fd37bc7fb93499cdec9929088f2ff1031293960ff
となります。
これのSHA3は8EA9EEA135F10FECFA55ED908593C6A3D24E672F1259E9DA776554BF67E722F7
となります。
Mosaic Resolution Statement
ReceiptVersion
とReceiptType
とNamespaceId
を結合したのち、各レシートをシリアライズして結合したものをハッシュするようです。
レシートのシリアライズは、ReceiptSource
とMosaicId
を結合するようです。
データにすると、前半が010043f2eeaff441ba994be7
、後半が0500000000000000a84582052890a951
となります。
これのSHA3はA91F73FBD1169356F3D9D83D86DCB9646356947BADDB18A46169B2C351E105A7
となります。
マークルルート
それぞれのStatementのハッシュが出たので、これでマークルツリーを作っていきます。
今回は2つしかないので、結合してハッシュをとります。
その値は8D3DEE3481284DEA5E0C0C6E6D1410F6E0B6B95439ACD3FACC2E5E2B854E5C5E
となります。
ブロックの情報のreceiptsHash
と一致しました。
REST
/block/1/receipt/{hash}/merkle
では、マークルツリーを計算するための情報が返ってきます。
TransactionStatementのハッシュを入れると、
MosaicResolutionStatementのハッシュを入れると、
といった情報が返ってきます。
ノードに保存されているデータ
ノードのブロックが入っているフォルダには、.stmt
というファイルがあります。
これを見てみます。
$ sudo hexdump -C 00000/00001.stmt
00000000 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
00000010 38 00 00 00 01 00 43 21 a8 45 82 05 28 90 a9 51 |8.....C!.E..(..Q|
00000020 00 00 00 00 00 00 00 00 9b e9 35 93 c6 99 86 7f |..........5.....|
00000030 1b 4f 62 4f d3 7b c7 fb 93 49 9c de c9 92 90 88 |.ObO.{...I......|
00000040 f2 ff 10 31 29 39 60 ff 00 00 00 00 01 00 00 00 |...1)9`.........|
00000050 ee af f4 41 ba 99 4b e7 01 00 00 00 05 00 00 00 |...A..K.........|
00000060 00 00 00 00 a8 45 82 05 28 90 a9 51 |.....E..(..Q|
0000006c
これを項目分けしてみます。
項目 | 値 |
---|---|
何か | 0100000000000000 |
項目 | 値 |
---|---|
何か | 0000000001000000 |
Transaction Statementのレシートっぽいですね。
項目 | 値 |
---|---|
Size | 38000000 |
Version | 0100 |
Type | 4321 |
Mosaic ID | a84582052890a951 |
Amount | 0000000000000000 |
Public Key | 9be93593c699867f1b4f624fd37bc7fb93499cdec9929088f2ff1031293960ff |
項目 | 値 |
---|---|
何か | 0000000001000000 |
Mosaic Resolution Statementっぽいですね。
項目 | 値 |
---|---|
Unresolved | eeaff441ba994be7 |
Version | 0100 |
Type | 0000 |
Source | 0500000000000000 |
Resolved | a84582052890a951 |
全部はわからなかったけど、レシートの情報が入っていることが見て取れます。
Author And Source
この問題について(レシートハッシュを求める(Symbol,Catapult,Fushicho4)), 我々は、より多くの情報をここで見つけました https://qiita.com/planethouki/items/ed45018267b24d262b84著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .