-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
for_use_ethereumbook_14consensustxt_fr_CA.html
614 lines (614 loc) · 47.4 KB
/
for_use_ethereumbook_14consensustxt_fr_CA.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
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
<!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">
<meta name="generator" content="Asciidoctor 2.0.17">
<title>Consensus</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article">
<div id="header">
</div>
<div id="content">
<div class="sect1">
<h2 id="consensus">Consensus</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Tout au long de ce livre, nous avons parlé de "règles de consensus" - les règles que tout le monde doit accepter pour que le système fonctionne dans un environnement décentralisé. En informatique, le terme <em>consensus</em> est antérieur aux chaînes de blocs et est lié au problème plus large de la synchronisation de l’état dans les systèmes distribués, de sorte que les différents participants d’un système distribué s’accordent tous (éventuellement) sur un seul état à l’échelle du système. C’est ce qu’on appelle « parvenir à un consensus ».</p>
</div>
<div class="paragraph">
<p>En ce qui concerne la fonction principale de tenue et de vérification décentralisées des dossiers, il peut devenir problématique de se fier uniquement à la confiance pour s’assurer que les informations dérivées des mises à jour de l’État sont correctes. Ce défi assez général est particulièrement prononcé dans les réseaux décentralisés car il n’y a pas d’entité centrale pour décider de ce qui est vrai. L’absence d’une entité décisionnelle centrale est l’un des principaux attraits des plateformes chaîne de blocs, en raison de la capacité qui en résulte à résister à la censure et au manque de dépendance vis-à-vis de l’autorité pour obtenir l’autorisation d’accéder aux informations. Cependant, ces avantages ont un coût : sans arbitre de confiance, tout désaccord, tromperie ou différence doit être concilié par d’autres moyens. Les algorithmes de consensus sont le mécanisme utilisé pour concilier sécurité et décentralisation.</p>
</div>
<div class="paragraph">
<p>Dans les chaînes de blocs, le consensus est une propriété essentielle du système. Bref, il y a de l’argent en jeu ! Ainsi, dans le contexte des chaînes de blocs, le <em>consensus</em> consiste à pouvoir arriver à un état commun, tout en maintenant la décentralisation. En d’autres termes, le consensus vise à produire un système de <em>règles strictes sans dirigeants</em>. Il n’y a pas une personne, une organisation ou un groupe "en charge" ; plutôt, le pouvoir et le contrôle sont répartis sur un vaste réseau de participants, dont l’intérêt personnel est servi en suivant les règles et en se comportant honnêtement.</p>
</div>
<div class="paragraph">
<p>La capacité de parvenir à un consensus sur un réseau distribué, dans des conditions contradictoires, sans centraliser le contrôle est le principe fondamental de toutes les chaînes de blocs publiques ouvertes. Pour relever ce défi et maintenir la propriété précieuse de la décentralisation, la communauté continue d’expérimenter différents modèles de consensus. Ce chapitre explore ces modèles de consensus et leur impact attendu sur les chaînes de blocs de contrats intelligents tels qu’Ethereum.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Alors que les algorithmes de consensus sont une partie importante du fonctionnement des chaînes de blocs, ils fonctionnent à une couche fondamentale, bien en deçà de l’abstraction des contrats intelligents. En d’autres termes, la plupart des détails du consensus sont cachés aux auteurs de contrats intelligents. Vous n’avez pas besoin de savoir comment ils fonctionnent pour utiliser Ethereum, pas plus que vous n’avez besoin de savoir comment fonctionne le routage pour utiliser Internet.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="_consensus_via_une_preuve_de_travail">Consensus via une preuve de travail</h3>
<div class="paragraph">
<p>Le créateur de la chaîne de blocs originale, Bitcoin, a inventé un <em>algorithme de consensus</em> appelé <em>Proof-of-Work</em> (PoW) ou <em>preuve de travail</em>. On peut dire que PoW est l’invention la plus importante qui sous-tend Bitcoin. Le terme familier pour PoW est "minage", ce qui crée un malentendu sur l’objectif principal du consensus. Souvent, les gens supposent que le but de l’exploitation minière est la création d’une nouvelle monnaie, puisque le but de l’exploitation minière dans le monde réel est l’extraction de métaux précieux ou d’autres ressources. Au contraire, le véritable objectif de l’exploitation minière (et de tous les autres modèles de consensus) est de <em>sécuriser la chaîne de blocs</em>, tout en gardant le contrôle du système décentralisé et diffusé entre autant de participants que possible. La récompense de la monnaie nouvellement frappée est une incitation pour ceux qui contribuent à la sécurité du système : un moyen pour une fin. En ce sens, la récompense est le moyen et la sécurité décentralisée est la fin. Dans le consensus PoW, il existe également une "punition" correspondante, qui est le coût de l’énergie nécessaire pour participer à l’exploitation minière. Si les participants ne suivent pas les règles et ne gagnent pas la récompense, ils risquent les fonds qu’ils ont déjà dépensés en électricité pour miner. Ainsi, le consensus PoW est un équilibre prudent entre risque et récompense qui pousse les participants à se comporter honnêtement par intérêt personnel.</p>
</div>
<div class="paragraph">
<p>Ethereum est actuellement une chaîne de blocs PoW, en ce sens qu’elle utilise un algorithme PoW avec le même système d’incitation de base pour le même objectif de base : sécuriser la chaîne de blocs tout en décentralisant le contrôle. L’algorithme PoW d’Ethereum est légèrement différent de celui de Bitcoin et s’appelle <em>Ethash</em>. Nous examinerons la fonction et les caractéristiques de conception de l’algorithme dans <a href="#ethash">Ethash : l’algorithme de preuve de travail d’Ethereum</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_consensus_via_preuve_denjeu_pos">Consensus via preuve d’enjeu (PoS)</h3>
<div class="paragraph">
<p>Historiquement, la preuve de travail n’était pas le premier algorithme de consensus proposé. Avant l’introduction de la preuve de travail, de nombreux chercheurs avaient proposé des variantes d’algorithmes de consensus basés sur l’enjeu financier, désormais appelés <em>preuve d’enjeu</em> (PoS). À certains égards, la preuve de travail a été inventée comme une alternative à la preuve d’enjeu. Suite au succès de Bitcoin, de nombreuses chaînes de blocs ont émulé la preuve de travail. Pourtant, l’explosion de la recherche sur les algorithmes de consensus a également ressuscité la preuve d’enjeu, faisant progresser considérablement l’état de la technologie. Dès le début, les fondateurs d’Ethereum espéraient éventuellement migrer son algorithme de consensus vers la preuve d’enjeu. En fait, il existe un handicap délibéré sur la preuve de travail d’Ethereum appelée la <em>bombe de difficulté</em>, destinée à rendre progressivement de plus en plus difficile le minage de preuve de travail d’Ethereum, forçant ainsi le passage à la preuve d’enjeu.</p>
</div>
<div class="paragraph">
<p>Au moment de la publication de ce livre, Ethereum utilise toujours la preuve de travail, mais la recherche en cours vers une alternative de preuve d’enjeu touche à sa fin. L’algorithme PoS prévu par Ethereum s’appelle <em>Casper</em>. L’introduction de Casper en remplacement d’Ethash a été repoussée à plusieurs reprises au cours des deux dernières années, nécessitant des interventions pour désamorcer la bombe de difficulté et repousser l’obsolescence forcée de la preuve de travail.</p>
</div>
<div class="paragraph">
<p>En général, un algorithme PoS fonctionne comme suit. La chaîne de blocs garde la trace d’un ensemble de validateurs, et toute personne qui détient la cryptomonnaie de base de la chaîne de blocs (dans le cas d’Ethereum, l’ether) peut devenir un validateur en envoyant un type spécial de transaction qui verrouille son ether dans un dépôt. Les validateurs proposent et votent à tour de rôle sur le prochain bloc valide, et le poids du vote de chaque validateur dépend de la taille de son dépôt (c’est-à-dire de sa mise). Il est important de noter qu’un validateur risque de perdre son dépôt si le bloc sur lequel il l’a misé est rejeté par la majorité des validateurs. Inversement, les validateurs gagnent une petite récompense, proportionnelle à leur mise déposée, pour chaque bloc accepté par la majorité. Ainsi, le PoS oblige les validateurs à agir honnêtement et à suivre les règles du consensus, par un système de récompense et de punition. La principale différence entre PoS et PoW est que la punition dans PoS est intrinsèque à la chaîne de blocs (par exemple, perte d’ether en enjeu), alors que dans PoW, la punition est extrinsèque (par exemple, perte de fonds dépensés en <span class="keep-together">électricité</span>).</p>
</div>
</div>
<div class="sect2">
<h3 id="ethash">Ethash : l’algorithme de preuve de travail d’Ethereum</h3>
<div class="paragraph">
<p>Ethash est l’algorithme Ethereum PoW. Il utilise une évolution de l’algorithme Dagger-Hashimoto, qui est une combinaison de l’algorithme Dagger de Vitalik Buterin et de l’algorithme Hashimoto de Thaddeus Dryja. Ethash dépend de la génération et de l’analyse d’un grand ensemble de données, connu sous le nom de <em>graphe acyclique dirigé</em> (ou, plus simplement, « le DAG »). Le DAG avait une taille initiale d’environ 1 Go et continuera à croître lentement et linéairement, étant mis à jour une fois par époque (30 000 blocs, soit environ 125 heures).</p>
</div>
<div class="paragraph">
<p>Le but du DAG est de rendre l’algorithme Ethash PoW dépendant du maintien d’une grande structure de données fréquemment consultée. Cette dernière à son tour est destiné à rendre Ethash "résistant aux ASIC", ce qui signifie qu’il est plus difficile de fabriquer des équipements d’exploitation de <em>circuits intégrés spécifiques à l’application</em> (ASIC) qui sont des ordres de grandeur plus rapides qu’une <em>unité de traitement graphique</em> (GPU) rapide. Les fondateurs d’Ethereum voulaient éviter la centralisation dans l’exploitation minière PoW, où ceux qui avaient accès à des usines de fabrication de silicium spécialisées et à de gros budgets pourraient dominer l’infrastructure minière et compromettre la sécurité de l’algorithme de consensus.</p>
</div>
<div class="paragraph">
<p>L’utilisation de GPU grand public pour effectuer le PoW sur le réseau Ethereum signifie que davantage de personnes dans le monde peuvent participer au processus de minage. Plus il y a de mineurs indépendants, plus la puissance minière est décentralisée, ce qui signifie que nous pouvons éviter une situation comme dans Bitcoin, où une grande partie de la puissance minière est concentrée entre les mains de quelques grandes exploitations minières industrielles. L’inconvénient de l’utilisation des GPU pour l’exploitation minière est qu’elle a précipité une pénurie mondiale de GPU en 2017, provoquant une montée en flèche de leur prix et un tollé des joueurs. Cela a conduit à des restrictions d’achat chez les détaillants, limitant les acheteurs à un ou deux GPU par client.</p>
</div>
<div class="paragraph">
<p>Jusqu’à récemment, la menace des mineurs ASIC sur le réseau Ethereum était largement inexistante. L’utilisation d’ASIC pour Ethereum nécessite la conception, la fabrication et la distribution de matériel hautement personnalisé. Leur production nécessite un investissement considérable en temps et en argent. Les plans exprimés de longue date par les développeurs d’Ethereum de passer à un algorithme de consensus PoS ont probablement empêché les fournisseurs d’ASIC de cibler le réseau Ethereum pendant longtemps. Dès qu’Ethereum passera au PoS, les ASIC conçus pour l’algorithme PoW seront rendus inutiles, c’est-à-dire à moins que les mineurs ne puissent les utiliser pour exploiter d’autres crypto-monnaies à la place. Cette dernière possibilité est désormais une réalité avec une gamme d’autres pièces de consensus basées sur Ethash disponibles, telles que PIRL et Ubiq, et Ethereum Classic s’est engagé à rester une chaîne de blocs PoW dans un avenir prévisible. Cela signifie que nous verrons probablement l’exploitation minière ASIC commencer à devenir une force sur le réseau Ethereum alors qu’il fonctionne toujours sur le consensus PoW.</p>
</div>
</div>
<div class="sect2">
<h3 id="_casper_lalgorithme_de_preuve_de_participation_dethereum">Casper : l’algorithme de preuve de participation d’Ethereum</h3>
<div class="paragraph">
<p>Casper est le nom proposé pour l’algorithme de consensus PoS d’Ethereum. Il est toujours en recherche et développement actif et n’est pas implémenté sur la chaîne de blocs Ethereum au moment de la publication de ce livre. Casper est développé en deux "saveurs" concurrentes :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Casper FFG: "The Friendly Finality Gadget"</p>
</li>
<li>
<p>Casper CBC: "The Friendly GHOST/Correct-by-Construction"</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Initialement, Casper FFG a été proposé comme un algorithme hybride PoW/PoS à implémenter comme une transition vers un algorithme "pur PoS" plus permanent. Mais en juin 2018, Vitalik Buterin, qui dirigeait les travaux de recherche sur Casper FFG, a décidé de "mettre fin" au modèle hybride au profit d’un algorithme PoS pur. Désormais, Casper FFG et Casper CBC sont développés en parallèle. Comme l’explique Vitalik :</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p>Le principal compromis entre FFG et CBC est que CBC semble avoir de meilleures propriétés théoriques, mais FFG semble être plus facile à mettre en œuvre.</p>
</div>
</blockquote>
</div>
<div class="paragraph">
<p>Plus d’informations sur l’histoire de Casper, les recherches en cours et les plans futurs peuvent être trouvées sur les liens suivants :</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://bit.ly/2RO5HAl">Ethereum Casper (preuve d’enjeu)</a></p>
</li>
<li>
<p><a href="http://bit.ly/2FlBojb">Histoire de Casper, partie 1</a></p>
</li>
<li>
<p><a href="http://bit.ly/2QyHiic">Histoire de Casper, partie 2</a></p>
</li>
<li>
<p><a href="http://bit.ly/2JWWFyt">Histoire de Casper, partie 3</a></p>
</li>
<li>
<p><a href="http://bit.ly/2FsaExI">Histoire de Casper, partie 4</a></p>
</li>
<li>
<p><a href="http://bit.ly/2PPhhOv">Histoire de Casper, partie 5</a></p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_principes_de_consensus">Principes de Consensus</h3>
<div class="paragraph">
<p>Les principes et hypothèses des algorithmes de consensus peuvent être mieux compris en posant quelques questions clés :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Qui peut changer le passé, et comment ? (Ceci est également connu sous le nom d'<em>immutabilité</em>.)</p>
</li>
<li>
<p>Qui peut changer le futur, et comment ? (Ceci est également connu sous le nom de <em>finalité</em>.)</p>
</li>
<li>
<p>Quel est le coût pour effectuer de tels changements ?</p>
</li>
<li>
<p>Dans quelle mesure le pouvoir d’apporter de tels changements est-il décentralisé ?</p>
</li>
<li>
<p>Qui saura si quelque chose a changé, et comment le saura-t-il ?</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Les algorithmes de consensus évoluent rapidement, tentant de répondre à ces questions de manière de plus en plus innovante.</p>
</div>
</div>
<div class="sect2">
<h3 id="_controverse_et_compétition">Controverse et Compétition</h3>
<div class="paragraph">
<p>À ce stade, vous vous demandez peut-être : pourquoi avons-nous besoin d’autant d’algorithmes de consensus différents ? Laquelle fonctionne mieux ? La réponse à cette dernière question est au centre du domaine de recherche le plus passionnant sur les systèmes distribués de la dernière décennie. Tout se résume à ce que vous considérez comme "meilleur" - ce qui, dans le contexte de l’informatique, concerne les hypothèses, les objectifs et les compromis inévitables.</p>
</div>
<div class="paragraph">
<p>Il est probable qu’aucun algorithme ne puisse optimiser toutes les dimensions du problème du consensus décentralisé. Lorsque quelqu’un suggère qu’un algorithme de consensus est "meilleur" que les autres, vous devriez commencer à poser des questions qui clarifient : mieux en quoi ? Immutabilité, finalité, décentralisation, coût ? Il n’y a pas de réponse claire à ces questions, du moins pas encore. De plus, la conception d’algorithmes de consensus est au centre d’une industrie de plusieurs milliards de dollars et génère d’énormes controverses et des arguments passionnés. En fin de compte, il se peut qu’il n’y ait pas de réponse "correcte", tout comme il peut y avoir des réponses différentes pour différentes applications.</p>
</div>
<div class="paragraph">
<p>L’ensemble de l’industrie de la chaîne de blocs est une expérience géante où ces questions seront testées dans des conditions contradictoires, avec une énorme valeur monétaire en jeu. En fin de compte, l’histoire répondra à la controverse.</p>
</div>
</div>
<div class="sect2">
<h3 id="_conclusion">Conclusion</h3>
<div class="paragraph">
<p>L’algorithme de consensus d’Ethereum est toujours en évolution au moment de l’achèvement de ce livre. Dans une future édition, nous ajouterons probablement plus de détails sur Casper et d’autres technologies connexes à mesure qu’elles mûriront et seront déployées sur Ethereum. Ce chapitre représente la fin de notre voyage, complétant <em>Maîtriser Ethereum</em>. Des documents de référence supplémentaires suivent dans les annexes. Merci d’avoir lu ce livre et félicitations pour avoir atteint la fin !</p>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2022-05-15 05:09:23 -0400
</div>
</div>
</body>
</html>