Como é Chain_ID calculado?
-
-
Possível duplicado de [Comofaço o Base58 codificando o ID da cadeia usando Python?] (Https://tezos.stackexchange.com/Questions/465/how-do-i-Base58-Code-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
-
As respostasna versão "usando Python" dapergunta :(nãoparece responder àperguntageral ...então voutentar responder aeste.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 responda
- votos
-
- 2019-02-27
O
Chain_ID é calculado apartir do hash Block Genesis da seguintemaneira. Primeiro,em Pseudocódigo:
Tezosb58CheckCoard ('Net', firstfourbytes ( Blake2B (Msg=Tezosb58CheckDecode ('B',GenesisBlockhash), tamanho=32)))
em detalhes:
- .
-
pegue o hash deblocos degênesis. Porexemplo,no Mainnet,isso é
"BloqueioGenesiãoGenesiãoGenesiãoGenesiF79B5D1Cow2"
. -
base58Check-decodificam
o hashblock. Osbytesprefixosparablocos "B" são [1,52] (em decimal),como vocêpode verfazendogit grepb \ (
em tezos.git. Issonos dá0x8fcf233671b6a04fcf679d2a381cf679d2a381cf679E5C1CCD00B
. -
Calcule o
blake2b
hash (tamanho 32) dosbytes de hashblock. Nós recebemos0x7a06a7709ff405d1791d856c52a3c55246e03ec913599b813ec2977398Afb3Be
. Pegue apenas osprimeiros quatrobytes,0x7a06a770
. -
Base58Check-codificar
estes quatrobytes com oprefixo "net" [87,82,0] (git grepnet \ (
). Nós recebemos < Código> "NetXDQPrcvkpawu" .
Para uma cadeia deteste de atualização deprotocolo,acredito que obloco 'Gênesis' será oblocona cadeiaprincipal da qual a cadeia detestefoibifurcada.
Vocêpodeencontrareste cálculo definidoem
lib_crypto/chain_id.ml e,em seguida,usado comochain_id.of_block_hash
em vários lugares (porexemplo,lib_shell/state.ml
,lib_shell/chain_validator.ml
,lib_storage/context.ml
)./p >.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
).-
Obrigadopela sua resposta!Vocêpoderiafornecer sepossívelpara referência umafonteparaestainformação?thanks for your answer! could you provide if possible for reference a source for this information ?
- 0
- 2019-03-01
- Ezy
O RPC
Get/Chains/& Lt; Chain_ID & GT;/Chain_ID
Retorna:Comoesteidentificador é computado?