Come viene calcolato chain_id?
-
-
Possibile duplicato di [Comefaccio a codificarein base58 l'ID della catena usando Python?] (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
-
Le rispostenella versione "using Python" della domanda :(non sembrano rispondere alla domandagenerale ... Quindi cercherò di rispondere a questa.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 risposta
- voti
-
- 2019-02-27
chain_id
viene calcolato dall'hash delbloccogenesis come segue.Primo,in pseudocodice:
tezosB58CheckEncode ('Net', firstFourBytes ( blake2b (msg=tezosB58CheckDecode ('B',genesisBlockHash), taglia=32)))
In dettaglio:
-
Prendi l'hash delbloccogenesis. Adesempio,nellamainnet,questo è
"BLockGenesisGenesisGenesisGenesisGenesisf79b5d1CoW2"
. Base58Check-decode
l'hash delblocco. Ibyte delprefissoperi blocchi "B" sono [1,52] (in decimale),comepuoi vedereeseguendogit grep B \ (
in tezos.git. Questo ci dà0x8fcf233671b6a04fcf679d2a381c2544ea6c1ea29ba6157776d008424/code>.
-
Calcola l'hash
BLAKE2B
(dimensione 32) deibyte hash delblocco. Otteniamo0x7a06a7709ff405d1791d856c52a3c55246e03ec913599b813ec2977398afb3be
. Prendi soloi primi quattrobyte,0x7a06a770
. Base58Check-encode
questi quattrobyte conilprefisso "Net" [87,82,0] (git grep Net \ (
). Otteniamo < codice> "NetXdQprcVkpaWU" .
Per una catena ditest di aggiornamento delprotocollo,credo cheilblocco "genesis" saràilblocconella catenaprincipale da cui è statabiforcuta la catena ditest.
Puoitrovare questo calcolo definitoin
lib_crypto/chain_id.ml
e quindi utilizzato comeChain_id.of_block_hash
in varipunti (adesempiolib_shell/state.ml
,lib_shell/chain_validator.ml
=" https://gitlab.com/tezos/tezos/blob/e7612c5ffa46570cdcc612f7bcead771edc24283/src/lib_storage/context.ml#L454 "rel="nofollownoreferrer ">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
).-
grazieper latua risposta!potrestifornire sepossibile come riferimento unafonteper questeinformazioni?thanks for your answer! could you provide if possible for reference a source for this information ?
- 0
- 2019-03-01
- Ezy
L'RPC
GET /chains/<chain_id>/chain_id
restituisce:Come viene calcolato questoidentificatore?