-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathEthereum_1x_Definition_part_2.html
406 lines (386 loc) · 62 KB
/
Ethereum_1x_Definition_part_2.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="mobile-web-app-capable" content="yes">
<title>
Ethereum 1x Definition (part 2) - HackMD
</title>
<link rel="icon" type="image/png" href="https://hackmd.io/favicon.png">
<link rel="apple-touch-icon" href="https://hackmd.io/apple-touch-icon.png">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css" integrity="sha256-3iu9jgsy9TpTwXKb7bNQzqWekRX7pPK+2OLj3R922fo=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/3.5.0/octicons.min.css" integrity="sha256-QiWfLIsCT02Sdwkogf6YMiQlj4NE84MKkzEMkZnMGdg=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.5.1/themes/prism.min.css" integrity="sha256-vtR0hSWRc3Tb26iuN2oZHt3KRUomwTufNIf5/4oeCyg=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/emojify.js/1.1.0/css/basic/emojify.min.css" integrity="sha256-UOrvMOsSDSrW6szVLe8ZDZezBxh5IoIfgTwdNDgTjiU=" crossorigin="anonymous" />
<style>
@charset "UTF-8";@import url(https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,500,500i|Source+Code+Pro:300,400,500|Source+Sans+Pro:300,300i,400,400i,600,600i|Source+Serif+Pro&subset=latin-ext);.hljs{display:block;background:#fff;padding:.5em;color:#333;overflow-x:auto}.hljs-comment,.hljs-meta{color:#969896}.hljs-emphasis,.hljs-quote,.hljs-string,.hljs-strong,.hljs-template-variable,.hljs-variable{color:#df5000}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#a71d5d}.hljs-attribute,.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#0086b3}.hljs-built_in,.hljs-builtin-name{color:#005cc5}.hljs-name,.hljs-section{color:#63a35c}.hljs-tag{color:#333}.hljs-attr,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-title{color:#795da3}.hljs-addition{color:#55a532;background-color:#eaffea}.hljs-deletion{color:#bd2c00;background-color:#ffecec}.hljs-link{text-decoration:underline}.markdown-body{font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{font-size:16px;padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd,.popover kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-line-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:700;background:#f8f8f8;border-top:0}.news .alert .markdown-body blockquote{padding:0 0 0 40px;border:0 none}.activity-tab .news .alert .commits,.activity-tab .news .markdown-body blockquote{padding-left:0}.task-list-item{list-style-type:none}.task-list-item label{font-weight:400}.task-list-item.enabled label{cursor:pointer}.task-list-item+.task-list-item{margin-top:3px}.task-list-item-checkbox{float:left;margin:.31em 0 .2em -1.3em!important;vertical-align:middle;cursor:default!important}.markdown-body{padding-top:40px;padding-bottom:40px;max-width:758px;overflow:visible!important}.markdown-body .emoji{vertical-align:top}.markdown-body pre{border:inherit!important}.markdown-body code{color:inherit!important}.markdown-body pre code .wrapper{display:-moz-inline-flex;display:-ms-inline-flex;display:-o-inline-flex;display:inline-flex}.markdown-body pre code .gutter{float:left;overflow:hidden;-webkit-user-select:none;user-select:none}.markdown-body pre code .gutter.linenumber{text-align:right;position:relative;display:inline-block;cursor:default;z-index:4;padding:0 8px 0 0;min-width:20px;box-sizing:content-box;color:#afafaf!important;border-right:3px solid #6ce26c!important}.markdown-body pre code .gutter.linenumber>span:before{content:attr(data-linenumber)}.markdown-body pre code .code{float:left;margin:0 0 0 16px}.markdown-body .gist .line-numbers{border-left:none;border-top:none;border-bottom:none}.markdown-body .gist .line-data{border:none}.markdown-body .gist table{border-spacing:0;border-collapse:inherit!important}.markdown-body code[data-gist-id]{background:none;padding:0}.markdown-body code[data-gist-id]:after,.markdown-body code[data-gist-id]:before{content:""}.markdown-body code[data-gist-id] .blob-num{border:unset}.markdown-body code[data-gist-id] table{overflow:unset;margin-bottom:unset}.markdown-body code[data-gist-id] table tr{background:unset}.markdown-body[dir=rtl] pre{direction:ltr}.markdown-body[dir=rtl] code{direction:ltr;unicode-bidi:embed}.markdown-body .alert>p{margin-bottom:0}.markdown-body pre.abc,.markdown-body pre.flow-chart,.markdown-body pre.graphviz,.markdown-body pre.mermaid,.markdown-body pre.sequence-diagram{text-align:center;background-color:inherit;border-radius:0;white-space:inherit}.markdown-body pre.abc>code,.markdown-body pre.flow-chart>code,.markdown-body pre.graphviz>code,.markdown-body pre.mermaid>code,.markdown-body pre.sequence-diagram>code{text-align:left}.markdown-body pre.abc>svg,.markdown-body pre.flow-chart>svg,.markdown-body pre.graphviz>svg,.markdown-body pre.mermaid>svg,.markdown-body pre.sequence-diagram>svg{max-width:100%;height:100%}.markdown-body pre>code.wrap{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.markdown-body .alert>p,.markdown-body .alert>ul{margin-bottom:0}.markdown-body summary{display:list-item}.markdown-body summary:focus{outline:none}.markdown-body details summary{cursor:pointer}.markdown-body details:not([open])>:not(summary){display:none}.markdown-body figure{margin:1em 40px}.markdown-body .mark,.markdown-body mark{background-color:#fff1a7}.vimeo,.youtube{cursor:pointer;display:table;text-align:center;background-position:50%;background-repeat:no-repeat;background-size:contain;background-color:#000;overflow:hidden}.vimeo,.youtube{position:relative;width:100%}.youtube{padding-bottom:56.25%}.vimeo img{width:100%;object-fit:contain;z-index:0}.youtube img{object-fit:cover;z-index:0}.vimeo iframe,.youtube iframe,.youtube img{width:100%;height:100%;position:absolute;top:0;left:0}.vimeo iframe,.youtube iframe{vertical-align:middle;z-index:1}.vimeo .icon,.youtube .icon{position:absolute;height:auto;width:auto;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;opacity:.3;transition:opacity .2s;z-index:0}.vimeo:hover .icon,.youtube:hover .icon{opacity:.6;transition:opacity .2s}.slideshare .inner,.speakerdeck .inner{position:relative;width:100%}.slideshare .inner iframe,.speakerdeck .inner iframe{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%}.MJX_Assistive_MathML{display:none}.ui-infobar{position:relative;z-index:2;max-width:760px;margin:25px auto -25px;padding:0 15px;color:#777}.toc .invisable-node{list-style-type:none}.ui-toc{position:fixed;bottom:20px;z-index:998}.ui-toc-label{opacity:.3;background-color:#ccc;border:none;transition:opacity .2s}.ui-toc .open .ui-toc-label{opacity:1;color:#fff;transition:opacity .2s}.ui-toc-label:focus{opacity:.3;background-color:#ccc;color:#000}.ui-toc-label:hover{opacity:1;background-color:#ccc;transition:opacity .2s}.ui-toc-dropdown{margin-top:23px;margin-bottom:20px;padding-left:10px;padding-right:10px;max-width:45vw;width:25vw;max-height:70vh;overflow:auto;text-align:inherit}.ui-toc-dropdown>.toc{max-height:calc(70vh - 100px);overflow:auto}.ui-toc-dropdown[dir=rtl] .nav{padding-right:0;letter-spacing:.0029em}.ui-toc-dropdown a{overflow:hidden;text-overflow:ellipsis;white-space:pre}.ui-toc-dropdown .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}.ui-toc-dropdown .nav>li:first-child:last-child > ul,.ui-toc-dropdown .toc.expand ul{display:block}.ui-toc-dropdown .nav>li>a:focus,.ui-toc-dropdown .nav>li>a:hover{padding-left:19px;color:#000;text-decoration:none;background-color:transparent;border-left:1px solid #000}.ui-toc-dropdown[dir=rtl] .nav>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav>li>a:hover{padding-right:19px;border-left:none;border-right:1px solid #000}.ui-toc-dropdown .nav>.active:focus>a,.ui-toc-dropdown .nav>.active:hover>a,.ui-toc-dropdown .nav>.active>a{padding-left:18px;font-weight:700;color:#000;background-color:transparent;border-left:2px solid #000}.ui-toc-dropdown[dir=rtl] .nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav>.active>a{padding-right:18px;border-left:none;border-right:2px solid #000}.ui-toc-dropdown .nav .nav{display:none;padding-bottom:10px}.ui-toc-dropdown .nav>.active>ul{display:block}.ui-toc-dropdown .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}.ui-toc-dropdown[dir=rtl] .nav .nav>li>a{padding-right:30px}.ui-toc-dropdown .nav .nav>li>ul>li>a{padding-top:1px;padding-bottom:1px;padding-left:40px;font-size:12px;font-weight:400}.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a{padding-right:40px}.ui-toc-dropdown .nav .nav>li>a:focus,.ui-toc-dropdown .nav .nav>li>a:hover{padding-left:29px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav .nav>li>a:hover{padding-right:29px}.ui-toc-dropdown .nav .nav>li>ul>li>a:focus,.ui-toc-dropdown .nav .nav>li>ul>li>a:hover{padding-left:39px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a:hover{padding-right:39px}.ui-toc-dropdown .nav .nav>.active:focus>a,.ui-toc-dropdown .nav .nav>.active:hover>a,.ui-toc-dropdown .nav .nav>.active>a{padding-left:28px;font-weight:500}.ui-toc-dropdown[dir=rtl] .nav .nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>a{padding-right:28px}.ui-toc-dropdown .nav .nav>.active>.nav>.active:focus>a,.ui-toc-dropdown .nav .nav>.active>.nav>.active:hover>a,.ui-toc-dropdown .nav .nav>.active>.nav>.active>a{padding-left:38px;font-weight:500}.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active>a{padding-right:38px}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}html[lang^=ja] .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS\ ゴシック,sans-serif}html[lang=zh-tw] .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif}html[lang=zh-cn] .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}html .markdown-body[lang^=ja]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS\ ゴシック,sans-serif}html .markdown-body[lang=zh-tw]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif}html .markdown-body[lang=zh-cn]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}html[lang^=ja] .ui-toc-dropdown{font-family:Source Sans Pro,Helvetica,Arial,Meiryo UI,MS PGothic,MS\ Pゴシック,sans-serif}html[lang=zh-tw] .ui-toc-dropdown{font-family:Source Sans Pro,Helvetica,Arial,Microsoft JhengHei UI,微軟正黑UI,sans-serif}html[lang=zh-cn] .ui-toc-dropdown{font-family:Source Sans Pro,Helvetica,Arial,Microsoft YaHei UI,微软雅黑UI,sans-serif}html .ui-toc-dropdown[lang^=ja]{font-family:Source Sans Pro,Helvetica,Arial,Meiryo UI,MS PGothic,MS\ Pゴシック,sans-serif}html .ui-toc-dropdown[lang=zh-tw]{font-family:Source Sans Pro,Helvetica,Arial,Microsoft JhengHei UI,微軟正黑UI,sans-serif}html .ui-toc-dropdown[lang=zh-cn]{font-family:Source Sans Pro,Helvetica,Arial,Microsoft YaHei UI,微软雅黑UI,sans-serif}.ui-affix-toc{position:fixed;top:0;max-width:15vw;max-height:70vh;overflow:auto}.back-to-top,.expand-toggle,.go-to-bottom{display:block;padding:4px 10px;margin-top:10px;margin-left:10px;font-size:12px;font-weight:500;color:#999}.back-to-top:focus,.back-to-top:hover,.expand-toggle:focus,.expand-toggle:hover,.go-to-bottom:focus,.go-to-bottom:hover{color:#563d7c;text-decoration:none}.back-to-top,.go-to-bottom{margin-top:0}.ui-user-icon{width:20px;height:20px;display:block;border-radius:3px;margin-top:2px;margin-bottom:2px;margin-right:5px;background-position:50%;background-repeat:no-repeat;background-size:cover}.ui-user-icon.small{width:18px;height:18px;display:inline-block;vertical-align:middle;margin:0 0 .2em}.ui-infobar>small>span{line-height:22px}.ui-infobar>small .dropdown{display:inline-block}.ui-infobar>small .dropdown a:focus,.ui-infobar>small .dropdown a:hover{text-decoration:none}.ui-published-note{color:#337ab7}.ui-published-note .fa{font-size:20px;vertical-align:top}.unselectable{-webkit-user-select:none;-o-user-select:none;user-select:none}@media print{blockquote,div,img,pre,table{page-break-inside:avoid!important}a[href]:after{font-size:12px!important}}.markdown-body.slides{position:relative;z-index:1;color:#222}.markdown-body.slides:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;background-color:currentColor;box-shadow:0 0 0 50vw}.markdown-body.slides section[data-markdown]{position:relative;margin-bottom:1.5em;background-color:#fff;text-align:center}.markdown-body.slides section[data-markdown] code{text-align:left}.markdown-body.slides section[data-markdown]:before{content:"";display:block;padding-bottom:56.23%}.markdown-body.slides section[data-markdown]>div:first-child{position:absolute;top:50%;left:1em;right:1em;transform:translateY(-50%);max-height:100%;overflow:hidden}.markdown-body.slides section[data-markdown]>ul{display:inline-block}.markdown-body.slides>section>section+section:after{content:"";position:absolute;top:-1.5em;right:1em;height:1.5em;border:3px solid #777}body{font-smoothing:subpixel-antialiased!important;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;text-shadow:0 0 1em transparent,1px 1px 1.2px rgba(0,0,0,.004);-webkit-overflow-scrolling:touch;letter-spacing:.025em}.focus,:focus{outline:none!important}::-moz-focus-inner{border:0!important}body{font-family:Source Sans Pro,Helvetica,Arial,sans-serif}html[lang^=ja] body{font-family:Source Sans Pro,Helvetica,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS\ ゴシック,sans-serif}html[lang=zh-tw] body{font-family:Source Sans Pro,Helvetica,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif}html[lang=zh-cn] body{font-family:Source Sans Pro,Helvetica,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}abbr[data-original-title],abbr[title]{cursor:help}body.modal-open{overflow-y:auto;padding-right:0!important}
</style>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js" integrity="sha256-3Jy/GbSLrg0o9y5Z5n1uw0qxZECH7C6OQpVBgNFYa0g=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js" integrity="sha256-g6iAfvZp+nDQ2TdTR/VVKJf3bGro4ub5fvWSWVRi2NE=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.9/es5-shim.min.js" integrity="sha256-8E4Is26QH0bD52WoQpcB+R/tcWQtpzlCojrybUd7Mxo=" crossorigin="anonymous"></script>
<![endif]-->
</head>
<body>
<div id="doc" class="markdown-body container-fluid comment-enabled" data-hard-breaks="true" style="position: relative;"><h1 id="Ethereum-1x-Definition-part-2"><a class="anchor hidden-xs" href="#Ethereum-1x-Definition-part-2" title="Ethereum-1x-Definition-part-2"><span class="octicon octicon-link"></span></a>Ethereum 1x Definition (part 2)</h1><h2 id="Methodology-continuation-from-part-1"><a class="anchor hidden-xs" href="#Methodology-continuation-from-part-1" title="Methodology-continuation-from-part-1"><span class="octicon octicon-link"></span></a>Methodology (continuation from part 1)</h2><p>In part 1, we define agents, their contributions to the Ethereum system, and their challenges. This part deals with causes for these challenges, and the solution that have been proposed for these causes.</p><h3 id="Causes"><a class="anchor hidden-xs" href="#Causes" title="Causes"><span class="octicon octicon-link"></span></a>Causes</h3><p>We try to understand the main causes of each challenge. Where it adds to understanding, we talk about sub-causes</p><pre class="graphviz"><!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: causes Pages: 1 -->
<svg width="372pt" height="44pt" viewBox="0.00 0.00 372.41 44.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 40)">
<title>causes</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-40 368.409,-40 368.409,4 -4,4"></polygon>
<!-- cause -->
<g id="node1" class="node">
<title>cause</title>
<polygon fill="#fa8072" stroke="#000000" points="215.0044,-18 196.2489,-36 158.7379,-36 139.9824,-18 158.7379,0 196.2489,0 215.0044,-18"></polygon>
<text text-anchor="middle" x="177.4934" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">cause</text>
</g>
<!-- sub_cause -->
<g id="node2" class="node">
<title>sub_cause</title>
<polygon fill="#fa8072" stroke="#000000" points="364.6149,-18 336.1594,-36 279.2485,-36 250.793,-18 279.2485,0 336.1594,0 364.6149,-18"></polygon>
<text text-anchor="middle" x="307.704" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">sub-cause</text>
</g>
<!-- cause->sub_cause -->
<g id="edge2" class="edge">
<title>cause->sub_cause</title>
<path fill="none" stroke="#000000" d="M225.3574,-18C233.6146,-18 242.2705,-18 250.7397,-18"></path>
<polygon fill="#000000" stroke="#000000" points="225.1557,-14.5001 215.1557,-18 225.1556,-21.5001 225.1557,-14.5001"></polygon>
</g>
<!-- challenge -->
<g id="node3" class="node">
<title>challenge</title>
<polygon fill="#dda0dd" stroke="#000000" points="103.9818,-10.5442 103.9818,-25.4558 73.528,-36 30.4599,-36 .0061,-25.4558 .0061,-10.5442 30.4599,0 73.528,0 103.9818,-10.5442"></polygon>
<text text-anchor="middle" x="51.9939" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">challenge</text>
</g>
<!-- challenge->cause -->
<g id="edge1" class="edge">
<title>challenge->cause</title>
<path fill="none" stroke="#000000" d="M114.327,-18C123.0548,-18 131.7934,-18 139.8673,-18"></path>
<polygon fill="#000000" stroke="#000000" points="114.1267,-14.5001 104.1267,-18 114.1267,-21.5001 114.1267,-14.5001"></polygon>
</g>
</g>
</svg>
</pre><h3 id="Solutions"><a class="anchor hidden-xs" href="#Solutions" title="Solutions"><span class="octicon octicon-link"></span></a>Solutions</h3><p>Proposed solutions should be targeted at the causes but may have side-effects (some solutions may be causes for other challenges, though perhaps less critical than the ones they are trying to address). These side effects are shown as dotted lines.</p><pre class="graphviz"><!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: solutions Pages: 1 -->
<svg width="209pt" height="98pt" viewBox="0.00 0.00 209.10 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)">
<title>solutions</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-94 205.1043,-94 205.1043,4 -4,4"></polygon>
<!-- solution -->
<g id="node1" class="node">
<title>solution</title>
<polygon fill="#add8e6" stroke="#000000" points="201.1626,-63 139.9295,-63 139.9295,-27 201.1626,-27 201.1626,-63"></polygon>
<text text-anchor="middle" x="170.5461" y="-40.8" font-family="Times,serif" font-size="14.00" fill="#000000">solution</text>
</g>
<!-- cause -->
<g id="node2" class="node">
<title>cause</title>
<polygon fill="#fa8072" stroke="#000000" points="89.5049,-72 70.7494,-90 33.2384,-90 14.4829,-72 33.2384,-54 70.7494,-54 89.5049,-72"></polygon>
<text text-anchor="middle" x="51.9939" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">cause</text>
</g>
<!-- cause->solution -->
<g id="edge1" class="edge">
<title>cause->solution</title>
<path fill="none" stroke="#000000" d="M92.3707,-62.8043C107.8536,-59.2781 125.2578,-55.3143 139.7074,-52.0234"></path>
<polygon fill="#000000" stroke="#000000" points="91.4971,-59.4135 82.524,-65.0468 93.0516,-66.2388 91.4971,-59.4135"></polygon>
</g>
<!-- challenge -->
<g id="node3" class="node">
<title>challenge</title>
<polygon fill="#dda0dd" stroke="#000000" points="103.9818,-10.5442 103.9818,-25.4558 73.528,-36 30.4599,-36 .0061,-25.4558 .0061,-10.5442 30.4599,0 73.528,0 103.9818,-10.5442"></polygon>
<text text-anchor="middle" x="51.9939" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">challenge</text>
</g>
<!-- challenge->solution -->
<g id="edge2" class="edge">
<title>challenge->solution</title>
<path fill="none" stroke="#000000" stroke-dasharray="1,5" d="M106.4497,-30.4022C117.9201,-33.0146 129.6328,-35.6821 139.8545,-38.0101"></path>
<polygon fill="#000000" stroke="#000000" points="107.0032,-26.9387 96.4757,-28.1306 105.4487,-33.7639 107.0032,-26.9387"></polygon>
</g>
</g>
</svg>
</pre><h2 id="Summary-of-challenges"><a class="anchor hidden-xs" href="#Summary-of-challenges" title="Summary-of-challenges"><span class="octicon octicon-link"></span></a>Summary of challenges</h2><p>Here we summarise the challenges we have identified in the part 1.</p><ol>
<li>Long time to sync a new node</li>
<li>Cost of storage devices</li>
<li>High internet traffic</li>
<li>Complex DevOps to run nodes</li>
<li>Conflict between updating rules of Ethereum and maintaining backwards compatibility</li>
<li>Conflict between updating the rules of Ethereum and improving client implementations</li>
<li>Difficulty of writing new implementations</li>
<li>Limited transaction throughput</li>
<li>Assessing safety of transactions</li>
<li>Estimating cost of a transaction</li>
</ol><h2 id="Description-of-challenges"><a class="anchor hidden-xs" href="#Description-of-challenges" title="Description-of-challenges"><span class="octicon octicon-link"></span></a>Description of challenges</h2><h3 id="Long-time-to-sync-a-new-node"><a class="anchor hidden-xs" href="#Long-time-to-sync-a-new-node" title="Long-time-to-sync-a-new-node"><span class="octicon octicon-link"></span></a>Long time to sync a new node</h3><p>When a new computer joins the Ethereum network, it needs to obtain the current state before it can start processing arbitrary transactions. The current state can be obtained in two main ways.<br>
Firstly, the current state can be computed from the Genesis block, by applying (executing all transactions within) all the blocks in sequence. This method is now computationally hard due to the number of blocks (and transactions in them) to apply, and due to the size of the state.<br>
Secondly, the current state can be downloaded from the peers that already computed (or downloaded) it. This method is not as hard computationally, but it requires a lot of communication with the peers, due to the size and the structure of the state.</p><h3 id="Cost-of-storage-devices"><a class="anchor hidden-xs" href="#Cost-of-storage-devices" title="Cost-of-storage-devices"><span class="octicon octicon-link"></span></a>Cost of storage devices</h3><p>One can divide the persistent data managed by an Ethereum client into two main categories. First category is the data that rarely changes after being written. This category includes the content of downloaded block headers, block bodies, transaction receipts. Since chain reorganisations are relatively rare and “shallow” (meaning that not many blocks are getting reverted), one can store these data in an append-only form. This makes it feasible to store such data in a lower-cost devices such as HDD (Hard Disk Drives), or even tape (which is the cheapest storage device at the moment of writing). In fact, the “Freezer” implementation in go-ethereum 1.9 is based on these observations.<br>
Second category is the data that is expected to change constantly. This includes mostly the active state of Ethereum, but also some indices for the append-only data. The Ethereum state is special in this category, because not only it constantly changes, but practically any part of it needs to be available for access at a short notice. To achieve maximum performance, one would choose storage devices with lower latency (SSD instead of HDD), and/or with a higher capacity for parallel reads (NVM instead of SSD). As the state grows, cost of these devices may grow super-linearly.</p><h3 id="High-internet-traffic"><a class="anchor hidden-xs" href="#High-internet-traffic" title="High-internet-traffic"><span class="octicon octicon-link"></span></a>High internet traffic</h3><p>Ethereum nodes constantly communicate with their peers in the network. In any peer-to-peer distribution network, being a “fair” participant requires not only satisfy one’s own needs for data but also provide data for the others. Depending on how many new nodes are joining the network, and what is current transaction activity, the internet traffic usage can be unpredictable.</p><h3 id="Complex-operations-to-run-a-node"><a class="anchor hidden-xs" href="#Complex-operations-to-run-a-node" title="Complex-operations-to-run-a-node"><span class="octicon octicon-link"></span></a>Complex operations to run a node</h3><p>The art of operations is how to run the infrastructure in a way that causes the least disruption, is cost efficient, and satisfy the functional requirements of the individual, business, or any organisation owning that infrastructure. Most of the complexities of running Ethereum nodes are usually related to the management of persistent data. Here are some operations that can be challenging, considering the amount of data and its dynamic character:</p><ul>
<li>creating replicas of data to bootstrap new nodes</li>
<li>maintaining backups</li>
<li>pruning old histories</li>
<li>recovering from database corruptions</li>
<li>upgrading to new database formats</li>
<li>representing data in a format convenient for analysis</li>
</ul><h3 id="Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility"><a class="anchor hidden-xs" href="#Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility" title="Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility"><span class="octicon octicon-link"></span></a>Conflict between updating rules of Ethereum and maintaining backwards compatibility</h3><p>Often, the rules of Ethereum need to be updated because:</p><ul>
<li>Implement a missing but very useful feature</li>
<li>Fix a flaw in the original design</li>
<li>Adjust to a change in the technological landscape</li>
</ul><p>Smart contracts that have been deployed using old rules, may come to rely on those rules, explicitly or implicitly. When such contracts are still in frequent use, the challenge is to balance their need to exist in their original form (often, code improvements and redeployments solve the issue), and the need to update the rules.</p><h3 id="Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations"><a class="anchor hidden-xs" href="#Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations" title="Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations"><span class="octicon octicon-link"></span></a>Conflict between updating rules of Ethereum and improving client implementations</h3><p>For reasons mentioned earlier, it is often necessary to update rules of Ethereum. When this happens, there is mandatory work for every Ethereum client implementation team who want their implementation to include the support for the update and stay relevant in the ecosystem. This work may distract from other, equally important work on constantly improving and optimising the implementations to keep up with the growing demands of the system. The balance between these two types of work can be difficult to strike. Ideally, there should be no conflict and the two efforts should be aligned.</p><h3 id="Difficulty-of-writing-new-implementations"><a class="anchor hidden-xs" href="#Difficulty-of-writing-new-implementations" title="Difficulty-of-writing-new-implementations"><span class="octicon octicon-link"></span></a>Difficulty of writing new implementations</h3><p>Sice Ethereum’s launch in August 2015, many teams have attempted to produce working implementation of Ethereum. Initially, there was a great variety of such projects. However, as the system’s usage grew, most implementations became non-viable or too difficult to maintain, although the number of rule changes is still relatively modest.</p><h3 id="Limited-transaction-throughput"><a class="anchor hidden-xs" href="#Limited-transaction-throughput" title="Limited-transaction-throughput"><span class="octicon octicon-link"></span></a>Limited transaction throughput</h3><p>For Dapp developers, it is important to understand limitations of the Ethereum as a platform. One of the main limitation is the transaction throughput. Not only it puts limits on how many users may interact with an application, but it also puts popular application in competition with each other, since this limitation is global, and not per-application. It is currently believed that the maximum theorerical throughput of Ethereum is around 50 transactions per second (assuming simple Ether transferring transaction, 10M block gas limit, and 15 seconds block time). Applications that require more throughput, usually try to utilise so-called “Layer 2” solutions, however, these ase still not very mature at present, and may require lifting other limits (for example, maximum allowed transaction size, or maximum allowed size of contract byte code).</p><h3 id="Assessing-safety-of-transactions"><a class="anchor hidden-xs" href="#Assessing-safety-of-transactions" title="Assessing-safety-of-transactions"><span class="octicon octicon-link"></span></a>Assessing safety of transactions</h3><p>For simple Ether transferring transaction, safety usually comes down to how well the private key is protected, and how secure is the generation of the digital signature (i.e. that it does not leak information about the private key by generating bad random numbers).<br>
For transactions sent to smart contracts, safety assessment is harder, because the code of the smart contract may trigger undesirable actions if it is flawed or misused, intentionally or not. Often, Dapp developers attempt to assure the users of the safety of their contracts by conduction or commissioning security audits, offering bug bounties, or attempting to formally prove some safety properties.<br>
It is believed that design of the execution engine (EVM in case of Ethereum) can be done in a way to make security analysis and formal verfication of smart contracts significantly easier and cheaper.<br>
Another important consideration for safety is the probability of a transaction being reverted due to the chain reorganisations. Unintentional chain reorganisations happen all the time, but their depth is usually quite low. Therefore, the rule of “wait X number of blocks and consider transaction final” works quite well for dealing with unintentional reorganisations. Intentional reorganisations are often referred to as “51% attacks”, though the term may be inaccurate. When dealing with transactions of large value, the safety assessment need to include the risk of intentional reorganisations.</p><h3 id="Estimating-cost-of-a-transaction"><a class="anchor hidden-xs" href="#Estimating-cost-of-a-transaction" title="Estimating-cost-of-a-transaction"><span class="octicon octicon-link"></span></a>Estimating cost of a transaction</h3><p>Gas price is a means of auctioning the limited space within the Ethereum blocks to the transaction senders. Such auctons work well when the space in the blocks is not fully utilised. However, when the blocks are becoming consistently full, higher gas price volatility is observed, and the transaction senders tend to overpay for gas, realising that they are competing with other senders. High volatility of gas prices makes the estimation of correct price to pay more complex.</p><h2 id="Prioritising-of-challenges"><a class="anchor hidden-xs" href="#Prioritising-of-challenges" title="Prioritising-of-challenges"><span class="octicon octicon-link"></span></a>Prioritising of challenges</h2><p>Although any prioritisation of challenges would appear subjective, the approach is to compare the impact of challenges becomes overwhelming. For example, if the challenge <strong>Long time to sync a new node</strong> becomes overwhelming, and the sync time keeps growing, we can predict that in the future, the network will become difficult or impossible to join for the new operators. Although this will not immediately cause the system to fall, it will make it less resilient with some node operators disappearing.</p><h3 id="Long-time-to-sync-a-new-node1"><a class="anchor hidden-xs" href="#Long-time-to-sync-a-new-node1" title="Long-time-to-sync-a-new-node1"><span class="octicon octicon-link"></span></a>Long time to sync a new node</h3><p>It this challenge becomes overwhelming, and the sync time keeps growing, we can predict that in the future, the network will become difficult or impossible to join for the new operators. Although this will not immediately cause the system to fall, it will make it less resilient with some node operators disappearing. Even insentivising such node operators is unlikely to stop this tendency.</p><h3 id="Cost-of-storage-devices1"><a class="anchor hidden-xs" href="#Cost-of-storage-devices1" title="Cost-of-storage-devices1"><span class="octicon octicon-link"></span></a>Cost of storage devices</h3><p>If this challenge becomes overwhelming, and the cost of storage devices keeps growing, the number of node operators may reduce, unless there is a way of compensating node operators.</p><h3 id="High-internet-traffic1"><a class="anchor hidden-xs" href="#High-internet-traffic1" title="High-internet-traffic1"><span class="octicon octicon-link"></span></a>High internet traffic</h3><p>If this challenge becomes overwhelming, and the demands of internet traffic grows, it is unclear what consequences there will be, because the cost of internet traffic appears to be insignificant compared to other costs involved in running an Ethereum node.</p><h3 id="Complex-DevOps-to-run-a-node"><a class="anchor hidden-xs" href="#Complex-DevOps-to-run-a-node" title="Complex-DevOps-to-run-a-node"><span class="octicon octicon-link"></span></a>Complex DevOps to run a node</h3><p>If this challenge becomes overwhelming, and the running an Ethereum node becomes operationally challenging, it is not clear what consequences will be. There are already mitigations to this challenge, in the form of pre-packages solutions to run node (like DappNode), service providers who specialise in hosting Ethereum node, and some cloud operators potentially offering Ethereum nodes “as a service”.</p><h3 id="Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility1"><a class="anchor hidden-xs" href="#Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility1" title="Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility1"><span class="octicon octicon-link"></span></a>Conflict between updating rules of Ethereum and maintaining backwards compatibility</h3><p>If this challenge becomes overwheleming, there are at least two possible scenarios:</p><ol>
<li>Insufficient change of rules</li>
<li>Too many changes breaking backwards compatibility</li>
</ol><p>Both of these require further analysis. Possible consequences of insufficient change incude:</p><ul>
<li>eventual imbalance of gas schedule and DOS attacks on the system</li>
<li>inability to respond to highly desired feature requests</li>
<li>inability to fix design flaws and allow performance breakthroughs</li>
</ul><p>Possible consequences of too many changes breaking backwards compatibility include:</p><ul>
<li>Some popular contracts become obsolete or require redesign and redeployment</li>
</ul><h3 id="Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations1"><a class="anchor hidden-xs" href="#Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations1" title="Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations1"><span class="octicon octicon-link"></span></a>Conflict between updating rules of Ethereum and improving client implementations</h3><p>If this challenge becomes overwhelming, there are at least two scenarios:</p><ol>
<li>Client implementations struggle to keep up with the growth of the system, while most of the time is spent on updating the rules.</li>
<li>Updating rules slows down while core developers are busy with optimisations.</li>
</ol><p>In the first scenario, one potential consequence is the reduction of the block gas limit to protect the implementations from breaking. After that, either existing implementations catch up, new implementation appears, or the system fails.<br>
In the second scenario, the downside is a prolonged “feature freeze”.</p><h3 id="Difficulty-of-writing-new-implementations1"><a class="anchor hidden-xs" href="#Difficulty-of-writing-new-implementations1" title="Difficulty-of-writing-new-implementations1"><span class="octicon octicon-link"></span></a>Difficulty of writing new implementations</h3><p>If this challenge becomes overwhelming, the consequence<br>
is the reduction of number of viable implementations, and increased reliance on the resposible teams for the decision making about the rules of Ethereum.</p><h3 id="Limited-transaction-throughput1"><a class="anchor hidden-xs" href="#Limited-transaction-throughput1" title="Limited-transaction-throughput1"><span class="octicon octicon-link"></span></a>Limited transaction throughput</h3><p>If this challenge becomes overwhelming, that can mean one of two situations:</p><ol>
<li>Transaction throughput starts to decline</li>
<li>Transaction throughput stays the same despite an expectation that it will increase.</li>
</ol><p>First situation is more serious, and it would mean the reduction in the block gas limit as response to DOS attack or low performance of client implementations.<br>
Second situation is less serious, but lead to “disappointment” in Ethereum as a smart contract platform. Currently, there seems to be an expectation that greatly increased transaction throughput will come from Ethereum 2, and Ethereum 1 can at best deliver x10 improvement. As long as such expectation remains justified, the status quo appears to be sustainable.</p><h3 id="Assessing-safety-of-transactions1"><a class="anchor hidden-xs" href="#Assessing-safety-of-transactions1" title="Assessing-safety-of-transactions1"><span class="octicon octicon-link"></span></a>Assessing safety of transactions</h3><p>This challenge can become overwhelming in two ways:</p><ol>
<li>Researchers in formal verification and security of smart contracts come to general conclusion that it does not make economic sense to try to advance this without fundamental change of the EVM design</li>
<li>Intentional reorganisations become possible and sometimes happen in practice</li>
</ol><p>If the challenge becomes overwhelming in the first way, it would lead to potentially large use cases only being deployed on Ethereum for limited use (e.g. limitation no more than $10 million in a smart contract that was suggested straight after “The DAO incident”).<br>
The second way is more immediately alarming, because it would affect even people, companies and organisation that do not utilise sophisticated smart contracts, but rely on simple Ether transfer transactions.</p><h3 id="Estimating-cost-of-a-transaction1"><a class="anchor hidden-xs" href="#Estimating-cost-of-a-transaction1" title="Estimating-cost-of-a-transaction1"><span class="octicon octicon-link"></span></a>Estimating cost of a transaction</h3><p>If this challenge becomes overwhelming, it would mean that the gas prices are consistenty very volatile and it is hard to estimate a required fee to ensure that the transactions get confirmed in timely manner. The worst affected would be people, companies, and organisations, whole operations depend on sending and confirming large number of transactions, for example, exchanges (for deposits and withdrawals, and for trading in case of decentralised exchanges), mining pools (for payouts), popular Dapps. When gas prices are volatile, it becomes more economically attractive to perform transaction front-running and use mechanisms like GasToken to “accumulate” gas at lower prices to release it at higher prices.</p></div>
<div class="ui-toc dropup unselectable hidden-print" style="display:none;">
<div class="pull-right dropdown">
<a id="tocLabel" class="ui-toc-label btn btn-default" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false" title="Table of content">
<i class="fa fa-bars"></i>
</a>
<ul id="ui-toc" class="ui-toc-dropdown dropdown-menu" aria-labelledby="tocLabel">
<div class="toc"><ul class="nav">
<li class=""><a href="#Ethereum-1x-Definition-part-2" title="Ethereum 1x Definition (part 2)">Ethereum 1x Definition (part 2)</a><ul class="nav">
<li class=""><a href="#Methodology-continuation-from-part-1" title="Methodology (continuation from part 1)">Methodology (continuation from part 1)</a><ul class="nav">
<li class=""><a href="#Causes" title="Causes">Causes</a></li>
<li class=""><a href="#Solutions" title="Solutions">Solutions</a></li>
</ul>
</li>
<li class=""><a href="#Summary-of-challenges" title="Summary of challenges">Summary of challenges</a></li>
<li class=""><a href="#Description-of-challenges" title="Description of challenges">Description of challenges</a><ul class="nav">
<li class=""><a href="#Long-time-to-sync-a-new-node" title="Long time to sync a new node">Long time to sync a new node</a></li>
<li class=""><a href="#Cost-of-storage-devices" title="Cost of storage devices">Cost of storage devices</a></li>
<li class=""><a href="#High-internet-traffic" title="High internet traffic">High internet traffic</a></li>
<li class=""><a href="#Complex-operations-to-run-a-node" title="Complex operations to run a node">Complex operations to run a node</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility" title="Conflict between updating rules of Ethereum and maintaining backwards compatibility">Conflict between updating rules of Ethereum and maintaining backwards compatibility</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations" title="Conflict between updating rules of Ethereum and improving client implementations">Conflict between updating rules of Ethereum and improving client implementations</a></li>
<li class=""><a href="#Difficulty-of-writing-new-implementations" title="Difficulty of writing new implementations">Difficulty of writing new implementations</a></li>
<li class=""><a href="#Limited-transaction-throughput" title="Limited transaction throughput">Limited transaction throughput</a></li>
<li class=""><a href="#Assessing-safety-of-transactions" title="Assessing safety of transactions">Assessing safety of transactions</a></li>
<li class=""><a href="#Estimating-cost-of-a-transaction" title="Estimating cost of a transaction">Estimating cost of a transaction</a></li>
</ul>
</li>
<li class=""><a href="#Prioritising-of-challenges" title="Prioritising of challenges">Prioritising of challenges</a><ul class="nav">
<li class=""><a href="#Long-time-to-sync-a-new-node1" title="Long time to sync a new node">Long time to sync a new node</a></li>
<li class=""><a href="#Cost-of-storage-devices1" title="Cost of storage devices">Cost of storage devices</a></li>
<li class=""><a href="#High-internet-traffic1" title="High internet traffic">High internet traffic</a></li>
<li class=""><a href="#Complex-DevOps-to-run-a-node" title="Complex DevOps to run a node">Complex DevOps to run a node</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility1" title="Conflict between updating rules of Ethereum and maintaining backwards compatibility">Conflict between updating rules of Ethereum and maintaining backwards compatibility</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations1" title="Conflict between updating rules of Ethereum and improving client implementations">Conflict between updating rules of Ethereum and improving client implementations</a></li>
<li class=""><a href="#Difficulty-of-writing-new-implementations1" title="Difficulty of writing new implementations">Difficulty of writing new implementations</a></li>
<li class=""><a href="#Limited-transaction-throughput1" title="Limited transaction throughput">Limited transaction throughput</a></li>
<li><a href="#Assessing-safety-of-transactions1" title="Assessing safety of transactions">Assessing safety of transactions</a></li>
<li class=""><a href="#Estimating-cost-of-a-transaction1" title="Estimating cost of a transaction">Estimating cost of a transaction</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div><div class="toc-menu"><a class="expand-toggle" href="#">Expand all</a><a class="back-to-top" href="#">Back to top</a><a class="go-to-bottom" href="#">Go to bottom</a></div>
</ul>
</div>
</div>
<div id="ui-toc-affix" class="ui-affix-toc ui-toc-dropdown unselectable hidden-print" data-spy="affix" style="top:17px;display:none;" null null>
<div class="toc"><ul class="nav">
<li class=""><a href="#Ethereum-1x-Definition-part-2" title="Ethereum 1x Definition (part 2)">Ethereum 1x Definition (part 2)</a><ul class="nav">
<li class=""><a href="#Methodology-continuation-from-part-1" title="Methodology (continuation from part 1)">Methodology (continuation from part 1)</a><ul class="nav">
<li class=""><a href="#Causes" title="Causes">Causes</a></li>
<li class=""><a href="#Solutions" title="Solutions">Solutions</a></li>
</ul>
</li>
<li class=""><a href="#Summary-of-challenges" title="Summary of challenges">Summary of challenges</a></li>
<li class=""><a href="#Description-of-challenges" title="Description of challenges">Description of challenges</a><ul class="nav">
<li class=""><a href="#Long-time-to-sync-a-new-node" title="Long time to sync a new node">Long time to sync a new node</a></li>
<li class=""><a href="#Cost-of-storage-devices" title="Cost of storage devices">Cost of storage devices</a></li>
<li class=""><a href="#High-internet-traffic" title="High internet traffic">High internet traffic</a></li>
<li class=""><a href="#Complex-operations-to-run-a-node" title="Complex operations to run a node">Complex operations to run a node</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility" title="Conflict between updating rules of Ethereum and maintaining backwards compatibility">Conflict between updating rules of Ethereum and maintaining backwards compatibility</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations" title="Conflict between updating rules of Ethereum and improving client implementations">Conflict between updating rules of Ethereum and improving client implementations</a></li>
<li class=""><a href="#Difficulty-of-writing-new-implementations" title="Difficulty of writing new implementations">Difficulty of writing new implementations</a></li>
<li class=""><a href="#Limited-transaction-throughput" title="Limited transaction throughput">Limited transaction throughput</a></li>
<li class=""><a href="#Assessing-safety-of-transactions" title="Assessing safety of transactions">Assessing safety of transactions</a></li>
<li class=""><a href="#Estimating-cost-of-a-transaction" title="Estimating cost of a transaction">Estimating cost of a transaction</a></li>
</ul>
</li>
<li class=""><a href="#Prioritising-of-challenges" title="Prioritising of challenges">Prioritising of challenges</a><ul class="nav">
<li class=""><a href="#Long-time-to-sync-a-new-node1" title="Long time to sync a new node">Long time to sync a new node</a></li>
<li class=""><a href="#Cost-of-storage-devices1" title="Cost of storage devices">Cost of storage devices</a></li>
<li class=""><a href="#High-internet-traffic1" title="High internet traffic">High internet traffic</a></li>
<li class=""><a href="#Complex-DevOps-to-run-a-node" title="Complex DevOps to run a node">Complex DevOps to run a node</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-maintaining-backwards-compatibility1" title="Conflict between updating rules of Ethereum and maintaining backwards compatibility">Conflict between updating rules of Ethereum and maintaining backwards compatibility</a></li>
<li class=""><a href="#Conflict-between-updating-rules-of-Ethereum-and-improving-client-implementations1" title="Conflict between updating rules of Ethereum and improving client implementations">Conflict between updating rules of Ethereum and improving client implementations</a></li>
<li class=""><a href="#Difficulty-of-writing-new-implementations1" title="Difficulty of writing new implementations">Difficulty of writing new implementations</a></li>
<li class=""><a href="#Limited-transaction-throughput1" title="Limited transaction throughput">Limited transaction throughput</a></li>
<li><a href="#Assessing-safety-of-transactions1" title="Assessing safety of transactions">Assessing safety of transactions</a></li>
<li class=""><a href="#Estimating-cost-of-a-transaction1" title="Estimating cost of a transaction">Estimating cost of a transaction</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div><div class="toc-menu"><a class="expand-toggle" href="#">Expand all</a><a class="back-to-top" href="#">Back to top</a><a class="go-to-bottom" href="#">Go to bottom</a></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gist-embed/2.6.0/gist-embed.min.js" integrity="sha256-KyF2D6xPIJUW5sUDSs93vWyZm+1RzIpKCexxElmxl8g=" crossorigin="anonymous" defer></script>
<script>
var markdown = $(".markdown-body");
//smooth all hash trigger scrolling
function smoothHashScroll() {
var hashElements = $("a[href^='#']").toArray();
for (var i = 0; i < hashElements.length; i++) {
var element = hashElements[i];
var $element = $(element);
var hash = element.hash;
if (hash) {
$element.on('click', function (e) {
// store hash
var hash = this.hash;
if ($(hash).length <= 0) return;
// prevent default anchor click behavior
e.preventDefault();
// animate
$('body, html').stop(true, true).animate({
scrollTop: $(hash).offset().top
}, 100, "linear", function () {
// when done, add hash to url
// (default click behaviour)
window.location.hash = hash;
});
});
}
}
}
smoothHashScroll();
var toc = $('.ui-toc');
var tocAffix = $('.ui-affix-toc');
var tocDropdown = $('.ui-toc-dropdown');
//toc
tocDropdown.click(function (e) {
e.stopPropagation();
});
var enoughForAffixToc = true;
function generateScrollspy() {
$(document.body).scrollspy({
target: ''
});
$(document.body).scrollspy('refresh');
if (enoughForAffixToc) {
toc.hide();
tocAffix.show();
} else {
tocAffix.hide();
toc.show();
}
$(document.body).scroll();
}
function windowResize() {
//toc right
var paddingRight = parseFloat(markdown.css('padding-right'));
var right = ($(window).width() - (markdown.offset().left + markdown.outerWidth() - paddingRight));
toc.css('right', right + 'px');
//affix toc left
var newbool;
var rightMargin = (markdown.parent().outerWidth() - markdown.outerWidth()) / 2;
//for ipad or wider device
if (rightMargin >= 133) {
newbool = true;
var affixLeftMargin = (tocAffix.outerWidth() - tocAffix.width()) / 2;
var left = markdown.offset().left + markdown.outerWidth() - affixLeftMargin;
tocAffix.css('left', left + 'px');
} else {
newbool = false;
}
if (newbool != enoughForAffixToc) {
enoughForAffixToc = newbool;
generateScrollspy();
}
}
$(window).resize(function () {
windowResize();
});
$(document).ready(function () {
windowResize();
generateScrollspy();
});
//remove hash
function removeHash() {
window.location.hash = '';
}
var backtotop = $('.back-to-top');
var gotobottom = $('.go-to-bottom');
backtotop.click(function (e) {
e.preventDefault();
e.stopPropagation();
if (scrollToTop)
scrollToTop();
removeHash();
});
gotobottom.click(function (e) {
e.preventDefault();
e.stopPropagation();
if (scrollToBottom)
scrollToBottom();
removeHash();
});
var toggle = $('.expand-toggle');
var tocExpand = false;
checkExpandToggle();
toggle.click(function (e) {
e.preventDefault();
e.stopPropagation();
tocExpand = !tocExpand;
checkExpandToggle();
})
function checkExpandToggle () {
var toc = $('.ui-toc-dropdown .toc');
var toggle = $('.expand-toggle');
if (!tocExpand) {
toc.removeClass('expand');
toggle.text('Expand all');
} else {
toc.addClass('expand');
toggle.text('Collapse all');
}
}
function scrollToTop() {
$('body, html').stop(true, true).animate({
scrollTop: 0
}, 100, "linear");
}
function scrollToBottom() {
$('body, html').stop(true, true).animate({
scrollTop: $(document.body)[0].scrollHeight
}, 100, "linear");
}
</script>
</body>
</html>