Preface |
|
ix | |
|
Part I Intro to the Ethereum Blockchain |
|
|
|
|
3 | (20) |
|
|
4 | (1) |
|
The Character of a Blockchain |
|
|
5 | (9) |
|
|
5 | (1) |
|
|
6 | (3) |
|
|
9 | (2) |
|
|
11 | (2) |
|
|
13 | (1) |
|
|
14 | (8) |
|
|
14 | (3) |
|
|
17 | (1) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
19 | (2) |
|
|
21 | (1) |
|
|
22 | (1) |
|
2 Decentralized Applications |
|
|
23 | (8) |
|
|
23 | (3) |
|
|
23 | (2) |
|
Non-Fungible Token (ERC-721) |
|
|
25 | (1) |
|
|
26 | (2) |
|
|
28 | (1) |
|
Evaluating Blockchain for Your Application |
|
|
29 | (1) |
|
|
29 | (1) |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
30 | (1) |
|
|
31 | (18) |
|
|
31 | (2) |
|
|
32 | (1) |
|
|
33 | (9) |
|
|
42 | (2) |
|
Ubuntu Installation (Including Windows WSL Ubuntu) |
|
|
42 | (1) |
|
|
43 | (1) |
|
Installing the Truffle Suite |
|
|
44 | (2) |
|
|
44 | (1) |
|
|
45 | (1) |
|
|
46 | (3) |
|
Part II Developing Smart Contracts |
|
|
|
4 Our First Smart Contract |
|
|
49 | (22) |
|
|
49 | (1) |
|
|
50 | (4) |
|
|
54 | (2) |
|
Making Our Contract Dynamic |
|
|
56 | (6) |
|
Making the Greeter Ownable |
|
|
62 | (7) |
|
|
69 | (2) |
|
5 Deploying and Interacting with Contracts |
|
|
71 | (16) |
|
Contract Compilation and Deployment |
|
|
71 | (2) |
|
|
72 | (1) |
|
|
73 | (1) |
|
|
74 | (6) |
|
Deploying to Goerli with Parity |
|
|
80 | (4) |
|
Deploying to Rinkeby with Infura |
|
|
84 | (2) |
|
|
86 | (1) |
|
6 The Fundraiser Application |
|
|
87 | (48) |
|
|
87 | (4) |
|
|
91 | (2) |
|
|
93 | (11) |
|
Setting the Beneficiary and Custodian |
|
|
101 | (3) |
|
|
104 | (5) |
|
|
109 | (17) |
|
|
111 | (1) |
|
|
112 | (1) |
|
|
112 | (4) |
|
|
116 | (3) |
|
|
119 | (5) |
|
|
124 | (2) |
|
|
126 | (5) |
|
|
131 | (3) |
|
|
134 | (1) |
|
|
135 | (20) |
|
Migrating Our FundraiserFactory |
|
|
135 | (2) |
|
|
137 | (5) |
|
Viewing Available Fundraisers |
|
|
142 | (9) |
|
Testing Pagination When Empty |
|
|
142 | (2) |
|
|
144 | (3) |
|
|
147 | (4) |
|
|
151 | (1) |
|
|
152 | (3) |
|
Part III Interacting with Our Smart Contracts Through Web 3 |
|
|
|
|
155 | (8) |
|
The Frontend, Web3, and the Blockchain |
|
|
155 | (1) |
|
|
156 | (5) |
|
|
156 | (1) |
|
|
156 | (1) |
|
|
157 | (1) |
|
|
157 | (1) |
|
|
158 | (1) |
|
|
158 | (2) |
|
MetaMask for Web3 Injection |
|
|
160 | (1) |
|
Send (State Updates/Write) |
|
|
160 | (1) |
|
|
160 | (1) |
|
|
161 | (2) |
|
9 Connecting the UI to Our Contracts |
|
|
163 | (16) |
|
|
163 | (2) |
|
|
164 | (1) |
|
|
165 | (11) |
|
|
166 | (6) |
|
Importing our Greeter Contracts |
|
|
172 | (1) |
|
Adding Our Greeter Contract Functionality |
|
|
173 | (2) |
|
Setting Our Greeting Through React |
|
|
175 | (1) |
|
|
176 | (3) |
|
|
179 | (24) |
|
Starting with React Truffle Box |
|
|
179 | (10) |
|
|
182 | (3) |
|
|
185 | (4) |
|
|
189 | (12) |
|
Creating Our New Fundraiser Page View |
|
|
191 | (4) |
|
Displaying the Current Fundraisers List |
|
|
195 | (6) |
|
|
201 | (2) |
|
11 Finishing Our Fundraiser UI |
|
|
203 | (32) |
|
Adding Detailed Information About Each Fundraiser |
|
|
203 | (5) |
|
Implementing a Material UI Dialog |
|
|
205 | (3) |
|
Accepting a Donation with React |
|
|
208 | (6) |
|
|
212 | (2) |
|
Displaying the Current ETH Exchange Rate |
|
|
214 | (4) |
|
Generating a Donation Receipt for Our User |
|
|
218 | (6) |
|
Handling a Withdrawal from Our Contract |
|
|
224 | (7) |
|
Adding Edit Beneficiary to the Contract |
|
|
230 | (1) |
|
|
231 | (4) |
|
Part IV Securing Your Smart Contracts |
|
|
|
12 Smart Contract Security |
|
|
235 | (8) |
|
Why Do We Need to Worry About Security? |
|
|
235 | (1) |
|
Types of Smart Contract Vulnerabilities |
|
|
236 | (3) |
|
|
236 | (1) |
|
Transaction Ordering Dependence |
|
|
236 | (1) |
|
Integer Overflow and Underflow |
|
|
237 | (1) |
|
|
237 | (1) |
|
|
238 | (1) |
|
|
238 | (1) |
|
|
239 | (1) |
|
Preparing Your Contract for an External Audit |
|
|
239 | (1) |
|
|
240 | (1) |
|
|
240 | (1) |
|
|
240 | (1) |
|
|
240 | (1) |
|
Growing Your Auditing Skills |
|
|
241 | (1) |
|
|
241 | (2) |
Index |
|
243 | |