LoginSignup
3
1

More than 3 years have passed since last update.

レシートハッシュを求める(Symbol,Catapult,Fushicho4)

Posted at

はじめに

あるブロックチェーンの/block/1の応答。

image.png

レシートハッシュ(receiptsHash)にある、

8D3DEE3481284DEA5E0C0C6E6D1410F6E0B6B95439ACD3FACC2E5E2B854E5C5E

を計算で求めてみようと思います。

レシートの情報

レシートの情報は、/block/1/receiptsにあります。

image.png

mosaicResolutionStatementstransactionStatementsがあります。

おそらく、これらの情報をシリアライズして、ハッシュ化すると、レシートハッシュが求められると思います。

シリアライズ

さて、シリアライズの方法を探していきます。

Symbol SDKを参考にします。Fushicho4なので、0.16.5を見てますが、0.17でも変わらないかと思います。

Transaction Statement

ReceiptVersionReceiptTypeReceiptSourceを結合したのち、各レシートをシリアライズして結合したものをハッシュするようです。

レシートのシリアライズは次を参考にします。

ReceiptVersionReceiptTypeMosaicIdAmountPublicKeyを結合するようです。

データにすると、前半が010043e10000000000000000、後半が01004321a84582052890a95100000000000000009be93593c699867f1b4f624fd37bc7fb93499cdec9929088f2ff1031293960ffとなります。

これのSHA3は8EA9EEA135F10FECFA55ED908593C6A3D24E672F1259E9DA776554BF67E722F7となります。

Mosaic Resolution Statement

ReceiptVersionReceiptTypeNamespaceIdを結合したのち、各レシートをシリアライズして結合したものをハッシュするようです。

レシートのシリアライズは、ReceiptSourceMosaicIdを結合するようです。

データにすると、前半が010043f2eeaff441ba994be7、後半が0500000000000000a84582052890a951となります。

これのSHA3はA91F73FBD1169356F3D9D83D86DCB9646356947BADDB18A46169B2C351E105A7となります。

マークルルート

それぞれのStatementのハッシュが出たので、これでマークルツリーを作っていきます。

今回は2つしかないので、結合してハッシュをとります。

その値は8D3DEE3481284DEA5E0C0C6E6D1410F6E0B6B95439ACD3FACC2E5E2B854E5C5Eとなります。

ブロックの情報のreceiptsHashと一致しました。

REST

/block/1/receipt/{hash}/merkleでは、マークルツリーを計算するための情報が返ってきます。

TransactionStatementのハッシュを入れると、

image.png

MosaicResolutionStatementのハッシュを入れると、

image.png

といった情報が返ってきます。

ノードに保存されているデータ

ノードのブロックが入っているフォルダには、.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

全部はわからなかったけど、レシートの情報が入っていることが見て取れます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1