-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
for_use_ethereumbook_01what-istxt_fr_CA.html
871 lines (871 loc) · 69.9 KB
/
for_use_ethereumbook_01what-istxt_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
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
<!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>Qu’est-ce qu’Ethereum ?</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 pagenumrestart">
<h2 id="whatis_chapter">Qu’est-ce qu’Ethereum ?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ethereum est souvent décrit comme "l’ordinateur du monde." Mais qu’est-ce que cela signifie ? Commençons par une description axée sur l’informatique, puis essayons de décrypter cela avec une analyse plus pratique des capacités et des caractéristiques d’Ethereum, tout en le comparant à Bitcoin et à d’autres plateformes d’échange d’informations décentralisées (ou « chaînes de blocs » pour court).</p>
</div>
<div class="paragraph">
<p>D’un point de vue informatique, Ethereum est une machine à états déterministe mais pratiquement illimitée, composée d’un état singleton globalement accessible et d’une machine virtuelle qui applique des modifications à cet état.</p>
</div>
<div class="paragraph">
<p>D’un point de vue plus pratique, Ethereum est une infrastructure informatique à source libre décentralisée à l’échelle mondiale qui exécute des programmes appelés <em>contrats intelligents</em>. Il utilise une chaîne de blocs pour synchroniser et stocker les changements d’état du système, ainsi qu’une cryptomonnaie appelée <em>ether</em> pour mesurer et limiter les coûts des ressources d’exécution.</p>
</div>
<div class="paragraph">
<p>La plate-forme Ethereum permet aux développeurs de créer de puissantes applications décentralisées avec des fonctions économiques intégrées. Tout en offrant une disponibilité, une auditabilité, une transparence et une neutralité élevées, il réduit ou élimine également la censure et réduit certains risques de contrepartie.</p>
</div>
<div class="sect2">
<h3 id="bitcoin_comparison">Comparé à Bitcoin</h3>
<div class="paragraph">
<p>Beaucoup de gens viendront à Ethereum avec une expérience préalable des cryptomonnaies, en particulier du Bitcoin. Ethereum partage de nombreux éléments communs avec d’autres chaînes de blocs ouvertes : un réseau pair à pair reliant les participants, un algorithme de consensus byzantin tolérant aux pannes pour la synchronisation des mises à jour d’état (une chaîne de blocs de preuve de travail), l’utilisation de primitives cryptographiques telles que le numérique signatures et hachages, et une monnaie numérique (ether).</p>
</div>
<div class="paragraph">
<p>Pourtant, à bien des égards, le but et la construction d’Ethereum sont étonnamment différents de ceux des chaînes de blocs ouvertes qui l’ont précédé, y compris Bitcoin.</p>
</div>
<div class="paragraph">
<p> Le but d’Ethereum n’est pas principalement d’être un réseau de paiement en monnaie numérique. Alors que la monnaie numérique ether fait à la fois partie intégrante et nécessaire au fonctionnement d’Ethereum, l’ether est conçu comme une <em>monnaie d’utilité</em> pour payer l’utilisation de la plate-forme Ethereum en tant qu’ordinateur mondial.</p>
</div>
<div class="paragraph">
<p>Contrairement à Bitcoin, qui a un langage de script très limité, Ethereum est conçu pour être une chaîne de blocs programmable à usage général qui exécute une <em>machine virtuelle</em> capable d’exécuter du code d’une complexité arbitraire et illimitée. Là où le langage de script de Bitcoin est, intentionnellement, contraint à une simple évaluation vrai/faux des conditions de dépenses, le langage d’Ethereum est <em>Turing complet</em>, ce qui signifie qu’Ethereum peut fonctionner directement comme un ordinateur à usage général.</p>
</div>
</div>
<div class="sect2">
<h3 id="blockchain_components">Composantes d’une chaîne de blocs</h3>
<div class="paragraph">
<p>Les composantes d’une chaîne de blocs ouverte et publique sont (généralement) :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Un réseau pair à pair (P2P) connectant les participants et propageant les transactions et les blocs de transactions vérifiées, basé sur un "échange" <span class="keep-together">protocolaire</span> standardisé.</p>
</li>
<li>
<p>Messages, sous forme de transactions, représentant des transitions d’état</p>
</li>
<li>
<p>Un ensemble de règles consensuelles, régissant ce qui constitue une transaction et ce qui constitue une transition d’état valide</p>
</li>
<li>
<p>Une machine à états qui traite les transactions selon les règles du consensus</p>
</li>
<li>
<p>Une chaîne de blocs cryptographiquement sécurisés qui agit comme un journal de toutes les transitions d’état vérifiées et acceptées</p>
</li>
<li>
<p>Un algorithme de consensus qui décentralise le contrôle sur la chaîne de blocs, en forçant les participants à coopérer à l’application des règles de consensus</p>
</li>
<li>
<p>Un schéma d’incitation théoriquement valable (par exemple, les coûts de la preuve de travail plus les récompenses globales) pour sécuriser économiquement la machine d’état dans un <span class="keep-together">environnement</span> ouvert.</p>
</li>
<li>
<p>Une ou plusieurs implémentations logicielles à source libre des éléments ci-dessus ("clients")</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Tous ou la plupart de ces composants sont généralement combinés dans un seul client logiciel. Par exemple, dans Bitcoin, l’implémentation de référence est développée par le projet à source libre <em>Bitcoin Core</em> et implémentée en tant que client <em>bitcoind</em>. Dans Ethereum, plutôt qu’une implémentation de référence, il existe une <em>spécification de référence</em>, une description mathématique du système dans le livre jaune (voir <a href="#references">Lectures complémentaires</a>). Il existe un certain nombre de clients, qui sont construits selon la spécification de référence.</p>
</div>
<div class="paragraph">
<p>Dans le passé, nous utilisions le terme "chaîne de blocs" pour représenter tous les composants que nous venons d’énumérer, comme une référence abrégée à la combinaison de technologies qui englobent toutes les caractéristiques décrites. Aujourd’hui, cependant, il existe une grande variété de chaînes de blocs avec des propriétés différentes. Nous avons besoin de qualificatifs pour nous aider à comprendre les caractéristiques de la chaîne de blocs en question, telles que <em>ouverte, publique, globale, décentralisée, neutre,</em> et <em>résistante à la censure</em>, pour identifier les caractéristiques émergentes importantes d’un système "chaîne de blocs" que ces composants permettent.</p>
</div>
<div class="paragraph">
<p>Toutes les chaînes de blocs ne sont pas créées égales. Quand quelqu’un vous dit que quelque chose est une chaîne de blocs, vous n’avez pas reçu de réponse ; vous devez plutôt commencer à poser beaucoup de questions pour clarifier ce qu’elles veulent dire lorsqu’elles utilisent le mot "chaîne de blocs". Commencez par demander une description des composants de la liste précédente, puis demandez si cette "chaîne de blocs" présente les caractéristiques d’être <em>ouverte, publique</em>, etc.</p>
</div>
</div>
<div class="sect2">
<h3 id="ethereum_birth">La naissance d’Ethereum</h3>
<div class="paragraph">
<p> Toutes les grandes innovations résolvent de vrais problèmes, et Ethereum ne fait pas exception. Ethereum a été conçu à une époque où les gens reconnaissaient la puissance du modèle Bitcoin et essayaient d’aller au-delà des applications de cryptomonnaie. Mais les développeurs étaient confrontés à une énigme : ils devaient soit construire sur Bitcoin, soit démarrer une nouvelle chaîne de blocs. S’appuyer sur Bitcoin signifiait vivre dans les limites intentionnelles du réseau et essayer de trouver des solutions de contournement. L’ensemble limité de types de transactions, de types de données et de tailles de stockage de données semblait limiter les types d’applications pouvant s’exécuter directement sur Bitcoin ; tout le reste nécessitait des couches hors chaîne supplémentaires, ce qui annulait immédiatement bon nombre des avantages de l’utilisation d’une chaîne de blocs publique. Pour les projets qui avaient besoin de plus de liberté et de flexibilité tout en restant pertinent, une nouvelle chaîne de blocs était la seule option. Mais cela signifiait beaucoup de travail : démarrage de tous les éléments de l’infrastructure, tests exhaustifs, etc.</p>
</div>
<div class="paragraph">
<p> Vers la fin de 2013, Vitalik Buterin, un jeune programmeur et passionné de Bitcoin, a commencé à réfléchir à l’extension des capacités de Bitcoin et Mastercoin (un protocole Bitcoin de superposition étendu pour offrir des contrats intelligents rudimentaires). En octobre de la même année, Vitalik a proposé une approche plus généralisée à l’équipe Mastercoin, qui permettait à des contrats flexibles et scriptables (mais pas Turing-complets) de remplacer le langage contractuel spécialisé de Mastercoin. Bien que l’équipe Mastercoin ait été impressionnée, cette proposition était un changement trop radical pour s’intégrer dans leur feuille de route de développement.</p>
</div>
<div class="paragraph">
<p>En décembre 2013, Vitalik a commencé à partager un livre blanc qui décrivait l’idée derrière Ethereum : une chaîne de blocs à usage général complète de Turing. Quelques dizaines de personnes ont vu cette première ébauche et ont fait part de leurs commentaires, aidant Vitalik à faire évoluer la proposition.</p>
</div>
<div class="paragraph">
<p>Les deux auteurs de ce livre ont reçu une première ébauche du livre blanc et l’ont commentée. Andreas M. Antonopoulos a été intrigué par l’idée et a posé de nombreuses questions à Vitalik sur l’utilisation d’une chaîne de blocs distincte pour appliquer des règles de consensus sur l’exécution de contrats intelligents et les implications d’un langage Turing-complet. Andreas a continué à suivre les progrès d’Ethereum avec beaucoup d’intérêt, mais en était aux premiers stades de l’écriture de son livre <em>Mastering Bitcoin</em>, et n’a participé directement à Ethereum que bien plus tard. Dr. Gavin Wood, cependant, a été l’une des premières personnes à contacter Vitalik et à lui proposer de l’aider avec ses compétences en programmation C++. Gavin est devenu le cofondateur, le codesigner et le CTO d’Ethereum.</p>
</div>
<div class="paragraph">
<p>Comme le raconte Vitalik dans son <a href="http://bit.ly/2T2t6zs">article "Ethereum Prehistory"</a> :</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p>C’était l’époque où le protocole Ethereum était entièrement ma propre création. À partir de là, cependant, de nouveaux participants ont commencé à rejoindre le giron. De loin, le plus important du côté du protocole était Gavin Wood…​</p>
</div>
<div class="paragraph">
<p>Gavin peut également être largement crédité du changement subtil de vision d’Ethereum comme une plate-forme pour créer de l’argent programmable, avec des contrats basés sur la chaîne de blocs qui peuvent contenir des actifs numériques et les transférer selon des règles prédéfinies, à une plate-forme informatique à usage général. Cela a commencé par de subtils changements d’accent et de terminologie, et plus tard cette influence s’est renforcée avec l’accent croissant mis sur l’ensemble "Web 3", qui considérait Ethereum comme un élément d’une suite de technologies décentralisées, les deux autres étant Whisper et Swarm.</p>
</div>
</blockquote>
</div>
<div class="paragraph">
<p>À partir de décembre 2013, Vitalik et Gavin ont affiné et fait évoluer l’idée, construisant ensemble la couche de protocole qui est devenue Ethereum.</p>
</div>
<div class="paragraph">
<p>Les fondateurs d’Ethereum pensaient à une chaîne de blocs sans but précis, qui pourrait prendre en charge une grande variété d’applications en étant <em>programmée</em>. L’idée était qu’en utilisant une chaîne de blocs à usage général comme Ethereum, un développeur pouvait programmer son application particulière sans avoir à mettre en œuvre les mécanismes sous-jacents des réseaux pair à pair, des chaînes de blocs, des algorithmes de consensus, etc. La plateforme Ethereum a été conçue pour abstraire ces détails en fournissant un environnement de programmation déterministe et sécurisé pour les applications chaîne de blocs décentralisées.</p>
</div>
<div class="paragraph">
<p>Tout comme Satoshi, Vitalik et Gavin n’ont pas simplement inventé une nouvelle technologie ; ils ont combiné de nouvelles inventions avec des technologies existantes d’une manière nouvelle et ont livré le code prototype pour prouver leurs idées au monde.</p>
</div>
<div class="paragraph">
<p>Les fondateurs ont travaillé pendant des années, construisant et affinant la vision. Et le 30 juillet 2015, le premier bloc Ethereum a été miné. L’ordinateur du monde a commencé à servir le monde.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>L’article de Vitalik Buterin "A Prehistory of Ethereum" a été publié en septembre 2017 et offre une vue fascinante à la première personne des premiers instants d’Ethereum.</p>
</div>
<div class="paragraph">
<p>Vous pouvez le lire sur
<a href="https://vitalik.ca/general/2017/09/14/prehistory.html" class="bare">https://vitalik.ca/general/2017/09/14/prehistory.html</a>.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="development_stages">Les quatre étapes de développement d’Ethereum</h3>
<div class="paragraph">
<p>Le développement d’Ethereum a été planifié en quatre étapes distinctes, avec des changements majeurs à chaque étape. Une étape peut inclure des sous-versions, appelées "embranchements divergents" (hard forks), qui modifient les fonctionnalités d’une manière qui n’est pas rétrocompatible .</p>
</div>
<div class="paragraph">
<p>Les quatre principales étapes de développement portent le nom de code <em>Frontier</em>, <em>Homestead</em>, <em>Metropolis</em> et <em>Serenity</em>. Les embranchements divergents intermédiaires qui se sont produits (ou sont prévus) à ce jour portent les noms de code <em>Ice Age</em>, <em>DAO</em>, <em>Tangerine Whistle</em>, <em>Spurious Dragon</em>, <em>Byzantium</em> et <em>Constantinople</em>. Les étapes de développement et les embranchements divergents intermédiaires sont présentées sur la chronologie suivante, qui est "datée" par numéro de bloc :</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Bloc #0</dt>
<dd>
<p><em>Frontier</em>—L’étape initiale d’Ethereum, du 30 juillet 2015 à mars 2016.</p>
</dd>
<dt class="hdlist1">Bloc #200 000</dt>
<dd>
<p><em>Ice Age</em>—Un embranchement divergent pour introduire une augmentation exponentielle de la difficulté, pour motiver une transition vers PoS lorsque prêt.</p>
</dd>
<dt class="hdlist1">Bloc #1 150 000</dt>
<dd>
<p><em>Homestead</em>—La deuxième étape d’Ethereum, lancée en mars 2016.</p>
</dd>
<dt class="hdlist1">Bloc #1 192 000</dt>
<dd>
<p><em>DAO</em>—Un embranchement divergent qui a remboursé les victimes du contrat DAO piraté et a provoqué la scission d’Ethereum et d’Ethereum Classic en deux systèmes concurrents.</p>
</dd>
<dt class="hdlist1">Bloc #2 463 000</dt>
<dd>
<p><em>Tangerine Whistle</em>—Un embranchement divergent pour modifier le calcul du gaz pour certaines opérations lourdes en E/S et pour effacer l’état accumulé d’un déni de service (DoS) attaque qui a exploité le faible coût du gaz de ces opérations.</p>
</dd>
<dt class="hdlist1">Bloc #2 675 000</dt>
<dd>
<p><em>Spurious Dragon</em>—Un embranchement divergent pour traiter plus de vecteurs d’attaque DoS, et un autre effacement d’état. En outre, un mécanisme de protection contre les attaques par relecture.</p>
</dd>
<dt class="hdlist1">Bloc #4 370 000</dt>
<dd>
<p><em>Metropolis Byzantium</em>—Metropolis est la troisième étape d’Ethereum, en cours au moment de la rédaction de ce livre, lancée en octobre 2017. Byzance est le premier des deux embranchements divergents prévus pour Metropolis.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Après Byzance, il y a un autre embranchement divergent prévu pour Metropolis : Constantinople. Metropolis sera suivi de la dernière étape du déploiement d’Ethereum, baptisée Serenity.</p>
</div>
</div>
<div class="sect2">
<h3 id="general_purpose_blockchain">Ethereum : une chaîne de blocs à usage général</h3>
<div class="paragraph">
<p>La chaîne de blocs d’origine, à savoir la chaîne de blocs de Bitcoin, suit l’état de unités de bitcoin et leur propriété. Vous pouvez considérer Bitcoin comme une <em>machine à états</em> à consensus distribué, où les transactions provoquent une <em>transition d’état</em> globale, modifiant la propriété des pièces. Les transitions d’état sont contraintes par les règles du consensus, permettant à tous les participants de (éventuellement) converger vers un état commun (consensus) du système, après que plusieurs blocs aient été minés.</p>
</div>
<div class="paragraph">
<p>Ethereum est également une machine à états distribuée. Mais au lieu de suivre uniquement l’état de la propriété de la devise, Ethereum suit les transitions d’état d’un magasin de données à usage général, c’est-à-dire un magasin pouvant contenir toutes les données exprimables en tant que <em>uplet clé–valeur</em>. Un magasin de données clé-valeur contient des valeurs arbitraires, chacune référencée par une clé ; par exemple, la valeur "Mastering Ethereum" référencée par la clé "Titre du livre". À certains égards, cela sert le même objectif que le modèle de stockage de données de <em>Random Access Memory</em> (RAM) utilisé par la plupart des ordinateurs à usage général. Ethereum a une mémoire qui stocke à la fois le code et les données, et il utilise la chaîne de blocs Ethereum pour suivre l’évolution de cette mémoire au fil du temps. Comme un ordinateur à programme stocké à usage général, Ethereum peut charger du code dans sa machine d’état et <em>exécuter</em> ce code, en stockant les changements d’état résultants dans sa chaîne de blocs. Deux des différences critiques par rapport à la plupart des ordinateurs à usage général sont que les changements d’état d’Ethereum sont régis par les règles du consensus et que l’état est distribué à l’échelle mondiale. Ethereum répond à la question : "Et si nous pouvions suivre n’importe quel état arbitraire et programmer la machine à états pour créer un ordinateur mondial fonctionnant par consensus ?"</p>
</div>
</div>
<div class="sect2">
<h3 id="ethereum_components">Composants d’Ethereum</h3>
<div class="paragraph">
<p>Dans Ethereum, les composantes d’un système de chaîne de blocs décrit dans <a href="#blockchain_components">Composantes d’une chaîne de blocs</a> sont, plus précisément :</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Réseau P2P</dt>
<dd>
<p>Ethereum fonctionne sur le <em>réseau principal Ethereum</em>, qui est adressable sur le port TCP 30303, et exécute un protocole appelé <em>ÐΞVp2p</em>.</p>
</dd>
<dt class="hdlist1">Règles de consensus</dt>
<dd>
<p>Les règles de consensus d’Ethereum sont définies dans la spécification de référence, le Yellow Paper (voir <a href="#references">Lectures complémentaires</a>).</p>
</dd>
<dt class="hdlist1">Transactions</dt>
<dd>
<p>Les transactions Ethereum sont des messages réseau qui incluent (entre autres) un expéditeur, un destinataire, une valeur et une charge utile de données.</p>
</dd>
</dl>
</div>
<div class="dlist pagebreak-before">
<dl>
<dt class="hdlist1">Machine d’état</dt>
<dd>
<p>Les transitions d’état Ethereum sont traitées par la <em>Ethereum Virtual Machine</em> (EVM), une machine virtuelle basée sur la pile qui exécute le <em>bytecode</em> (code intermédiaire ou instructions en langage machine). Les programmes EVM, appelés « contrats intelligents », sont écrits dans des langages de haut niveau (par exemple, Solidity) et compilés en code intermédiaire pour être exécutés sur l’EVM.</p>
</dd>
<dt class="hdlist1">Structures de données</dt>
<dd>
<p>L’état d’Ethereum est stocké localement sur chaque nœud en tant que <em>base de données</em> (généralement LevelDB de Google), qui contient les transactions et l’état du système dans une structure de données hachée sérialisée appelée <em>Arbre Merkle Patricia</em>.</p>
</dd>
<dt class="hdlist1">Algorithme de consensus</dt>
<dd>
<p>Ethereum utilise le modèle de consensus de Bitcoin, Nakamoto Consensus, qui utilise des blocs séquentiels à signature unique, pondérés en importance par PoW pour déterminer la chaîne la plus longue et donc l’état actuel. Cependant, il est prévu de passer à un système de vote pondéré PoS, nommé <em>Casper</em>, dans un proche avenir.</p>
</dd>
<dt class="hdlist1">Sécurité économique</dt>
<dd>
<p>Ethereum utilise actuellement un algorithme PoW appelé <em>Ethash</em>, mais cela finira par être abandonné avec le passage au PoS à un moment donné dans le futur.</p>
</dd>
<dt class="hdlist1">Clients</dt>
<dd>
<p>Ethereum a plusieurs implémentations interopérables du logiciel client, dont les plus importantes sont <em>Go-Ethereum</em> (<em>Geth</em>) et <em>Parity</em>.</p>
</dd>
</dl>
</div>
<div class="sect3">
<h4 id="references">Lectures complémentaires</h4>
<div class="paragraph">
<p>Les références suivantes fournissent des informations supplémentaires sur les technologies mentionnées ici :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Le livre jaune Ethereum:
<a href="https://ethereum.github.io/yellowpaper/paper.pdf" class="bare">https://ethereum.github.io/yellowpaper/paper.pdf</a></p>
</li>
<li>
<p>Le Livre Beige, une réécriture du Livre Jaune pour un public plus large dans un langage moins formel:
<a href="https://github.com/chronaeon/beigepaper" class="bare">https://github.com/chronaeon/beigepaper</a></p>
</li>
<li>
<p>Protocole réseau ÐΞVp2p:
<a href="http://bit.ly/2quAlTE" class="bare">http://bit.ly/2quAlTE</a></p>
</li>
<li>
<p>Liste des ressources de la machine virtuelle Ethereum:
<a href="http://bit.ly/2PmtjiS" class="bare">http://bit.ly/2PmtjiS</a></p>
</li>
<li>
<p>Base de données LevelDB (utilisée le plus souvent pour stocker la copie locale de la chaîne de blocs):
<a href="https://github.com/google/leveldb" class="bare">https://github.com/google/leveldb</a></p>
</li>
<li>
<p>Arbres Merkle Patricia:
<a href="https://github.com/ethereum/wiki/wiki/Patricia-Tree" class="bare">https://github.com/ethereum/wiki/wiki/Patricia-Tree</a></p>
</li>
<li>
<p>Algorithme Ethash PoW:
<a href="https://github.com/ethereum/wiki/wiki/Ethash" class="bare">https://github.com/ethereum/wiki/wiki/Ethash</a></p>
</li>
<li>
<p>Guide de mise en œuvre de Casper PoS v1:
<a href="http://bit.ly/2DyPr3l" class="bare">http://bit.ly/2DyPr3l</a></p>
</li>
<li>
<p>Client Go-Ethereum (Geth):
<a href="https://geth.ethereum.org/" class="bare">https://geth.ethereum.org/</a></p>
</li>
<li>
<p>Client Ethereum Parity:
<a href="https://parity.io/" class="bare">https://parity.io/</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect2">
<h3 id="turing_completeness">Complétude d’Ethereum et de Turing</h3>
<div class="paragraph">
<p>Dès que vous commencez à lire sur Ethereum, vous rencontrerez immédiatement le terme "Turing complet". Ethereum, disent-ils, contrairement à Bitcoin, est Turing complet. Qu’est-ce que cela veut dire exactement?</p>
</div>
<div class="paragraph">
<p>Le terme fait référence au mathématicien anglais Alan Turing, qui est considéré comme le père de l’informatique. En 1936, il crée un modèle mathématique d’ordinateur consistant en une machine à états qui manipule des symboles en les lisant et en les écrivant sur une mémoire séquentielle (ressemblant à une bande de papier de longueur infinie). Avec cette construction, Turing a continué à fournir une base mathématique pour répondre (par la négative) aux questions sur la <em>calculabilité universelle</em>, c’est-à-dire si tous les problèmes peuvent être résolus. Il a prouvé qu’il existe des classes de problèmes qui ne sont pas calculables. Plus précisément, il a prouvé que le <em>problème d’arrêt</em> (s’il est possible, étant donné un programme arbitraire et son entrée, de déterminer si le programme finira par s’arrêter) n’est pas résoluble.</p>
</div>
<div class="paragraph">
<p>Alan Turing a en outre défini un système comme étant <em>Turing complet</em> s’il peut être utilisé pour simuler n’importe quelle machine de Turing. Un tel système s’appelle une <em>machine de Turing universelle</em> (UTM).</p>
</div>
<div class="paragraph">
<p>La capacité d’Ethereum à exécuter un programme stocké, dans une machine à états appelée Ethereum Virtual Machine, tout en lisant et en écrivant des données dans la mémoire en fait un système Turing complet et donc un UTM. Ethereum peut calculer n’importe quel algorithme pouvant être calculé par n’importe quelle machine de Turing, compte tenu des limites de la mémoire finie.</p>
</div>
<div class="paragraph">
<p>L’innovation révolutionnaire d’Ethereum consiste à combiner l’architecture informatique à usage général d’un ordinateur à programme stocké avec une chaîne de blocs décentralisée, créant ainsi un ordinateur mondial distribué à un seul état (singleton). Les programmes Ethereum s’exécutent "partout", mais produisent un état commun qui est sécurisé par les règles de <span class="keep-together">consensus</span>.</p>
</div>
<div class="sect3">
<h4 id="turing_completeness_feature">Complétude de Turing en tant que "fonctionnalité"</h4>
<div class="paragraph">
<p> En entendant qu’Ethereum est Turing complet, vous pourriez arriver à la conclusion qu’il s’agit d’une <em>fonctionnalité</em> qui manque d’une manière ou d’une autre dans un système qui est incomplet de Turing. C’est plutôt le contraire. La complétude de Turing est très facile à réaliser ; en fait, <a href="http://bit.ly/2ABft33" class="bare">http://bit.ly/2ABft33</a> [la machine d’état Turing complète la plus simple connue] a 4 états et utilise 6 symboles, avec une définition d’état qui ne compte que 22 instructions. En effet, il arrive parfois que des systèmes soient « accidentellement Turing complets ». Une référence amusante de tels systèmes peut être trouvée à <a href="http://bit.ly/2Og1VgX" class="bare">http://bit.ly/2Og1VgX</a>.</p>
</div>
<div class="paragraph">
<p>Cependant, l’exhaustivité de Turing est très dangereuse, en particulier dans les systèmes à accès ouvert comme les chaînes de blocs publiques, en raison du problème d’arrêt que nous avons évoqué plus tôt. Par exemple, les imprimantes modernes sont Turing complètes et peuvent recevoir des fichiers à imprimer qui les envoient dans un état figé. Le fait qu’Ethereum soit Turing complet signifie que n’importe quel programme de n’importe quelle complexité peut être calculé par Ethereum. Mais cette flexibilité pose des problèmes épineux de sécurité et de gestion des ressources. Une imprimante qui ne répond pas peut être éteinte et rallumée. Ce n’est pas possible avec une chaîne de blocs publique.</p>
</div>
</div>
<div class="sect3">
<h4 id="turing_completeness_implications">Implications de la complétude de Turing</h4>
<div class="paragraph">
<p>Turing a prouvé que vous ne pouvez pas prédire si un programme se terminera en le simulant sur un ordinateur. En termes simples, nous ne pouvons pas prédire le chemin d’un programme sans l’exécuter. Les systèmes Turing-complets peuvent s’exécuter en "boucles infinies", un terme utilisé (en simplifiant à l’extrême) pour décrire un programme qui ne se termine pas. Il est trivial de créer un programme qui exécute une boucle qui ne se termine jamais. Mais des boucles sans fin involontaires peuvent survenir sans avertissement, en raison d’interactions complexes entre les conditions de départ et le code. Dans Ethereum, cela pose un défi : chaque nœud participant (client) doit valider chaque transaction, en exécutant tous les contrats intelligents qu’il appelle. Mais comme Turing l’a prouvé, Ethereum ne peut pas prédire si un contrat intelligent prendra fin, ou combien de temps il durera, sans réellement l’exécuter (éventuellement pour toujours). Que ce soit par accident ou exprès, un contrat intelligent peut être créé de telle sorte qu’il s’exécute indéfiniment lorsqu’un nœud tente de le valider. Il s’agit en fait d’une attaque DoS. Et bien sûr, entre un programme qui prend une milliseconde à valider et un autre qui s’exécute indéfiniment, il existe une gamme infinie de programmes désagréables, monopolisant les ressources, gonflant la mémoire et provoquant une surchauffe du processeur qui gaspillent simplement des ressources. Dans un ordinateur mondial, un programme qui abuse des ressources arrive à abuser des ressources mondiales. Comment Ethereum limite-t-il les ressources utilisées par un contrat intelligent s’il ne peut pas prédire l’utilisation des ressources à l’avance ?</p>
</div>
<div class="paragraph">
<p>Pour répondre à ce défi, Ethereum introduit un mécanisme de mesure appelé <em>gaz</em>. Comme l’EVM exécute un contrat intelligent, il comptabilise soigneusement chaque instruction (calcul, accès aux données, etc.). Chaque instruction a un coût prédéterminé en unités de gaz. Lorsqu’une transaction déclenche l’exécution d’un contrat intelligent, elle doit inclure une quantité de gaz qui fixe la limite supérieure de ce qui peut être consommé en exécutant le contrat intelligent. L’EVM terminera l’exécution si la quantité de gaz consommée par le calcul dépasse le gaz disponible dans la transaction. Le gaz est le mécanisme utilisé par Ethereum pour permettre un calcul complet de Turing tout en limitant les ressources que tout programme peut consommer.</p>
</div>
<div class="paragraph">
<p>La question suivante est, "comment obtenir du gaz pour payer le calcul sur l’ordinateur mondial Ethereum?" Vous ne trouverez pas de gaz sur les échanges. Il ne peut être acheté que dans le cadre d’une transaction et ne peut être acheté qu’avec de l’ether. L’ether doit être envoyé avec une transaction et il doit être explicitement affecté à l’achat de gaz, avec un prix du gaz acceptable. Comme à la pompe, le prix de l’essence n’est pas fixe. Le gaz est acheté pour la transaction, le calcul est exécuté et tout gaz non utilisé est remboursé à l’expéditeur de la transaction.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="DApp">Des chaînes de blocs à usage général aux applications décentralisées (DApps)</h3>
<div class="paragraph">
<p>Ethereum a commencé comme un moyen de créer une chaîne de blocs à usage général qui peut être programmé pour une variété d’utilisations. Mais très rapidement, la vision d’Ethereum s’est élargie pour devenir une plateforme de programmation de DApps. Les DApps représentent une perspective plus large que les contrats intelligents. Un DApp est, à tout le moins, un contrat intelligent et une interface utilisateur Web. Plus généralement, une DApp est une application Web qui repose sur des services d’infrastructure ouverts, décentralisés et pair à pair.</p>
</div>
<div class="paragraph">
<p>Une DApp est composée d’au moins :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Contrats intelligents sur une chaîne de blocs</p>
</li>
<li>
<p>Une interface utilisateur Web frontale</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>De plus, de nombreux DApps incluent d’autres composants décentralisés, tels que :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Un protocole et une plateforme de stockage décentralisé (P2P)</p>
</li>
<li>
<p>Un protocole et une plateforme de messagerie décentralisée (P2P)</p>
</li>
</ul>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<div class="title">Tip</div>
</td>
<td class="content">
<div class="paragraph">
<p>Vous pouvez voir des DApps orthographiés comme <em>ÐApps</em>. Le caractère Ð est le caractère latin appelé "ETH", faisant allusion à Ethereum. Pour afficher ce caractère, utilisez le point de code Unicode <code>0xD0</code>, ou si nécessaire l’entité caractère HTML eth (ou entité décimale #208).</p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="evolving_WWW">Le troisième âge d’Internet</h3>
<div class="paragraph">
<p>En 2004, le terme "Web 2.0" a pris de l’importance, décrivant une évolution du Web vers un contenu généré par l’utilisateur, des interfaces réactives et l’interactivité. Web 2.0 n’est pas une spécification technique, mais plutôt un terme décrivant le nouveau centre d’intérêt des <span class="keep-together">applications</span> Web.</p>
</div>
<div class="paragraph">
<p>Le concept de DApps est destiné à faire passer le World Wide Web à sa prochaine étape d’évolution naturelle, en introduisant la décentralisation avec des protocoles pair à pair dans tous les aspects d’une application Web. Le terme utilisé pour décrire cette évolution est <em>web3</em>, c’est-à-dire la troisième "version" du web. Proposé pour la première fois par le Dr Gavin Wood, web3 représente une nouvelle vision et une nouvelle orientation pour les applications Web : des applications détenues et gérées de manière centralisée aux applications basées sur des protocoles décentralisés .</p>
</div>
<div class="paragraph">
<p>Dans les chapitres suivants, nous explorerons la bibliothèque JavaScript Ethereum web3.js, qui relie les applications JavaScript qui s’exécutent dans votre navigateur avec la chaîne de blocs Ethereum. La bibliothèque web3.js comprend également une interface vers un réseau de stockage P2P appelé <em>Swarm</em> et un service de messagerie P2P appelé <em>Whisper</em>. Avec ces trois composants inclus dans une bibliothèque JavaScript exécutée dans votre navigateur Web, les développeurs disposent d’une suite complète de développement d’applications qui leur permet de créer des DApps web3.</p>
</div>
</div>
<div class="sect2">
<h3 id="development_culture">Culture de développement d’Ethereum</h3>
<div class="paragraph">
<p> Jusqu’à présent, nous avons expliqué en quoi les objectifs et la technologie d’Ethereum diffèrent de ceux des autres chaînes de blocs qui l’ont précédé , comme Bitcoin. Ethereum a également une culture de développement très différente.</p>
</div>
<div class="paragraph">
<p>Dans Bitcoin, le développement est guidé par des principes conservateurs : tous les changements sont soigneusement étudiés pour s’assurer qu’aucun des systèmes existants ne soit perturbé. Pour la plupart, les modifications ne sont mises en œuvre que si elles sont rétrocompatibles. Les clients existants sont autorisés à s’inscrire, mais continueront à fonctionner s’ils décident de ne pas effectuer la mise à niveau.</p>
</div>
<div class="paragraph">
<p>Dans Ethereum, en comparaison, la culture de développement de la communauté est axée sur l’avenir plutôt que sur le passé. Le mantra (pas tout à fait sérieux) est "avancez vite et cassez des choses". Si un changement est nécessaire, il est mis en œuvre, même si cela signifie invalider les hypothèses précédentes, rompre la compatibilité ou forcer les clients à se mettre à jour. La culture de développement d’Ethereum se caractérise par une innovation et une évolution rapide et une volonté de déployer des améliorations tournées vers l’avenir, même si cela se fait au détriment d’une certaine rétrocompatibilité.</p>
</div>
<div class="paragraph">
<p>Cela signifie pour vous, en tant que développeur, que vous devez rester flexible et être prêt à reconstruire votre infrastructure à mesure que certaines des hypothèses sous-jacentes changent. L’un des grands défis auxquels sont confrontés les développeurs d’Ethereum est la contradiction inhérente entre le déploiement de code sur un système immuable et une plate-forme de développement en constante évolution. Vous ne pouvez pas simplement "mettre à niveau" vos contrats intelligents. Vous devez être prêt à en déployer de nouveaux, à migrer les utilisateurs, les applications et les fonds, et à recommencer.</p>
</div>
<div class="paragraph">
<p>Ironiquement, cela signifie également que l’objectif de construire des systèmes avec plus d’autonomie et moins de contrôle centralisé n’est toujours pas pleinement atteint. L’autonomie et la décentralisation nécessitent un peu plus de stabilité dans la plate-forme que vous n’obtiendrez probablement dans Ethereum dans les prochaines années. Afin de "faire évoluer" la plateforme, vous devez être prêt à supprimer et redémarrer vos contrats intelligents, ce qui signifie que vous devez conserver un certain degré de contrôle sur eux.</p>
</div>
<div class="paragraph">
<p>Mais, du côté positif, Ethereum avance très vite. Il y a peu d’opportunités pour la "bike-shedding", une expression qui signifie retarder le développement en se disputant sur des détails mineurs tels que la façon de construire le garage à vélos à l’arrière d’une centrale nucléaire. Si vous commencez à faire du vélo, vous découvrirez peut-être soudainement que pendant que vous étiez distrait, le reste de l’équipe de développement a changé le plan et a abandonné les vélos en faveur de l’aéroglisseur autonome.</p>
</div>
<div class="paragraph">
<p>A terme, le développement de la plateforme Ethereum ralentira et ses interfaces deviendront fixes. Mais en attendant, l’innovation est le principe moteur. Vous feriez mieux de suivre, car personne ne ralentira pour vous.</p>
</div>
</div>
<div class="sect2">
<h3 id="why_learn">Pourquoi apprendre Ethereum ?</h3>
<div class="paragraph">
<p>Les chaînes de blocs ont une courbe d’apprentissage très abrupte, car elles combinent plusieurs disciplines en un seul domaine: programmation, sécurité de l’information, cryptographie, économie, systèmes distribués, réseaux pair à pair, etc. Ethereum rend cette courbe d’apprentissage beaucoup moins abrupte, vous pouvez donc démarrer rapidement. Mais juste sous la surface d’un environnement d’une simplicité trompeuse se cache bien plus. Au fur et à mesure que vous apprenez et commencez à chercher plus profondément, il y a toujours une autre couche de complexité et d’émerveillement.</p>
</div>
<div class="paragraph">
<p>Ethereum est une excellente plate-forme pour en savoir plus sur les chaînes de blocs et construit une communauté massive de développeurs, plus rapidement que toute autre plate-forme de chaîne de blocs. Plus que tout autre, Ethereum est une <em>chaîne de blocs de développeurs</em>, construite par des développeurs pour des développeurs. Un développeur familiarisé avec les applications JavaScript peut se lancer dans Ethereum et commencer à produire du code fonctionnel très rapidement. Pendant les premières années de la vie d’Ethereum, il était courant de voir des T-shirts annonçant que vous pouvez créer un jeton en seulement cinq lignes de code. Bien sûr, c’est une épée à double tranchant. Il est facile d’écrire du code, mais il est très difficile d’écrire du <em>bon</em> code <em>sécurisé</em>.</p>
</div>
</div>
<div class="sect2">
<h3 id="teaching_objectives">Ce que ce livre vous apprendra</h3>
<div class="paragraph">
<p>Ce livre plonge dans Ethereum et examine chaque composant. Vous commencerez par une transaction simple, décortiquerez son fonctionnement, établirez un contrat simple, l’améliorerez et suivrez son parcours dans le système Ethereum.</p>
</div>
<div class="paragraph">
<p>Vous apprendrez non seulement comment utiliser Ethereum - comment cela fonctionne - mais aussi pourquoi il est conçu comme il est. Vous pourrez comprendre comment chacune des pièces fonctionne, comment elles s’emboîtent et pourquoi. </p>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2022-05-15 08:23:08 -0400
</div>
</div>
</body>
</html>