Comment est calculé chaîne_id?
-
-
Dupliquerpossible de [Commentpuis-ibase58encoder l'identifiant de la chaîne à l'aide de Python?] (Https://tezos.stackexchange.com/questions/465/how-do--base58-encode-the-chain-id-utilisateur-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
-
Les réponses dans la version "Utilisation de Python" de la question :(ne semblentpas répondre à la questiongénérale ... Jetenterai donc de répondre à celui-ci.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 réponses
- votes
-
- 2019-02-27
Le
chaîne_id
est calculé àpartir du hachage debloc de Genesis comme suit.Premier,en pseudocode:
Tezosb58Checkencode ('Net', firstfourbytes ( Blake2B (msg=tezosb58Checkdecode ('B',GenesSblockhash), taille=32)))
en détail:
-
Prenez le Hash Block Genesis. Parexemple,en Mainnet,c'est
"BlockgenesisGenesisisisgenesisSaf79B5D1Cow2"
. -
base58Check-décode
lebloc deblocage. Les octets depréfixespour lesblocs "B" sont [1,52] (en décimal),comme vouspouvez le constateren faisantgit grepb \ (
danstezos.git. Cecinous donne0x8fcf29f671B6A381C29BA6157776ed8424C7CCD00B
. -
calculez le
blake2b
hachage (taille 32) des octets de hachage debloc. Nous obtenons0x7a06a7709f405d1791d856c52a3c55246e03ec913599b813ec2977398fb3be
. Prenez seulement les quatrepremiers octets,0x7a06a770
. -
base58Check-encode
Ces quatre octets avec lepréfixe "NET" [87,82,0] (git grepnet \ (
). Nous obtenons < Code> "NetXDQPRCVKPAWU" .
Pour une chaîne detest demise àjour duprotocole,je pense que lebloc «Genesis» sera lebloc de la chaîneprincipale àpartir de laquelle la chaîne detest a étéfourchue.
Vouspouveztrouver ce calcul défini dans
lib_crypto/chaîne_id.ml
puis utilisé commechaîne_id.of_block_hash
dans diversendroits (parexemple,lib_shell/state.ml
,lib_shell/chaîne_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
).-
Mercipour votre réponse!Pourriez-vousfournir sipossiblepour référence une sourcepour cesinformations?thanks for your answer! could you provide if possible for reference a source for this information ?
- 0
- 2019-03-01
- Ezy
Le RPC
Obtenez/Chains/& lt; Chain_id & GT;/Chain_id
Retours:Comment cetidentifiantest-il calculé?