Tezosの16進演算をデコードします
-
-
16進文字列は偶数の長さである必要があり、16進数字のペアが1バイトをエンコードします.最初の11文字を削除しても意味がありません.おそらく、最初の10文字を削除したかったでしょう.Hexadecimal strings have to have even lengths, pairs of hexadecimal digits encode a byte. Removing the 11 first characters doesn't make sense, you probably wanted to remove the first 10 characters
- 0
- 2019-10-17
- Arthur B
-
1 回答
- 投票
-
- 2019-10-17
最新のmainnet-stagingブランチの
tezos-codec
バイナリを使用して、これらのバイトを解析できます.したがって、署名要求には、ブロックケースのタグ1
+< chain_id>
が実際に接頭辞として付けられます.残りの部分は、デコード可能な符号なしブロックヘッダー自体です:<コード> ./tezosコーデック復号0000975c013df5a63ff9be180cec1769d316cd8623a60b32f6d365fcf996228cc7ff1e01cc000000005da772d20487083189e81a9e5b90313b7f1da145e4bf6fdfdf0189d842652d83392169d7d500000011000000010100000008000000000000975b1c3f3042b3a504e1e5a91179a7c5e245c163cde8f94cf5407cda36e15e8dfbc60000b87319134abf41d100から005-PsBabyM1.block_header.unsigned {"レベル":38748、 "プロト":1、 "前任者": "BLBa1WbcNYG2qEgHAaktZTFwFyoonVX8BFeQc8E33ePK8LdZfrw"、 "timestamp": "2019-10-16T19:43:14Z"、 "validation_pass":4、 "operations_hash": "LLoaMBDyNbTVQyspAhW3ftJbwmHGS8Snq3gPpwKVxdPxM2xo34dSm"、 "フィットネス":["01"、 "000000000000975b"]、 "コンテキスト": "CoUrkPCSQ7MUau7vuFDq77e7nsYSeRUWiTBMmtB1NRNXwbLiFcJD"、 "priority":0、 "proof_of_work_nonce": "b87319134abf41d1"}
スキーマを説明することもできます:
./tezos-codec describe 005-PsBabyM1.block_header.unsignedbinary schema
N.B.:使用するプロジェクト/プロトコルのブランチによっては、プロトコルが同じでない場合があります.それでも、
./tezos-codec listencodings
を使用してサポートされているIDのリストを取得できます.You can use the
tezos-codec
binary from the latest mainnet-staging branch to parse these bytes. So, signing request are indeed prefixed by the tag1
+<chain_id>
for the block cases. The remaining part is the unsigned block header itself which can be decoded :./tezos-codec decode 005-PsBabyM1.block_header.unsigned from 0000975c013df5a63ff9be180cec1769d316cd8623a60b32f6d365fcf996228cc7ff1e01cc000000005da772d20487083189e81a9e5b90313b7f1da145e4bf6fdfdf0189d842652d83392169d7d500000011000000010100000008000000000000975b1c3f3042b3a504e1e5a91179a7c5e245c163cde8f94cf5407cda36e15e8dfbc60000b87319134abf41d100 { "level": 38748, "proto": 1, "predecessor": "BLBa1WbcNYG2qEgHAaktZTFwFyoonVX8BFeQc8E33ePK8LdZfrw", "timestamp": "2019-10-16T19:43:14Z", "validation_pass": 4, "operations_hash": "LLoaMBDyNbTVQyspAhW3ftJbwmHGS8Snq3gPpwKVxdPxM2xo34dSm", "fitness": [ "01", "000000000000975b" ], "context": "CoUrkPCSQ7MUau7vuFDq77e7nsYSeRUWiTBMmtB1NRNXwbLiFcJD", "priority": 0, "proof_of_work_nonce": "b87319134abf41d1" }
You may also describe its schema:
./tezos-codec describe 005-PsBabyM1.block_header.unsigned binary schema
N.B.: Your protocol might no be the same depending on which branch of the project / protocol you use. Still, you may retrieve the list of supported ids using
./tezos-codec list encodings
.-
うわー!ありがとう!好奇心から、手動で操作をデコードできましたか?(そして手動で、私はいくつかのpython/goツールを意味します).Wow! Thanks! Out of curiosity, have you been able to decode an op manually? (and by manually, I mean some python/go tool).
- 0
- 2019-10-17
- utdrmac
-l </code>オプションを指定してtezos-bakerを実行し、ブロックを構築するために行うすべてのRPC呼び出しを確認しました.最終的に、私はこれを見ます:
署名されるペイロード/操作(16進数)は01で始まり、この操作がブロックであることを示し、その後にチェーンID(この場合はbabylonnet)である458aa837が続きます.残りは、ポート20001で実行されているhttptezos-signerによって署名される実際のブロックです.返される署名も表示されます.
残りのペイロードをデコードして実際の内容を確認するにはどうすればよいですか?
一部のPythonコードで試行すると、解析できない結果が得られます:
283の16進数は「9」です.それから最後まで削除すると、バイト文字列が生成されます:
9-to-endはある種のチェックサムだと思います.
このバイト文字列をJSONに変換する方法がわかりません.これを16進数にすると、最初の状態に戻るだけなので、仕方がありません. このバイト文字列をbase58デコードしようとすると、エラーが発生します:「無効なエンコーディング、プレフィックスまたは長さの不一致」 何かご意見は?よろしくお願いします.