Double cuisson / endossage est possible lors de l'utilisation d'un seul nœud?
-
-
On dirait que c'estmaintenantimpossible à double cuiretouten utilisant Binary Binary Tezos-Node.Il suffit d'essayer de doubler de cuire avec 2nœuds différentset chaqueinjection qui setrouve à la deuxièmeplace donne un [{"type": "temporaire","ID": "échec","MSG": "Fitnesstropbas"}].Looks like that is now impossible to double bake while using tezos-node binary. Just tried to double bake with 2 different nodes and every injection that comes in second place gives a [{"kind":"temporary","id":"failure","msg":"Fitness too low"}].
- 0
- 2019-04-17
- RoMarQ
-
1 réponses
- votes
-
- 2019-04-17
Il y a quelquesproblèmesici.
Quelleest la double cuisson/endossement?
Ilestimportant de comprendre que lapénalité de doublage apeu à voir avec l'injection. Le crimeest Signature deuxblocs ouendossements différents,avec différents hachages,aumêmeniveau. L'injectionn'est qu'une solutionpour que votre crime soit découverte.
Vouspouvezinjecteren toute sécurité unbloc ouendossement ,identifiépar son hachage,n'importe quelnombre defois dansn'importe quelnombre denœuds.
D'autrepart,vouspourriez êtrepunipour des signatures deblocs ou de supports quin'ontjamais étéinjectés dutout,inclus dans l'opération depreuve.
Donc,un avertissement. Vousne devriezpas compter sur desmécanismes quiempêchent la doubleinjection. Vous devriezempêcher la double signature,en utilisant desfiligranes deniveau élevé,telles que leboulanger,l'endorseur,le signataireet l'application Ledger. Double signatureest le crime. Essayer d'empêcher la doubleinjection,c'estessayer dene pas sefaireprendre.
Maintenant,voyons comment doubler cuire ...
Fitnesstropbas
Premier,le/l'injection/bloc RPC rejette lesblocsimpropres. Pourforcer l'injection deblocsimpropres,vouspouvezfournir leparamètre
force=true
de requête,mentionné dans le docs .Signatures déterministes
Avec un schéma de signature déterministe (comme TZ1/ED25519,maispas les autres),si vous signerezexactement lesmêmes données debloc ou d'endossement deuxfois,vous allez obtenir lamême signature. Ensuite,le hachage debloc/op résultant sera lemême. Puisqu'ilest lemêmebloc/op,iln'y apas de doublement.
Donc,pour causer une double cuisson avec TZ1,vous devezmodifier les données deblocentre les deuxblocs,parexemple. changer l'horodatage ou les opérations.
Exemple
Voici unmoyen relativementfacile de cuire à double cuisson dans unbac à sable:
# DANGER, DOUBLE BAKING, FOR SANDBOX tezos-client rpc get /chains/main/mempool/pending_operations | jq '.applied = []' > /tmp/empty_mempool.json tezos-client endorse for bootstrap1 tezos-client bake for bootstrap1 --mempool /tmp/empty_mempool.json # fix the path, for your TMP SANDBOX (!) client # DO NOT delete your real "blocks" file! rm /tmp/tezos-tmp-client.XXXXXXXX/blocks tezos-client bake for bootstrap1 --mempool /tmp/empty_mempool.json
Celafonctionneparce que:
-
bake for
utilise l'horodatage actuelpar défaut,donc sinous attendons unpeuentre lesbacs,l'horodatage dans les données dubloc sera différent,ce quientraînera desblocs différents (même avec TZ1.) - Lenœud valide lebloc,et l'accusateur reprend dessus.
- Toutefois,parce quenous avonsinjecté uneendossementmais que cuit sans aucun arrêt,lenœudignore alors lebloc. Celafacilite la répétition du cuire,car latête seratoujours auniveauprécédent.
- Enfin,nous subverrons laprotection double cuisseuse duboulangeren supprimant lefichier defiligrane "Blocks".
There are a few issues here.
What is double baking/endorsement?
It is important to understand that the doubling penalty has little to do with injection. The crime is signing two different blocks or endorsements, with different hashes, at the same level. Injection is just one way for your crime to be discovered.
You can safely inject a single block or endorsement, identified by its hash, any number of times into any number of nodes.
On the other hand, you could be punished for signatures of blocks or endorsements which were never injected at all, only included in the evidence operation.
So, a warning. You should not rely on mechanisms which prevent double injection. You should prevent double signing, using level high watermarks, like the baker, endorser, signer, and Ledger app. Double signing is the crime. Trying to prevent double injection is trying not to get caught.
Now, let's see how to double bake...
Fitness too low
First, the /injection/block RPC rejects unfit blocks. To force injection of unfit blocks, you can supply the
force=true
query parameter, mentioned in the docs.Deterministic signatures
With a deterministic signature scheme (like tz1/ed25519, but not the others), if you sign the exact same block or endorsement data twice, you're going to get the same signature. Then the resulting block/op hash will be the same. Since it is the very same block/op, there is no doubling.
So, to cause double baking with tz1, you need to modify the block data between the two blocks, e.g. change the timestamp or operations.
Example
Here is one relatively easy way to double bake in a sandbox:
# DANGER, DOUBLE BAKING, FOR SANDBOX tezos-client rpc get /chains/main/mempool/pending_operations | jq '.applied = []' > /tmp/empty_mempool.json tezos-client endorse for bootstrap1 tezos-client bake for bootstrap1 --mempool /tmp/empty_mempool.json # fix the path, for your TMP SANDBOX (!) client # DO NOT delete your real "blocks" file! rm /tmp/tezos-tmp-client.XXXXXXXX/blocks tezos-client bake for bootstrap1 --mempool /tmp/empty_mempool.json
This works because:
bake for
uses the current timestamp by default, so if we wait a bit between bakes, the timestamp in the block data will be different, resulting in different blocks (even with tz1.)- The node validates the block, and the accuser picks up on it.
- However, because we injected an endorsement but baked with none, the node then ignores the block. This makes it easy to repeat the bake, because the head will still be at the previous level.
- Finally, we subvert the baker's double bake protection, by removing the "blocks" high watermark file.
-
Mercipour votre réponse!Thanks for your answer!
- 0
- 2019-04-18
- RoMarQ
-
Tom,savez-vouspourquoi les accusateursne détectentpas comme 50% des doublesboulins,sur Zeronet Parfois,mes doublesboulinsne sontpas détectés,parexemple,mon accusateurestparfois capable de détecterma double cuissonpendant que d'autresne lefontpaset parfoisMon accusateurne détectepaset les autresfont. Celui-cin'a été détecté queparmonpropre accusateur: https://imgur.com/otcv0uj C'estparce queje fais unmodule d'accusateurpourmon application de cuissonet jetiens à vous assurer quetoutfonctionne correctement. Celapeut-il être unproblème avec "/moniteur/valide_blocks" quine suitpastous lesblocs valides caril devrait?Tom, do you know why the accusers don't detect like 50% of double bakings, on zeronet sometimes my double bakings aren't detected, for example, sometimes my accuser is able to detect my double baking while others don't and sometimes my accuser doesn't detect and others do. This one was only detected by my own accuser: https://imgur.com/OTCv0uj This is because I'm making an accuser module for my baking app and I want to make sure everything is working correctly. Can that be a problem with "/monitor/valid_blocks" that doesn't track every valid block as it should?
- 0
- 2019-04-22
- RoMarQ
-
@Seb MONDET a déjà répondu. "Engénéral,le réseau vapropager desblocs qui" amélioreront "la conditionphysique. Donc,si votrebloc-cuitn'apas étéendossé,les accusateursne sontpas susceptibles de le voiret d'injecter l'accusation." "Dans l'ensemble,les accusations sont conçuespourpénaliser des acteurs vraimentgênants,pas seulement des doublesboulons accidentels quine ralentissaientni nefontpas demal au réseau." "(Celapeutencore arriver que dans des circonstances quelquepeumalchanceuses,une double cuisson accidentelleest accuséebien sûr)"@Seb Mondet already answered. "In general the network will propagate blocks that "improve" the fitness. So if your baked block has not been endorsed, accusers are not likely to see it and inject the accusation." "Overall the accusations are designed to penalize really annoying actors, not just accidental double-bakings that don't slow-down or hurt the network." "(it can still happen that in somewhat unlucky circumstances, an accidental double-baking gets accused of course)"
- 0
- 2019-04-22
- RoMarQ
Lenœud Tezos a-t-il une sorte deprotection qui rejette unbloc qui a déjà étéinjecté d'êtreinjecté ànouveau?
J'essaie detestermonmodule accusateur,maisje nepeuxpasfaire de double cuisson.
Simon application a déjà cuit cebloc,quandj'essaie de l'injecter une secondefois queje reçois cela.
Y a-t-il déjà une sorte deprotection sur lesnœuds qui rejette les doublesinjections dumêmebloc?
On dirait que c'estmaintenantimpossible à double cuiretouten utilisant Tezos-noeud binaire.Il suffit d'essayer de doubler de cuire avec 2nœuds différentset chaqueinjection qui vienten second lieu donne un
[{"kind":"temporary","id":"failure","msg":"Fitness too low"}]
.