BASICS
1
Getting Started
3
2
Translations
5
3
Contents
7
3.1
Introduction to Smart Contracts
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.2
Installing the Solidity Compiler
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.3
Solidity by Example
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.4
Layout of a Solidity Source File
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
3.5
Structure of a Contract
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
3.6
Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
3.7
Units and Globally Available Variables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
3.8
Expressions and Control Structures
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
3.9
Contracts
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
111
3.10
Inline Assembly
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
152
3.11
Cheatsheet
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
157
3.12
Language Grammar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
161
3.13
Using the Compiler
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
187
3.14
Analysing the Compiler Output
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
201
3.15
Solidity IR-based Codegen Changes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204
3.16
Layout of State Variables in Storage
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
209
3.17
Layout in Memory
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
216
3.18
Layout of Call Data
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
217
3.19
Cleaning Up Variables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
217
3.20
Source Mappings
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
218
3.21
The Optimizer
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
219
3.22
Contract Metadata
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
240
3.23
Contract ABI Specification
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
245
3.24
Security Considerations
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
260
3.25
List of Known Bugs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
267
3.26
Solidity v0.5.0 Breaking Changes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
287
3.27
Solidity v0.6.0 Breaking Changes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
295
3.28
Solidity v0.7.0 Breaking Changes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
298
3.29
Solidity v0.8.0 Breaking Changes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
300
3.30
NatSpec Format
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
303
3.31
SMTChecker and Formal Verification
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
307
3.32
Yul
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
325
3.33
Import Path Resolution
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
347
3.34
Style Guide
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
356
3.35
Common Patterns
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
378
i