ethereum / research

MIT License
1.79k stars 583 forks source link

Question on note about data availability #11

Open JustinDrake opened 7 years ago

JustinDrake commented 7 years ago

I am reading the note on data availability, which states:

Even if succinct zero knowledge proofs can be used to verify correctness, an attacker getting away with publishing invalid blocks

If a SNARK/STARK can verify correctness of a block, how can an attacker get away with publishing an invalid block? What is the difference between correctness and validity? The two parts of the sentence above seem contradictory.

vbuterin commented 7 years ago

Sorry! That's my fault. Should be publishing an unavailable block. Fixed now.

JustinDrake commented 7 years ago

Thanks for the clarification. A followup remark on

an attacker getting away with publishing unavailable blocks and getting them included in the chain is still very bad, as such a thing happening denies all other validators the ability to fully calculate the state, or to make blocks that interact with the portion of the state that is no longer accessible.

I don't think unavailable blocks in the chain are very bad. I think they can be good:

  1. The fact that they "deny all other validators the ability to fully calculate the state" elegantly allows for contracts with private state. It's not a problem so long as block availability is not required for individual contracts to move state forward. Imagine a mixer where 100 people can each privately withdraw their mixed balance using a STARK. Ordering of blocks is irrelevant, so players can act independently and block unavailability is not a problem, only validity.
  2. "to make blocks that interact with the portion of the state that is no longer accessible" => This is just a design problem where the writable state needs to be segregated to a well-defined "safe" subset (like the storage of a single address) where the intent is to preserve privacy and/or do clever scalability optimisations.

I'm interested in playing with the idea of abstracting away code and storage in Ethereum. See section 3 here.