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
-
"파이썬 사용"버전의 질문에 대한 답변 :( 일반적인 질문에 대한 답변이없는 것 같습니다 ... 그래서이 질문에 답변 해 보겠습니다.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] (십진수)입니다. 그러면0x8fcf233671b6a04fcf679d2a381c2544ea6c1ea29ba6157776ed8424c7ccd00b
. -
블록 해시 바이트의
BLAKE2B
해시 (크기 32)를 계산합니다.0x7a06a7709ff405d1791d856c52a3c55246e03ec913599b813ec2977398afb3be
를 얻습니다. 처음 4 바이트 인0x7a06a770
만 가져옵니다. -
Base58Check-encode
"Net"접두사 [87,82,0] (git grep Net \ (
))가있는이 4 바이트. 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
는 다음을 반환합니다.'체인 고유 식별자'
이 식별자는 어떻게 계산 되나요?