ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Since Hackathon II: PoC6 introduced 
● The Platform experience: Ethereum Web Browser 
● Reduced block time 
• target 12 seconds; 
• currently 4 seconds 
● Implemented GHOST for increased robustness 
● Added the POST opcode 
See Ethereum Blog post “State of Ethereum: August Edition”
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
GHOST: 
use off-chain 
proof-of-work
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
GHOST: 
use off-chain 
proof-of-work 
Bitcoin: longest chain
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
GHOST: 
use off-chain 
proof-of-work 
Ethereum: most supported
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Asynchronous Calls: the “POST” queue 
0. Contract execution transaction added to POST queue 
1 
POST queue
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Asynchronous Calls: the “POST” queue 
0. Contract execution transaction added to POST queue 
1. Repeat until queue empty: 
1 
POST queue
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Asynchronous Calls: the “POST” queue 
0. Contract execution transaction added to POST queue 
1. Repeat until queue empty: 
● Pop top call and execute 
1 
POST queue
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Asynchronous Calls: the “POST” queue 
0. Contract execution transaction added to POST queue 
1. Repeat until queue empty: 
● Pop top call and execute 
● POST command adds a call to the queue 
1 
2 
3 
4 
POST queue
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Asynchronous Calls: the “POST” queue 
0. Contract execution transaction added to POST queue 
1. Repeat until queue empty: 
● Pop top call and execute 
● POST command adds a call to the queue 
2. Process suicides 
3. Refund gas 
POST queue
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Asynchronous Calls: the “POST” queue 
Useful for “checkpointing” 
0. Contract execution transaction added to POST queue 
1. Repeat until queue empty: 
● Pop top call and execute 
● POST command adds a call to the queue 
2. Process suicides 
3. Refund gas 
POST queue
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Ethereum coding recap: 
New contracts should be sent to address 0 
“(Create Contract)” 
Your code is executed and the return value is used as 
the code for the new contract. 
When your “init” code is executed, it has access to 
the storage of the new contract.
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Ethereum coding recap: 
EVM 
non-volatile 
code 
ROM 
storage 
RAM 
volatile 
args 
ROM 
memory 
RAM 
stack
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Ethereum coding recap: 
{ 
[[69]] (caller) 
(returnlll 
(when (= (caller) @@69) 
[[ (calldataload 0) ]] (calldataload 32) 
) 
) 
}
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Ethereum coding recap: 
EVM 
non-volatile 
code 
ROM 
storage 
RAM 
volatile 
args 
ROM 
memory 
RAM 
stack 
[[<addr>]] 
@@<addr> 
[<addr>] 
@<addr> 
Calldataload <byte>
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Ethereum coding recap: 
{ 
[[69]] (caller) 
(returnlll 
(when (= (caller) @@69) 
(for {} (< @i (calldatasize)) [i](+ @i 64) 
[[ (calldataload @i) ]] (calldataload (+ @i 32)) 
) 
) 
) 
}
ETHEREUM: 
The Decentralized Cryptographic Platform for Crypto-law 
Ethereum coding recap: 
{ 
;; Give caller a whole bunch of cash. 
[[ (caller) ]]: 0x1000000000000000000000000 
;; Register with the NameReg contract. 
[0] "GavCoin" 
(call (- (gas) 100) 0x2d0aceee7e5ab874e22ccf8d1a649f59106d74e8 0 0 7 0 0) 
(returnlll { 
(when (!= (calldatasize) 64) (stop)) ; stop if there's 
; not enough data passed. 
[fromBal] @@(caller) 
[toBal]: @@(calldataload 0) 
[value]: (calldataload 32) 
(when (< @fromBal @value) (stop)) ; stop if there's 
; not enough for the transfer. 
[[ (caller) ]]: (- @fromBal @value) ; subtract amount 
; from caller's account. 
[[ (calldataload 0) ]]: (+ @toBal @value) ; add amount on to recipient's account. 
}) 
}

September Ethereum Berlin Workshop

  • 1.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Since Hackathon II: PoC6 introduced ● The Platform experience: Ethereum Web Browser ● Reduced block time • target 12 seconds; • currently 4 seconds ● Implemented GHOST for increased robustness ● Added the POST opcode See Ethereum Blog post “State of Ethereum: August Edition”
  • 2.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law
  • 3.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law GHOST: use off-chain proof-of-work
  • 4.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law GHOST: use off-chain proof-of-work Bitcoin: longest chain
  • 5.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law GHOST: use off-chain proof-of-work Ethereum: most supported
  • 6.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Asynchronous Calls: the “POST” queue 0. Contract execution transaction added to POST queue 1 POST queue
  • 7.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Asynchronous Calls: the “POST” queue 0. Contract execution transaction added to POST queue 1. Repeat until queue empty: 1 POST queue
  • 8.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Asynchronous Calls: the “POST” queue 0. Contract execution transaction added to POST queue 1. Repeat until queue empty: ● Pop top call and execute 1 POST queue
  • 9.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Asynchronous Calls: the “POST” queue 0. Contract execution transaction added to POST queue 1. Repeat until queue empty: ● Pop top call and execute ● POST command adds a call to the queue 1 2 3 4 POST queue
  • 10.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Asynchronous Calls: the “POST” queue 0. Contract execution transaction added to POST queue 1. Repeat until queue empty: ● Pop top call and execute ● POST command adds a call to the queue 2. Process suicides 3. Refund gas POST queue
  • 11.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Asynchronous Calls: the “POST” queue Useful for “checkpointing” 0. Contract execution transaction added to POST queue 1. Repeat until queue empty: ● Pop top call and execute ● POST command adds a call to the queue 2. Process suicides 3. Refund gas POST queue
  • 12.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Ethereum coding recap: New contracts should be sent to address 0 “(Create Contract)” Your code is executed and the return value is used as the code for the new contract. When your “init” code is executed, it has access to the storage of the new contract.
  • 13.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Ethereum coding recap: EVM non-volatile code ROM storage RAM volatile args ROM memory RAM stack
  • 14.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Ethereum coding recap: { [[69]] (caller) (returnlll (when (= (caller) @@69) [[ (calldataload 0) ]] (calldataload 32) ) ) }
  • 15.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Ethereum coding recap: EVM non-volatile code ROM storage RAM volatile args ROM memory RAM stack [[<addr>]] @@<addr> [<addr>] @<addr> Calldataload <byte>
  • 16.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Ethereum coding recap: { [[69]] (caller) (returnlll (when (= (caller) @@69) (for {} (< @i (calldatasize)) [i](+ @i 64) [[ (calldataload @i) ]] (calldataload (+ @i 32)) ) ) ) }
  • 17.
    ETHEREUM: The DecentralizedCryptographic Platform for Crypto-law Ethereum coding recap: { ;; Give caller a whole bunch of cash. [[ (caller) ]]: 0x1000000000000000000000000 ;; Register with the NameReg contract. [0] "GavCoin" (call (- (gas) 100) 0x2d0aceee7e5ab874e22ccf8d1a649f59106d74e8 0 0 7 0 0) (returnlll { (when (!= (calldatasize) 64) (stop)) ; stop if there's ; not enough data passed. [fromBal] @@(caller) [toBal]: @@(calldataload 0) [value]: (calldataload 32) (when (< @fromBal @value) (stop)) ; stop if there's ; not enough for the transfer. [[ (caller) ]]: (- @fromBal @value) ; subtract amount ; from caller's account. [[ (calldataload 0) ]]: (+ @toBal @value) ; add amount on to recipient's account. }) }