116
Ethereum EVM illustrated Takenobu T. Rev. 0.01.1 exploring some mental models and implementations

Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Ethereum EVM illustrated

Takenobu T.

Rev. 0.01.1

exploring some mental models and implementations

Page 2: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

NOTE

- Please refer to the official documents in detail.

- This information is current as of Mar, 2018.

- Still work in progress.

Page 3: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

1. Introduction

- Blockchain

- World state

- Account

- Transaction

- Message

- Decentralised database

- Atomicity and order

2. Virtual machine

- Ethereum virtual machine (EVM)

- Message call

- Exception

- Gas and fee

- Input and output

- Byte order

- Instruction set

- Miscellaneous

Appendix A : Implementation

- Source code in Geth

- EVM developer utility

- Solidity ABI

Appendix B : User interface

- Web3 API

- Geth, Mist, Solc, Remix, Truffle, ...

Appendix C :

- Markle tree and RLP

- Consensus

References

Contents

Page 4: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

1. Introduction

Page 5: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Blockchain

1. Introduction

Page 6: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.2, [E3]

A transaction-based state machine

Transaction

World state

Ethereum can be viewed as a transaction-based state machine.

s t+1

World state

s t

Page 7: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.2, [E3]

A transaction-based state machine

World state

Transaction

World state

A transaction represents a valid arc between two states.

s t s t+1

Page 8: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.2, Ch.4, [E2], [E3]

Block and transactions

World state World state

Transaction T1

Transaction T2

Transaction T3

Block

Transactions are collated into blocks.

A block is a package of data.

s t s t+1

Page 9: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.2, Ch.4, [E2], [E3]

Chain of states

Transaction T1

Transaction T2

Transaction T3

Block b

World state World state World state

Transaction T4

Transaction T5

Transaction T6

Block b+1

s t s t+1 s t+2

From the viewpoint of the states,

Ethereum can be seen as a state chain.

Page 10: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

World state World state World state

s t s t+1 s t+2

References : [E1] Ch.2, Ch.4, [E2], [E3], [W3]

Chain of blocks: Blockchain

Transaction T1

Transaction T2

Transaction T3

Block b

Transaction T4

Transaction T5

Transaction T6

Block b+1

From the viewpoint of the implementation,

Ethereum can also be seen as a chain of blocks, so it is `BLOCKCHAIN`.

Page 11: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Stack of transactions : Ledger

Genesis block

From the viewpoint of the ledger,

Ethereum can also be seen as a stack of transactions.

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Block 1

Block 2

Block 3

Block 4

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

Transaction

:

Block b

Block 5

Block 6

:

Transaction

Transaction

TransactionBlock b+1

References : [E1] Ch.2, Ch.4, [E2], [E3], [W3]

Page 12: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

World state

1. Introduction

Page 13: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4, [E2]

World state

Address 1 Account state 1

Address 2 Account state 2

World state

: :

Address 3 Account state 3

The world state is a mapping between address and account state.

s t

Page 14: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4

Several views of world state

Object view

Address 1 Account state 1

Address 2 Account state 2

: :

Address 3 Account state 3

Address 1 Account state 1

Address 2 Account state 2

: :

Address n Account state n

Account 1Account 2

Account n

:

Mapping view

Table view

World state

World state

World state

Page 15: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Account

1. Introduction

Page 16: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4, [E2]

Account

An account is an object in the world state.

World state

:

Account 1

Account 2

Account 3

Page 17: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4, [E2]

Account

An account is a mapping between address and account state.

Address 1 Account state 1

Address 2 Account state 2

World state

: :

Address 3 Account state 3

Account

Page 18: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Account

References : [E1] Ch.4

Account state

Address

code hash

World state

storage hash

balance

nonce

EVM code

Account storage

Account state

An account state could contain EVM code and storage.

Page 19: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4

Two practical types of account

World state

External actor

Externally owned account (EOA) Contract account

EVM code storage

EOA is controlled by a private key. Contract account contains EVM code.

Autonomous object

Page 20: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4

Two practical types of account

World state

External actor

Externally owned account (EOA) Contract account

Address

code

storagecode hash

storage hash

balance

nonce

Account state

Address

code hash

storage hash

balance

nonce

Account state

EOA is controlled by a private key.

EOA cannot contain EVM code.

Contract contains EVM code.

Contract is controlled by EVM code.

Page 21: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4, Ch.7, [E2]

Address of account

Private key

Public key

Address

Sender address Nonce

hash RLP, KEC, right 160 bits

160 bits 160 bits

A 160-bit code used for identifying accounts.

Externally owned account (EOA) Contract account

Address

Page 22: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Transaction

1. Introduction

Page 23: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.2, Ch.4, [E2]

A transaction

World state World state

Transaction

Transaction

Transaction

Block

A transaction is a single cryptographically-signed instruction.

s t s t+1

Page 24: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Appendix A

A transaction to world state

Ethereum world

A transaction is submitted by external actor.

World state

Transaction

External actor

(a person or other entity)

Page 25: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4

Two practical types of transaction

World state

EOA EOA or CAContract

account

World state

Message

Transaction

Contract creation

Transaction

Message call

Create

External actor External actor

There are two practical types of transaction, contract creation and message call.

Page 26: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.7

Contract creation

World state

Address 1 Account state 1

Address 2 Account state 2

: :

Address 1 Account state 1

Address 2 Account state 2

: :

Address N Account state N

code storage

s tWorld state s t+1

Transaction

init code

Page 27: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.7

Message call

World state

Address 1 Account state 1

Address 2 Account state 2

: :

Address 1 Account state 1

Address 2 Account state 2

: :

Address N Account state N

code storage

s tWorld state s t+1

Transaction

input data

Address N Account state N

code storage

Page 28: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.4

Field of a transaction

Transaction

nonce

gasPrice

gasLimit

to

value

v, r, s

init or data

transferred wei (ether)

160 bits address or 0 if contract creation

contract creation or message call

Page 29: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Message

1. Introduction

Page 30: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

World state

References : [E1] Ch.8, Appendix A

Message

Account A Account B

Message

Message is Data (as a set of bytes) and Value (specified as Ether) .

Message is passed between two Accounts.

Page 31: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.8

Message

EOA AccountMessage

Transaction

Contract

account

Triggered by transaction

Message

Account

EVM code

World state World state

Triggered by EVM code

EVM can also send a message.Transaction triggers an associated message.

Page 32: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.8

Four cases of message

EOAMessage

Transaction

CA

EOA EOAMessage

Transaction

CA

CA

To EOA

To CA

From EOA From CABy Transaction By EVM code

EOA

Message

MessageCA

code

code

Page 33: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Decentralised database

1. Introduction

Page 34: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E3], [E7] Ch.7

Globally shared, transactional database

A blockchain is a globally shared, transactional database.

World state

Page 35: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E3], [E7] Ch.7

Decentralised database

World state

World state

World state

World state

World state

World state

World state

World state

A blockchain is a globally shared, decentralised, transactional database.

P2P

network

Page 36: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E3],

P2P network inter nodes

World state

Ethereum

node

World state World state...

P2P

Ethereum

node

Ethereum

node

Decentralised nodes constitute Ethereum P2P network.

Page 37: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Appendix A, Ch.4, Ch.7, Ch.8

Interface to a node

Transaction

Interface (Web3 API)

Ethereum

world

External

actor

Transaction

Contract creation Message call Inspection

World state

Ethereum node (Geth, Parity, ...)

External actors access the Ethereum world through Ethereum nodes.

Page 38: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Atomicity and order

1. Introduction

Page 39: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Atomicity of transaction

Transaction

Transaction Transactionor

A transaction is an atomic operation. Can't divide or interrupt.

That is, All (complete done) or Nothing (zero effect).

Page 40: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Order of transactions

TransactionTransaction

Transaction

order (timing)

Transaction

Transactions cannot be overlapped.

Transactions must be executed sequentially.

Blockchain

Page 41: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Order of transactions

Transaction order is not guaranteed.

Transaction

order (timing)

Transaction

Blockchain

Transaction Transaction

1st submitted 2nd submitted

External actor B

Transaction

3rd submittedExternal actor A

Transaction

??? ???

Page 42: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Ordering inner block

determined

by miner

Transaction C

Transaction A

Transaction B

Block

Transaction A

Transaction BTransaction C

Transaction A

Transaction B

Transaction C

Transaction

pool

ordered

sendersender

sender

Miner can determine the order of transactions in a block.

Page 43: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.2, Ch.4

Ordering inter blocks

Transaction T1

Transaction T2

Transaction T3

Block b

Transaction T4

Transaction T5

Transaction T6

Block b+1

(Block b+2)

Transaction C

Transaction A

Transaction B

(Block b+2)

Transaction B

Transaction D

Transaction A

(Block b+2)

Transaction A

Transaction E

Transaction C

miner miner miner

selected by PoW

Winner

fast

The order between blocks is determined by a consensus algorithm such as PoW.

Page 44: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

2. Virtual machine

Page 45: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Ethereum virtual machine (EVM)

2. Virtual machine

Page 46: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H

Ethereum virtual machine

World state

Address N Account state N

code storage

s tWorld state s t+1

Transaction of message call

input data

Address N Account state N

code storage

EVM

(Ethereum Virtual Machine)

EVM code is executed on Ethereum Virtual Machine (EVM).

Page 47: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

EVM (Ethereum Virtual Machine)

References : [E1] Ch.9, Appendix H, [E4], [W1]

Ethereum virtual machine

The Ethereum Virtual Machine is the runtime environment for smart contracts in Ethreum.

Code

Virtual machine

EVM code

Page 48: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E4]

EVM architecture

The EVM is a simple stack-based architecture.

(Account) storageMemoryStack

PC

Program counter

Gas

Gas available

Virtual ROM

Machine state

(volatile)

World state

(persistent)

EVM code

(immutable)

Ethereum Virtual Machine (EVM)

sm

Page 49: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E3], [E7], [W2]

Machine space of EVM

-

Registers (Account) storageMemoryStack

stack memory

256 bits x 1024 elements

volatile memory

byte addressing

linear memory

persistent memory

256 bits to 256 bits

key-value store

There are several resources as space.

Page 50: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Stack

Stack

All operation are performed on the stack.

Access with many instructions such as PUSH/POP/COPY/SWAP, ...

: 1024 elements

256 bits

:

operation with 16 elements

in stack top

256-bit read/write

Page 51: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Memory

Memory

Memory is linear and can be addressed at byte level.

Access with MSTORE/MSTORE8/MLOAD instructions.

All locations in memory are well-defined initially as zero.

8 bits

256-bit load

256-bit store

or

8-bit store

:

Page 52: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Account storage

(Account) storage

Value 1

Value 2

:

Value n

Key 1

Key2

:

Key n

256 bits 256 bits

Storage is a key-value store that maps 256-bit words to 256-bit words.

Access with SSTORE/SLOAD instructions.

All locations in storage are well-defined initially as zero.

256-bit load/store

Page 53: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H

EVM code

EVM Code is the bytecode that the EVM can natively execute.

PUSH1 e0

PUSH1 02

EXP

PUSH1 00

CALLDATALOAD

:

Assembly view Bytecode view

0x60e060020a600035...

Page 54: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

EVM

References : [E1] Ch.9, Appendix H

Execution model

(Account) storage

MemoryStack

operations stack top

EVM code

instructions

ran

do

m

acce

ss

push/pop/...

ran

do

m

acce

ss

PC

Gas avail

Page 55: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Message call

2. Virtual machine

Page 56: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

World state

References : [E1] Ch.8, Appendix A

Message call

Contract account

EOA

Message

EVM code

Contract account

EVM code

Message

EVM can send a message to other account.

The depth of message call is limited to less than 1024 levels.

Page 57: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.8, Ch.9

Instructions for Message call

arguments

return value

Memory

EVM

Memory

input data

EVM

Stack Stack

CALL instruction

RETURN instruction

Message call is triggered by CALL instruction.

Arguments and return values are passed using memory.

Page 58: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Exception

2. Virtual machine

Page 59: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E9], [E1] Ch.9, Appendix H

Exception

World state

Address N Account state N

code storage

s tWorld state s t+1

Transaction

input data

Address N Account state N

code storage

EVM

If an exception occurs in the EVM, the state is not updated.

Exception

The behavior if an exception occurs is subtle. [E9]

ToDo: Refine this page

Page 60: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H

Exception

EVM

Storage

MemoryStack

operations

EVM code

PC

Gas avail

stack underflowout-of-gas

invalid

instruction

invalid

jump destination

Page 61: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Gas and fee

2. Virtual machine

Page 62: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

World state

References : [E1] Ch.5, Ch.9, Appendix G

Gas and fee

EOA

Contract account

EVM code

Message

Gas

Refund

Transaction

Message call

Gas supply

All programmable computation in Ethereum is subject to fees (denominated in gas).

Page 63: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.5, Ch.9, Appendix G

Gas

Storage

MemoryStack

operations

EVM code

PC

Gas avail

Message call

Gas

more

Gas

more

Gas

EVM

Page 64: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Input and output

2. Virtual machine

Page 65: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H

Input and Output of EVM

EVM

input data

Transaction

EVM

External

actor

Message call

return value

log

EVM can input external data from a message call.

EVM can output log. EVM can also return values to Caller EVM.

Page 66: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.7, Ch.9

Instructions for input data

Stack

input data

EVM

Memory

CALLDATALOAD CALLDATACOPY

Page 67: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Byte order

2. Virtual machine

Page 68: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Endian for Memory

Memory

EVM is big endian order (network byte order).

Stack

address (byte addressing) N N+1 N+31...

MSB LSB

256-bit load (MLOAD)

256-bit store (MSTORE)

...

Page 69: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Endian for Memory

Memory

EVM is big endian order (network byte order).

Stack

address (byte addressing) N

MSB LSB

8-bit store (MSTORE8)

Page 70: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Endian for input data

input data

EVM is big endian order (network byte order).

Stack

or

Memory

address (byte addressing) N N+1 N+31...

MSB LSB

CALLDATALOAD or CALLDATACOPY

...

Page 71: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Byte order of BYTE and SIGNEXTEND instruction

Stack

0 1 31...

MSB LSB

...

SIGNEXTEND instruction counts from LSB.

Nth byte

BYTE instruction counts from MSB.

Stack

0131 ...

MSB LSB

...

Nth byte

Page 72: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Byte order of PUSH instructions

PUSH1 0x01 right-aligned, big endian

PUSH4 0x01020304right-aligned, big endian

PUSH32 0x0102...1f20right-aligned, big endian

Stack

0131 ...

MSB LSB

...

Nth byte

01

Stack

0131 ...

MSB LSB

...

Nth byte

04030201

Stack

0131 ...

MSB LSB

...

Nth byte

201f1e1d0201 1c1b

Page 73: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Instruction set

2. Virtual machine

Page 74: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H

Instruction set

* Basically, 256-bit operation.

* Contract creation and destruct

* CREATE, DELEGATECALL

* Hash

* SHA3

* Shift operation

* using MUL or DIV, SDIV

* Div operation

* without zero divisional exception

* ...

Page 75: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.8, Ch.9

Copy of code and input data

input data

EVM

EVM code

MemoryStack

EVM code

CALLDATALOAD CALLDATACOPY

CODECOPY

EXTCODECOPY

EVM

There are several copy instructions for inter spaces.

Page 76: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E1] Ch.9, Appendix H, [E7], [W2]

Shift by MUL, DIV and SDIV

StackMSB LSB

Left shift

Left shift is represented by MUL instruction.

StackMSB LSB

Right shift

Right shift is represented by DIV and SDIV instruction.

DIV for logical right shift

SDIV for arithmetic right shift

MUL m (2^n) == m << n

DIV m (2^n) == m >> n

Page 77: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Miscellaneous

2. Virtual machine

Page 78: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

LLL source Viper source Solidity source

EVM code

References : [E7]

EVM code generation

Solidity compiler Viper compiler LLL compiler

Ethereum virtual machine code

Page 79: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

EVM

Ethereum Virtual Machine

References : [E1] Ch.9

Ethereum virtual machine layer

Physical Processor(x86, ARM, ...)

Ethereum node(Geth, Parity, ...)

runtime system

(process)

virtual machine

code

hardware

software

EVM code

Page 80: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

eWASM

The eWASM is next generation VM.

Page 81: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Appendix A

Page 82: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Source code in Geth

Appendix A

Page 83: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Block header

type Header struct {

ParentHash common.Hash `json:"parentHash" gencodec:"required"`

UncleHash common.Hash `json:"sha3Uncles" gencodec:"required"`

Coinbase common.Address `json:"miner" gencodec:"required"`

Root common.Hash `json:"stateRoot" gencodec:"required"`

TxHash common.Hash `json:"transactionsRoot" gencodec:"required"`

ReceiptHash common.Hash `json:"receiptsRoot" gencodec:"required"`

Bloom Bloom `json:"logsBloom" gencodec:"required"`

Difficulty *big.Int `json:"difficulty" gencodec:"required"`

Number *big.Int `json:"number" gencodec:"required"`

GasLimit uint64 `json:"gasLimit" gencodec:"required"`

GasUsed uint64 `json:"gasUsed" gencodec:"required"`

Time *big.Int `json:"timestamp" gencodec:"required"`

Extra []byte `json:"extraData" gencodec:"required"`

MixDigest common.Hash `json:"mixHash" gencodec:"required"`

Nonce BlockNonce `json:"nonce" gencodec:"required"`

}

[core/types/block.go]

Block header

Root of State

Root of Transaction

(go-ethereum version 1.8)

Page 84: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Transaction

type txdata struct {

AccountNonce uint64 `json:"nonce" gencodec:"required"`

Price *big.Int `json:"gasPrice" gencodec:"required"`

GasLimit uint64 `json:"gas" gencodec:"required"`

Recipient *common.Address `json:"to" rlp:"nil"`

// nil means contract creation

Amount *big.Int `json:"value" gencodec:"required"`

Payload []byte `json:"input" gencodec:"required"`

// Signature values

V *big.Int `json:"v" gencodec:"required"`

R *big.Int `json:"r" gencodec:"required"`

S *big.Int `json:"s" gencodec:"required"`

// This is only used when marshaling to JSON.

Hash *common.Hash `json:"hash" rlp:"-"`

}

[core/types/transaction.go]

Transaction

to address

value (Wei)

input data

(go-ethereum version 1.8)

Page 85: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

World state

type StateDB struct {

db Database

trie Trie

stateObjects map[common.Address]*stateObject

stateObjectsDirty map[common.Address]struct{}

dbErr error

refund uint64

thash, bhash common.Hash

txIndex int

logs map[common.Hash][]*types.Log

logSize uint

preimages map[common.Hash][]byte

:

[core/state/statedb.go]

Mapping for

Address to Account state

World state

(go-ethereum version 1.8)

Page 86: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Account object (state object)

type stateObject struct {

address common.Address

addrHash common.Hash

data Account

db *StateDB

dbErr error

trie Trie // storage trie, which becomes non-nil on first access

code Code // contract bytecode, which gets set when code is loaded

cachedStorage Storage // Storage entry cache to avoid duplicate reads

dirtyStorage Storage // Storage entries that need to be flushed to disk

dirtyCode bool // true if the code was updated

suicided bool

touched bool

deleted bool

onDirty func(addr common.Address)

}

[core/state/state_object.go]

Account state

Address

(go-ethereum version 1.8)

Page 87: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Account state, Code and Storage

type Account struct {

Nonce uint64

Balance *big.Int

Root common.Hash // merkle root of the storage trie

CodeHash []byte

}

type Code []byte

type Storage map[common.Hash]common.Hash

[core/state/state_object.go]

EVM code

Account state

Account storage

(go-ethereum version 1.8)

Page 88: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Stack and Memory

type Stack struct {

data []*big.Int

}

func newstack() *Stack {

return &Stack{data: make([]*big.Int, 0, 1024)}

}

[core/vm/stack.go]

type Memory struct {

store []byte

lastGasCost uint64

}

func NewMemory() *Memory {

return &Memory{}

}

[core/vm/memory.go]

Memory

Stack

(go-ethereum version 1.8)

Page 89: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Instruction operation (arithmetic and stack)

func opAdd(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack)

([]byte, error) {

x, y := stack.pop(), stack.pop()

stack.push(math.U256(x.Add(x, y)))

evm.interpreter.intPool.put(y)

return nil, nil

}

func opPop(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack)

([]byte, error) {

evm.interpreter.intPool.put(stack.pop())

return nil, nil

}

[core/vm/instruction.go]

Arithmetic operation

Stack operation

(go-ethereum version 1.8)

Page 90: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Instruction operation (memory and storage)

func opMload(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack

*Stack) ([]byte, error) {

offset := stack.pop()

val := new(big.Int).SetBytes(memory.Get(offset.Int64(), 32))

stack.push(val)

evm.interpreter.intPool.put(offset)

return nil, nil

}

func opSload(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack

*Stack) ([]byte, error) {

loc := common.BigToHash(stack.pop())

val := evm.StateDB.GetState(contract.Address(), loc).Big()

stack.push(val)

return nil, nil

}

[core/vm/instruction.go]

Memory operation

Storage operation

(go-ethereum version 1.8)

Page 91: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Instruction operation (call)

func opCall(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack)

([]byte, error) {

// Pop gas. The actual gas in in evm.callGasTemp.

evm.interpreter.intPool.put(stack.pop())

gas := evm.callGasTemp

// Pop other call parameters.

addr, value, inOffset, inSize, retOffset, retSize := stack.pop(),

stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop()

toAddr := common.BigToAddress(addr)

value = math.U256(value)

// Get the arguments from the memory.

args := memory.Get(inOffset.Int64(), inSize.Int64())

if value.Sign() != 0 {

gas += params.CallStipend

}

ret, returnGas, err := evm.Call(contract, toAddr, args, gas, value)

if err != nil {

:

[core/vm/instruction.go]

Flow operation

(go-ethereum version 1.8)

Page 92: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Gas

const (

GasQuickStep uint64 = 2

GasFastestStep uint64 = 3

GasFastStep uint64 = 5

GasMidStep uint64 = 8

GasSlowStep uint64 = 10

GasExtStep uint64 = 20

GasReturn uint64 = 0

GasStop uint64 = 0

GasContractByte uint64 = 200

)

[core/vm/gas.go]

func gasSStore(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem

*Memory, memorySize uint64) (uint64, error) {

var (

y, x = stack.Back(1), stack.Back(0)

val = evm.StateDB.GetState(contract.Address(),

:

[core/vm/gas_table.go]

Gbase

Gverylow

(go-ethereum version 1.8)

Page 93: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Interpreter

func (in *Interpreter) Run(contract *Contract, input []byte) (ret []byte, err

error) {

// Increment the call depth which is restricted to 1024

in.evm.depth++

defer func() { in.evm.depth-- }()

in.returnData = nil

if len(contract.Code) == 0 {

return nil, nil

}

codehash := contract.CodeHash // codehash is used when doing jump dest caching

if codehash == (common.Hash{}) {

codehash = crypto.Keccak256Hash(contract.Code)

}

var (

op OpCode // current opcode

mem = NewMemory() // bound memory

stack = newstack() // local stack

:

[core/vm/interpreter.go]

increment call depth

create Memory

create Stack

(go-ethereum version 1.8)

Page 94: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

ApplyTransaction

func ApplyTransaction(config *params.ChainConfig, bc *BlockChain, author

*common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx

*types.Transaction, usedGas *uint64, cfg vm.Config) (*types.Receipt, uint64, error)

{

msg, err := tx.AsMessage(types.MakeSigner(config, header.Number))

if err != nil {

return nil, 0, err

}

// Create a new context to be used in the EVM environment

context := NewEVMContext(msg, header, bc, author)

// Create a new environment which holds all relevant information

// about the transaction and calling mechanisms.

vmenv := vm.NewEVM(context, statedb, config, cfg)

// Apply the transaction to the current state (included in the env)

_, gas, failed, err := ApplyMessage(vmenv, msg, gp)

if err != nil {

return nil, 0, err

}

// Update the state with pending changes

var root []byte

if config.IsByzantium(header.Number) {

:

[core/state_processor.go]

(go-ethereum version 1.8)

create EVM

Page 95: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Version of EVM instruction set

[core/vm/interpreter.go]

[core/config.go]

(go-ethereum version 1.8)

func NewInterpreter(evm *EVM, cfg Config) *Interpreter {

if !cfg.JumpTable[STOP].valid {

switch {

case evm.ChainConfig().IsByzantium(evm.BlockNumber):

cfg.JumpTable = byzantiumInstructionSet

case evm.ChainConfig().IsHomestead(evm.BlockNumber):

cfg.JumpTable = homesteadInstructionSet

default:

cfg.JumpTable = frontierInstructionSet

:

var (

MainnetChainConfig = &ChainConfig{

ChainId: big.NewInt(1),

HomesteadBlock: big.NewInt(1150000),

DAOForkBlock: big.NewInt(1920000),

DAOForkSupport: true,

EIP150Block: big.NewInt(2463000),

EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993a

EIP155Block: big.NewInt(2675000),

EIP158Block: big.NewInt(2675000),

ByzantiumBlock: big.NewInt(4370000),

:

added instructions:

STATICCALL, RETURNDATASIZE,

RETURNDATACOPY and REVERT

added instruction:

DELEGATECALL

Page 96: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Bootstrap of EVM in Geth

ApplyTransaction [core/state_processor.go]

ApplyMessage [core/state_transaction.go]

TransactionDb [core/state_transaction.go]

Call [core/vm/evm.go]

run [core/vm/evm.go]

Run [core/vm/interpreter.go]

create EVM

create Memory

create Stack

:

(go-ethereum version 1.8)

Page 97: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

EVM developer utility

Appendix A

Page 98: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Example of evm command

The go-ethereum project provides evm utility command.

(go-ethereum version 1.8)

$ cat sample.asm

push 0x1

push 0x2

add

$ evm compile sample.asm

6001600201

$ cat sample.bin

6001600201

$ evm disasm sample.bin

000000: PUSH1 0x01

000002: PUSH1 0x02

000004: ADD

Compile EVM assembly code

Disassemble EVM bytecode

Page 99: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [C1]

Example of evm command(go-ethereum version 1.8)

$ evm --debug run sample.asm

#### TRACE ####

PUSH1 pc=00000000 gas=10000000000 cost=3

PUSH1 pc=00000002 gas=9999999997 cost=3

Stack:

00000000 0000000000000000000000000000000000000000000000000000000000000001

ADD pc=00000004 gas=9999999994 cost=3

Stack:

00000000 0000000000000000000000000000000000000000000000000000000000000002

00000001 0000000000000000000000000000000000000000000000000000000000000001

STOP pc=00000005 gas=9999999991 cost=0

Stack:

00000000 0000000000000000000000000000000000000000000000000000000000000003

#### LOGS ####

Run EVM assembly code

Page 100: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Solidity ABI

Appendix A

Page 101: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E7]. Ch.7, [E1] Ch.9, Appendix H, [W4], [W2]

Solidity Application Binary Interface

4byte

Function selector

(SHA-3 hash)

CALLDATALOAD

function

dispatching

function A

function B

input data

EVM code Stack or Memory

Arguments, ...

CALLDATALOAD

CALLDATACOPY

JUMPI

EVM

Page 102: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Appendix B

Page 103: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Web3 API

Appendix B

Page 104: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E8], [C1], [C3], [C4], [C5], [C6]

Web3 API and client

Geth

console

World stateEthereum

network

Mist MetaMask Remix Truffle ...

Web3 API

Ethereum clients access to Ethereum network via Web3 API.

Ethereum

client

CLI Wallet Wallet IDE IDE / CI

Page 105: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References : [E8], [C1], [C3], [C4], [C5], [C6]

Web3 API and client

Ethereum

client

Ethereum

network

Ethereum clients access to Ethereum network via Web3 API.

Ethereum

node(Geth, Parity, ...)

Ethereum

node(Geth, Parity, ...)

Ethereum

node(Geth, Parity, ...)

...

Geth console,

Mist, MetaMask,

Remix, Truffle, ...

P2P

Web3 API

Page 106: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Geth, Mist, Solc, Remix, Truffle, ...

Appendix B

Page 107: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Geth

Ethereum

client

Ethereum

network

console

node

P2P

Web3 I/F

EVM

Web3 API

P2P

...

Geth

Ethereum

node(Geth, Parity, ...)

References : [C1]

Page 108: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Mist

Ethereum

client

Ethereum

network

Ethereum

node(Geth, Parity, ...)

Mist

private key

Web3 API

References : [C3]

Page 109: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Solc

Ethereum

network

Ethereum

node(Geth, Parity, ...)

Web3 API

References : [C2]

Solidity source

EVM code

Solc

(Solidity compiler)

(Geth, Mist, Truffle, ...)

Page 110: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Remix

Ethereum

client

Ethereum

network

Remix

MetaMask

EVM

JavaScript

VM

Injected

Web3

Web3

provider

Web3 API

References : [C5]

Page 111: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

Truffle

Ethereum

client

Ethereum

network

console

Truffle

Private chain

Ethereum

node(Geth, Parity, ...)

Web3 API

P2P

References : [C6]

Page 112: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References

Page 113: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References

[E1] Ethereum Yellow Paper

ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER

https://ethereum.github.io/yellowpaper/paper.pdf

[E2] Glossary

https://github.com/ethereum/wiki/wiki/Glossary

[E3] White Paper

A Next-Generation Smart Contract and Decentralized Application Platform

https://github.com/ethereum/wiki/wiki/White-Paper

[E4] Design Rationale

https://github.com/ethereum/wiki/wiki/Design-Rationale

[E5] Ethereum Development Tutorial

https://github.com/ethereum/wiki/wiki/Ethereum-Development-Tutorial

[E6] Ethereum Introduction

https://github.com/ethereum/wiki/wiki/Ethereum-introduction

[E7] Solidity Documentation

https://media.readthedocs.org/pdf/solidity/develop/solidity.pdf

https://solidity.readthedocs.io/en/develop/

[E8] Web3 JavaScript app API for 0.2x.x

https://github.com/ethereum/wiki/wiki/JavaScript-API

[E9] ethereum/wiki Subtleties

https://github.com/ethereum/wiki/wiki/Subtleties#exceptional-conditions

Page 114: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References

[W1] Awesome Ethereum Virtual Machine

https://github.com/pirapira/awesome-ethereum-virtual-machine

[W2] Diving Into The Ethereum VM

https://blog.qtum.org/diving-into-the-ethereum-vm-6e8d5d2f3c30

[W3] Stack Exchange: Ethereum block architecture

https://ethereum.stackexchange.com/questions/268/ethereum-block-architecture/6413

[W4] Porosity

https://www.comae.io/reports/dc25-msuiche-Porosity-Decompiling-Ethereum-Smart-Contracts.pdf

Page 115: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine

References

[C1] Go Ethereum

https://github.com/ethereum/go-ethereum

[C2] Solc (Solidity compiler)

https://github.com/ethereum/solidity

[C3] Mist (Ethereum Wallet)

https://github.com/ethereum/mist

[C4] MetaMask

https://github.com/MetaMask/metamask-extension

[C5] Remix

https://github.com/ethereum/browser-solidity

[C6] Truffle

https://github.com/trufflesuite/truffle

Page 116: Ethereum EVM illustrated - GitHub Pages · 1. Introduction - Blockchain - World state - Account - Transaction - Message - Decentralised database - Atomicity and order 2. Virtual machine