chain_idはどのように計算されますか?
-
-
[Pythonを使用してチェーンIDをbase58でエンコードするにはどうすればよいですか?](https://tezos.stackexchange.com/questions/465/how-do-i-base58-encode-the-chain-id-using-python)Possible duplicate of [How do I base58 encode the chain ID using Python?](https://tezos.stackexchange.com/questions/465/how-do-i-base58-encode-the-chain-id-using-python)
- 3
- 2019-02-19
- Ezy
-
質問の「Pythonを使用する」バージョンでの回答:(一般的な質問には答えていないようです...だから私はこれに答えようとします.The answers in the "using Python" version of the question :( do not seem to answer the general question... So I will attempt to answer this one.
- 0
- 2019-02-27
- Tom
-
1 回答
- 投票
-
- 2019-02-27
chain_id
は、ジェネシスブロックハッシュから次のように計算されます.まず、擬似コードで:
tezosB58CheckEncode( 'Net'、 firstFourBytes( blake2b(msg=tezosB58CheckDecode( 'B'、genesisBlockHash)、 サイズ=32)))
詳細:
-
ジェネシスブロックハッシュを取得します.たとえば、メインネットでは、これは
"BLockGenesisGenesisGenesisGenesisGenesisf79b5d1CoW2"
です. -
Base58Check-decode
ブロックハッシュ.tezos.gitでgit grep B \(
を実行するとわかるように、ブロック「B」のプレフィックスバイトは[1、52](10進数)です.これにより、0x8fcf233671b6a04fcf679d2a381c2544ea6c1ea29ba6157776ed8424c7ccd00b <が得られます./code>.
-
ブロックハッシュバイトの
BLAKE2B
ハッシュ(サイズ32)を計算します.0x7a06a7709ff405d1791d856c52a3c55246e03ec913599b813ec2977398afb3be
を取得します.最初の4バイト、0x7a06a770
のみを取得します. -
Base58Check-encode
これらの4バイトに「Net」プレフィックス[87、82、0](git grep Net \(
)を付けます.< code> "NetXdQprcVkpaWU" .
プロトコル更新テストチェーンの場合、「genesis」ブロックは、テストチェーンが分岐されたメインチェーン内のブロックになると思います.
この計算は
lib_crypto/chain_id.ml
その後、さまざまな場所でChain_id.of_block_hash
として使用されます(例:lib_shell/state.ml
、lib_shell/chain_validator.ml
、lib_storage/context.ml
).The
chain_id
is computed from the genesis block hash as follows.First, in pseudocode:
tezosB58CheckEncode('Net', firstFourBytes( blake2b(msg = tezosB58CheckDecode('B', genesisBlockHash), size = 32)))
In detail:
Take the genesis block hash. For example, in mainnet, this is
"BLockGenesisGenesisGenesisGenesisGenesisf79b5d1CoW2"
.Base58Check-decode
the block hash. The prefix bytes for blocks "B" are [1, 52] (in decimal), as you can see by doinggit grep B\(
in tezos.git. This gives us0x8fcf233671b6a04fcf679d2a381c2544ea6c1ea29ba6157776ed8424c7ccd00b
.Compute the
BLAKE2B
hash (size 32) of the block hash bytes. We get0x7a06a7709ff405d1791d856c52a3c55246e03ec913599b813ec2977398afb3be
. Take only the first four bytes,0x7a06a770
.Base58Check-encode
these four bytes with the "Net" prefix [87, 82, 0] (git grep Net\(
). We get"NetXdQprcVkpaWU"
.
For a protocol update test chain, I believe the 'genesis' block will be the block in the main chain from which the test chain was forked.
You can find this computation defined in
lib_crypto/chain_id.ml
and then used asChain_id.of_block_hash
in various places (e.g.lib_shell/state.ml
,lib_shell/chain_validator.ml
,lib_storage/context.ml
).-
ご回答有難うございます!可能であれば、この情報のソースを参照するために提供できますか?thanks for your answer! could you provide if possible for reference a source for this information ?
- 0
- 2019-03-01
- Ezy
RPC
GET /chains/<chain_id>/chain_id
は次を返します:この識別子はどのように計算されますか?