4. Read Books!
● Cachin et al. „Introduction to Reliable and Secure
Distributed Programming“
● Russian: „Введение в надежное и безопасное
распределенное программирование“ (Качин и др.)
5. P2P network
● Each node has its own state
● The goal is to have replicated subset of it across the
network
● In the presence of Byzantine adversaries!
● (so only honest nodes agree on the state)
● (and only eventually)
7. Minimal State
● Can answer the question „whether a transaction is valid
and so applicable“
● apply(min_state, tx): (MinimalState | Error)
● apply(apply(min_state, tx), tx) is always Error
● In Bitcoin UTXO set
8. Minimal State
● Transaction application is deterministic
● There's some initial (genesis) state hardcoded
● By applying the same sequence of transactions to the
genesis state, two honest nodes got the same minimal
state
● Thus we need for a guarantee every pair of honest nodes
is eventually applying the same sequence of transactions!
9. Bitcoin: UTXO set
● unspent outputs set
● enough to validate any transaction
● application is about removing outputs spent and add new
ones
10. Output Abstraction: Box
● minimal state is a set of closed boxes
● transaction opens some boxes and add new ones
● both UTXO and acccount model (Nxt, Ethereum)
11. Abstract Transaction Authentication
● Box is protected by a proposition (e.g. pubkey)
● To be open with a proof (e.g. a signature)
● check (proposition, proof, message)
15. Node view
NodeView = <
Blockchain,
MinimalState,
MemoryPool,
Vault>
(Blockchain, MinimalState) is eventually the same for all
the honest nodes
16. NodeView Modification
NodeView x Block →NodeView | Error
Blockchain x Block → <Blockchain, Opt[Rollback]> | Error
MinState x <Block, Opt[Rollback]> → MinState | Error
MemPool x <Block, Opt[Rollback]> →MemPool
Vault x <Block, Opt[Rollback]> → Vault
17. Note that:
● rollbacks exist!
● <Blockchain, MinState, Vault> MUST be consistent (after a
block application, a rollback, a crash etc)
● read-when-update semantics should be resolved
● use QuickCheck to check correctness, not unit tests