1. Smart contact is like a microservice: a stateful program with a public API
2. Unlike a microservice, the code, the state and all the calls to it are publicly available & are immutable (b/c blockchain)…
4. The native language of Ethereum is assembly-like set of opcodes
5. Executing a transaction (a call to an API) costs money, priced per opcode…
7. 2 bugs in Parity multisig wallet show how easy it is to get it wrong: $300M in $eth stolen or frozen…
9. It's easy to: deploy a new contract, find & exploit bugs. It's very hard to: fix & redeploy a contract, fix results of an exploit…
10.1. We need to know what contacts should and shouldn't do (good specs)
10.2. We need to know that the actual code matches the spec (good implementation)
14. For example, using symbolic execution or abstract interpretation we can construct a tree of possible execution paths. If one of those leads to a "selfdestruct" call, there could be a bug







