Cozimento duplo / endossante é possível ao usar um único nó?
-
-
Parece que agora éimpossível de dobrar o cozimentoenquantoestiver usando obinário de Tezos-Node.Apenastentei dobrar dobrar com 2nós diferentese todainjeção que vemem segundo lugar dá um [{gentil ":"temporário ","id ":"falha ","msg ":"fitnessmuitobaixo "}].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 responda
- votos
-
- 2019-04-17
Existem algumas questões aqui.
O que é cozimento duplo/endosso?
Éimportanteentender que apenalidade de duplicaçãotem pouco a ver com ainjeção. O crime é assinatura doisblocos ouendossos diferentes,com hashes diferentes,nomesmonível. Ainjeção é apenas umamaneirapara o seu crime ser descoberto.
Vocêpodeinjetar com segurança um bloco ouendosso único,identificadopor seu hash,qualquernúmero de vezesem qualquernúmero denós.
Por outro lado,vocêpode serpunidopor assinaturas deblocos ouendossos quenuncaforaminjetados,apenasincluídosna operação deevidências.
Então,um aviso. Vocênão deve confiarem mecanismos queimpedem ainjeção dupla. Você deveimpedir a assinatura dupla,usandoníveis demarcas d'água altas,como o aplicativo Baker,Endosser,Signere Ledger. A assinatura dupla é o crime. Tentandoimpedir que ainjeção duplaestejatentandonão serpego.
Agora,vamos ver como duplicarbake ...
Fitnessmuitobaixo
primeiro,o RPC deinjeção/bloco rejeitablocosimpróprios. Paraforçar ainjeção deblocosinadequados,vocêpodefornecer oparâmetro
força=true=true
,mencionadono os docs .assinaturas determinísticas
com umesquema de assinatura determinista (como TZ1/ED25519,masnão os outros),se você assinar os dadosexatos domesmobloco ouendosso duas vezes,vocêterá amesma assinatura. Então obloco/op hash resultante será omesmo. Desde que é omesmobloco/op,não há duplicação.
Então,para causar o cozimento duplo com TZ1,vocêprecisamodificar os dados doblocoentre os doisblocos,e. Altere o registro de datae hora ou operações.
Exemplo
Aqui é umamaneira relativamentefácil de dobrar obakeem uma caixa de areia:
# Perigo,Cozimento Duplo,Para Sandbox Tezos-Cliente RPC Get/Chains/Main/Mempool/Pending_Operations| jq '.applied=[]' >/tmp/empty_mempool.json. Tezos-Client Endorsepara Bootstrap1 Tezos-Cliente assarparabootstrap1 --mempool/tmp/empty_mempool.json # Corrigir o caminho,para o seu cliente TMP Sandbox (!) # Nãoexclua seu arquivo "blocos" reais! rm/tmp/tezos-tmp-client.xxxxxxxx/blocks. Tezos-Cliente assarparabootstrap1 --mempool/tmp/empty_mempool.json
Issofuncionaporque:
- .
-
Ashapara
usa o registro de datae hora atual,porisso,seesperarmos umpoucoentre osbolos,o registro de datae horanos dados dobloco será diferente,resultandoem diferentesblocos (mesmo com TZ1.) - Onó valida oblocoe o acusadorpeganele.
- Noentanto,porqueinjetamos umendosso,mas assados comnenhum,onóignora obloco. Issotornafácil repetir o assar,porque a cabeça aindaestaránonível anterior.
- Finalmente,nós subvertemos aproteção dupla dobaking do Baker,removendo o arquivo demarca d'água "blocos".
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.
-
Obrigadopela sua resposta!Thanks for your answer!
- 0
- 2019-04-18
- RoMarQ
-
Tom,você sabepor que os acusesnão detectarem como 50% depescadores duplos,em Zeronet às vezesminhaspescadas duplasnão são detectadas,porexemplo,às vezes,meu acusador é capaz de detectarminha cozedura duplaenquanto outrosnãoe às vezesMeu acusadornão detectae outrosfazem. Estefoi detectado apenaspelomeupróprio acusador: https://imgur.com/otcv0uj Isso ocorreporqueestoufazendo ummódulo acusadorpara omeu aplicativo de cozimentoe queroter certeza de quetudoestáfuncionando corretamente. Issopode ser umproblema com "/monitor/valid_blocks" quenão rastreia cadabloco válido,pois deve?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 Mondetjá respondeu. "Emgeral,a redepropagará osblocos que"melhorar "a aptidão. Então,se o seubloco assadonãofoiendossado,os acusadoresnão são susceptíveis de vê-loe injetar a acusação". "Nogeral,as acusações sãoprojetadasparapenalizar atores realmenteirritantes,não apenas acidentais de duplapescadores quenão desaceleram ouprejudicam a rede". "(Aindapode acontecer queem circunstâncias umpouco azaras,uma cozedura dupla acidental é acusada de curso)"@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
Onó de Tezostem algumtipo deproteção que rejeita umbloco quejáfoiinjetado de serinjetadonovamente?
Estoutentandotestarmeumódulo acusador,masnãopossofazer de cozimento duplo.
Se omeu aplicativojátiver cozidoessebloco,quandotentoinjetar uma segunda vezeu receboisso.
Existe algumtipo deproteçãonosnósjá que rejeitainjeções duplas domesmobloco?
edit:
Parece que agora éimpossível de duplo assarenquantoestiver usando node Tezos binário.Apenastentei dobrar dobrar com 2nós diferentese todainjeção que vemem segundo lugar dá um
[{"kind":"temporary","id":"failure","msg":"Fitness too low"}]
.