Y a-t-il une API de nœud pour déterminer si un reorg a eu lieu
-
-
Je comprends que Tezosn'accepterapas une succursale de 5 cycles vieux -mais depuis un cycleest de 4096blocset il y a 1blocparminute qui constitueraitbeaucoup deblocspour ré-importeret très longtempspour attendre lafinalité defonctionnementet rendre le systèmeinutilisable.Donc,il doit y avoir autre choseicipour déterminer les reorges.I understand that Tezos will not accept a branch that is 5 cycles old - but since a cycle is 4096 blocks and there is 1 block per minute that would be a lot of blocks to re-import and a very long time to wait for operation finality and make the system unusable. So there must be something else going on here to determine reorgs.
- 0
- 2020-08-21
- Carl Cherry
-
Afaik,iln'y apas d'API qui vous dit cela.Vous devez simplement "voyageren arrière"pour chaquenouveaubloc que vous recevez.Block-> Prédécesseuret vérifiez quetoutesttoujoursen ordre.Si vous découvrez qu'unprédécesseurne correspondpas,vous avez un reorg.AFAIK, there is no API that tells you this. You have to simply "travel backwards" for each new block you receive. Block->predecessor and verify everything is still in order. If you find out that a predecessor does not match, then you have a reorg.
- 0
- 2020-08-21
- utdrmac
-
Jene suispas sûr de lafaçon dont les hachages deblocs sont créés.Est-il raisonnable de supposer que sije lisais unblocet que le hachageprécédentne correspondpas à ce queje pense que cela devrait être alorsj'aibesoin demarcheren arrièrejusqu'à ce queje trouve un ancêtre commun?Cela signifierait donc queje n'aibesoin que de se soucier des 2 derniersblocspour détecter un changement?I am not sure how block hashes are created. Is it reasonable to assume that if I read a block and the previous hash does not match what I think it should be then I need to walk backwards until I find a common ancestor? So that would mean that I only need to care about the most recent 2 blocks to detect a change?
- 0
- 2020-08-24
- Carl Cherry
-
Chaquebloc demétadonnées contient le hachage d'elle-mêmeet le hachage dubloc avantelle (prédécesseur).Vousn'avezpas à calculer le hasch vous-même.Vous devezprobablement vous soucier deplus que les 2 derniersblocs,cependant.Techniquement,Tezospermet de réorgan la chaînejusqu'à 5 cycles dans lepassé,bien queje ne suispas sûr de savoir comment cela seproduirait réellement.Each block metadata contains the hash of itself and the hash of the block before it (predecessor). You don't have to calculate the hash yourself. You probably need to care about more than the most recent 2 blocks, though. Technically, Tezos allows for chain reorg up to 5 cycles in the past, though I'm not sure how that would actually happen.
- 0
- 2020-08-25
- utdrmac
-
1 réponses
- votes
-
- 2020-08-26
Il y a le "streaming" RPC
/moniteur/tête/[chaîne_id]
qui vousindique chaquefois que lenœud change satête.Il renvoie unflux d'objets JSON ressemblant à
{"HASH": [...],"Niveau": [...]: [...],": [...]": [...] ;prédécesseur ": [...]," horodatage ": [...]: [...]," validation_pass & quot;: 4,[...]}
Lorsqu'aucun reorgn'est survenu,le champ
prédécesseur
est égal au champhachage
de sonprédécesseur dans leflux. Dès que vous voyez{"HASH": FOO,"Niveau": [...]: [...],[...]} {& quot; [...],[...],[...],& quot;prédécesseur & quot ;:bar,[...]}
vous avez repéré un reorg!Si c'est unproblème d'analyser un RPC de streamingne terminantjamais,vouspouvez détourner comme "l'alarme de changement detête" le (également streaming,mais cettefois-vousterminantet vousne vous souciezpas de lire son corps) RPC
/chaînes/[chaîne_id]/mempool/moniteur_opérations
caril dispose de lapropriété àterminer chaquefois que lenœud change Têteet extraire desinformations sur le hachage deblocet sonprédécesseur àpartir de/chaînes/[chaîne_id]/blocs/tête/tête
...There is the "streaming" RPC
/monitor/heads/[chain_id]
that tells you every time the node changes its head.It returns a stream of JSON objects looking like
{"hash":[...],"level":[...],"proto":[...],"predecessor":[...],"timestamp":[...],"validation_pass":4,[...]}
When no reorg occurred, the field
predecessor
is equals to the fieldhash
of its predecessor in the stream. As soon as you see{"hash":foo,"level":[...],[...]}{"hash":[...],[...],"predecessor":bar,[...]}
you spotted a reorg!If it is a problem to parse a never terminating streaming RPC, you can hijack as the "alarm of head change" the (also streaming but this time terminating and you don't care about reading its body) RPC
/chains/[chain_id]/mempool/monitor_operations
as it has the property to terminates each time the node changes it head and extract information about the block hash and its predecessor from/chains/[chain_id]/blocks/head/header
...-
Vousn'avezmêmepasbesoin de rechercher un changement dans les hatupes,tout changement deniveau deniveaunon strictement croissantest un reorg.You don't even need to look for a change in the hashes, any non-strictly increasing change in level is a reorg.
- 0
- 2020-08-26
- Arthur B
Nous avons un service quitire des opérations d'unnœud Tezoset insère dansnotrepropremagasin de données.Jeme demande commentnous allons détecter une reorg à l'aide dunœud RPC.Ou y a-t-il un algorithme quenous devrions utiliser sur lesn blocs lesplus récents denotre cache?