-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
for_use_ethereumbook_02introtxt_fr_CA.html
1350 lines (1346 loc) · 100 KB
/
for_use_ethereumbook_02introtxt_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
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!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>Les bases d’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">
<h2 id="intro_chapter">Les bases d’Ethereum</h2>
<div class="sectionbody">
<div class="paragraph">
<p> Dans ce chapitre, nous commencerons à explorer Ethereum, à apprendre à utiliser les portefeuilles, à créer des transactions, et aussi comment exécuter un contrat intelligent de base.</p>
</div>
<div class="sect2">
<h3 id="ether_units">L’ether comme unité monétaire</h3>
<div class="paragraph">
<p>L’unité monétaire d’Ethereum est appelée <em>ether</em>, également identifiée par "ETH" ou avec les symboles Ξ (de la lettre grecque « Xi » qui ressemble à un E majuscule stylisé) ou, moins souvent, ♦ : par exemple, 1 ether, ou 1 ETH, ou Ξ1, ou ♦1.</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<div class="title">Tip</div>
</td>
<td class="content">
<div class="paragraph">
<p>Utilisez le caractère Unicode U+039E pour Ξ et U+2666 pour ♦.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>L’ether est subdivisé en unités plus petites, jusqu’à la plus petite unité possible, qui est nommée <em>wei</em>. Un ether est égal à 1 quintillion de wei (1 * 10<sup>18</sup> ou 1 000 000 000 000 000 000). Vous entendrez peut-être aussi les gens se référer à la devise "Ethereum", mais c’est une erreur courante pour les débutants. Ethereum est le système, ether est la monnaie.</p>
</div>
<div class="paragraph">
<p>La valeur de l’ether est toujours représentée en interne dans Ethereum sous la forme d’une valeur entière non signée libellée en wei. Lorsque vous traitez 1 ether, la transaction encode 1000000000000000000 wei comme valeur.</p>
</div>
<div class="paragraph">
<p>Les différentes dénominations d’ether ont à la fois un <em>nom scientifique</em> utilisant le Système international d’unités (<em>SI</em>) et un nom familier qui rend hommage à de nombreux grands esprits de l’informatique et de la cryptographie.</p>
</div>
<div class="paragraph">
<p><a href="#ether_denominations">Dénominations d’ether et noms d’unités</a> montre les différentes unités, leurs noms familiers (communs) et leurs noms SI. Conformément à la représentation interne de la valeur, le tableau montre toutes les dénominations en wei (première ligne), avec l’ether indiqué par 10<sup>18</sup> wei dans la 7e ligne.</p>
</div>
<table id="ether_denominations" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 1. Dénominations d’ether et noms d’unités</caption>
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Valeur (en wei)</th>
<th class="tableblock halign-left valign-top">Exposant</th>
<th class="tableblock halign-left valign-top">Nom commun</th>
<th class="tableblock halign-left valign-top">Nom SI</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">wei</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Wei</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>3</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Babbage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kilowei ou femtoether</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>6</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Lovelace</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mégawei ou picoether</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000 000 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>9</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Shanon</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Gigawei ou nanoether</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000 000 000 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>12</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Szabo</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Microether ou micro</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000 000 000 000 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>15</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Finney</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Milliether ou milli</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>1 000 000 000 000 000 000</em></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>10<sup>18</sup></em></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Ether</em></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Ether</em></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000 000 000 000 000 000 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>21</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">grandiose</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Kiloether</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1 000 000 000 000 000 000 000 000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10<sup>24</sup></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mégaether</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="choosing_eth_wallet">Choisir un portefeuille Ethereum</h3>
<div class="paragraph">
<p>Le terme "portefeuille" est venu signifier beaucoup de choses, bien qu’elles soient toutes liées et qu’elles se résument au quotidien à peu près à la même chose. Nous utiliserons le terme "portefeuille" pour désigner une application logicielle qui vous aide à gérer votre compte Ethereum. En bref, un portefeuille Ethereum est votre passerelle vers le système Ethereum. Il détient vos clés et peut créer et diffuser des transactions en votre nom. Choisir un portefeuille Ethereum peut être difficile car il existe de nombreuses options différentes avec des caractéristiques et des conceptions différentes. Certains sont plus adaptés aux débutants et certains sont plus adaptés aux experts. La plate-forme Ethereum elle-même est toujours en cours d’amélioration, et les "meilleurs" portefeuilles sont souvent ceux qui s’adaptent aux changements qui accompagnent les mises à niveau de la plate-forme.</p>
</div>
<div class="paragraph">
<p>Mais ne vous inquiétez pas ! Si vous choisissez un portefeuille et que vous n’aimez pas son fonctionnement, ou si vous l’aimez au début, mais que vous souhaitez ensuite essayer autre chose, vous pouvez changer de portefeuille assez facilement. Tout ce que vous avez à faire est d’effectuer une transaction qui envoie vos fonds de l’ancien portefeuille vers le nouveau portefeuille, ou d’exporter vos clés privées et de les importer dans le nouveau.</p>
</div>
<div class="paragraph">
<p>Nous avons sélectionné trois types de portefeuilles différents à utiliser comme exemples tout au long du livre : un portefeuille mobile, un portefeuille de bureau et un portefeuille Web. Nous avons choisi ces trois portefeuilles car ils représentent un large éventail de complexité et de fonctionnalités. Cependant, la sélection de ces portefeuilles n’est pas une approbation de leur qualité ou de leur sécurité. Ils sont simplement un bon point de départ pour des démonstrations et des tests.</p>
</div>
<div class="paragraph">
<p>N’oubliez pas que pour qu’une application de portefeuille fonctionne, elle doit avoir accès à vos clés privées, il est donc essentiel que vous ne téléchargiez et n’utilisiez que des applications de portefeuille provenant de sources de confiance. Heureusement, en général, plus une application de portefeuille est populaire, plus elle est susceptible d’être fiable. Néanmoins, il est recommandé d’éviter de "mettre tous vos œufs dans le même panier" et de répartir vos comptes Ethereum sur plusieurs portefeuilles.</p>
</div>
<div class="paragraph">
<p>Voici quelques bons portefeuilles de démarrage :</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">MetaMask</dt>
<dd>
<p>MetaMask est un portefeuille d’extension de navigateur qui s’exécute dans votre navigateur (Chrome, Firefox, Opera ou Brave Browser). Il est facile à utiliser et pratique pour les tests, car il est capable de se connecter à une variété de nœuds Ethereum et de tester des chaînes de blocs. MetaMask est un portefeuille basé sur le Web.</p>
</dd>
<dt class="hdlist1">Jaxx</dt>
<dd>
<p>Jaxx est un portefeuille multiplateforme et multidevise qui fonctionne sur une variété de systèmes d’exploitation, y compris Android, iOS, Windows, macOS, et Linux. C’est souvent un bon choix pour les nouveaux utilisateurs car il est conçu pour la simplicité et la facilité d’utilisation. Jaxx est soit un portefeuille mobile, soit un portefeuille de bureau, selon l’endroit où vous l’installez.</p>
</dd>
<dt class="hdlist1">MyEtherWallet (MEW)</dt>
<dd>
<p>MyEtherWallet est un portefeuille Web qui s’exécute dans n’importe quel navigateur. Il possède de multiples fonctionnalités sophistiquées que nous explorerons dans plusieurs de nos exemples. MyEtherWallet est un portefeuille basé sur le Web.</p>
</dd>
<dt class="hdlist1">Emerald Wallet</dt>
<dd>
<p>Emerald Wallet est conçu pour fonctionner avec la chaîne de blocs Ethereum Classic, mais est compatible avec d’autres chaînes de blocs basées sur Ethereum. C’est une application de bureau à source libre et fonctionne sous Windows, macOS et Linux. Emerald Wallet peut exécuter un nœud complet ou se connecter à un nœud distant public, fonctionnant en mode "léger". Il dispose également d’un outil compagnon pour effectuer toutes les opérations à partir de la ligne de commande.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Nous commencerons par installer MetaMask sur un bureau, mais nous aborderons d’abord brièvement le contrôle et la gestion des clés.</p>
</div>
</div>
<div class="sect2">
<h3 id="control_responsibility">Contrôle et responsabilité</h3>
<div class="paragraph">
<p>Les chaînes de blocs ouvertes comme Ethereum sont importantes car elles fonctionnent comme un système <em>décentralisé</em>. Cela signifie beaucoup de choses, mais un aspect crucial est que chaque utilisateur d’Ethereum peut et doit contrôler ses propres clés privées, qui contrôlent l’accès aux fonds et aux contrats intelligents. Nous appelons parfois la combinaison de l’accès aux fonds et des contrats intelligents un "compte" ou un "portefeuille". Ces termes peuvent devenir assez complexes dans leur fonctionnalité, nous y reviendrons donc plus en détail plus tard. En tant que principe fondamental, cependant, c’est aussi simple qu’une clé privée équivaut à un "compte". Certains utilisateurs choisissent de renoncer au contrôle de leurs clés privées en utilisant un dépositaire tiers, tel qu’un échange en ligne. Dans ce livre, nous vous apprendrons à prendre le contrôle et à gérer vos propres clés privées.</p>
</div>
<div class="paragraph">
<p>Avec le contrôle vient une grande responsabilité. Si vous perdez vos clés privées, vous perdez l’accès à vos fonds et contrats. Personne ne peut vous aider à retrouver l’accès - vos fonds seront verrouillés pour toujours. Voici quelques conseils pour vous aider à gérer cette responsabilité :</p>
</div>
<div class="ulist">
<ul>
<li>
<p>N’improvisez pas la sécurité. Utilisez des approches standardisées.</p>
</li>
<li>
<p>Plus le compte est important (par exemple, plus la valeur des fonds contrôlés est élevée, ou plus les contrats intelligents accessibles sont importants), plus les mesures de sécurité doivent être prises.</p>
</li>
<li>
<p>La sécurité la plus élevée est obtenue à partir d’un appareil isolé, mais ce niveau n’est pas requis pour tous les comptes.</p>
</li>
<li>
<p>Ne stockez jamais votre clé privée en clair, en particulier sous forme numérique. Heureusement, la plupart des interfaces utilisateur actuelles ne vous permettent même pas de voir la clé privée brute.</p>
</li>
<li>
<p>Les clés privées peuvent être stockées sous forme cryptée, en tant que fichier "keystore" numérique. Étant cryptés, ils ont besoin d’un mot de passe pour se déverrouiller. Lorsque vous êtes invité à choisir un mot de passe, rendez-le fort (c’est-à-dire long et aléatoire), sauvegardez-le et ne le partagez pas. Si vous n’avez pas de gestionnaire de mots de passe, écrivez-le et conservez-le dans un endroit sûr et secret. Pour accéder à votre compte, vous avez besoin à la fois du fichier keystore et du mot de passe.</p>
</li>
<li>
<p>Ne stockez aucun mot de passe dans des documents numériques, des photos numériques, des captures d’écran, des lecteurs en ligne, des PDF cryptés, etc. Encore une fois, n’improvisez pas la sécurité. Utilisez un gestionnaire de mots de passe ou un stylo et du papier.</p>
</li>
<li>
<p>Lorsque vous êtes invité à sauvegarder une clé sous forme de séquence de mots mnémoniques, utilisez un stylo et du papier pour effectuer une sauvegarde physique. Ne laissez pas cette tâche "pour plus tard" ; vous oublierez. Ces sauvegardes peuvent être utilisées pour reconstruire votre clé privée au cas où vous perdriez toutes les données enregistrées sur votre système, ou si vous oubliez ou perdez votre mot de passe. Cependant, ils peuvent également être utilisés par des attaquants pour obtenir vos clés privées. Ne les stockez donc jamais sous forme numérique et conservez la copie physique en toute sécurité dans un tiroir ou un coffre-fort verrouillé.</p>
</li>
<li>
<p>Avant de transférer des montants importants (en particulier vers de nouvelles adresses), effectuez d’abord une petite transaction test (par exemple, une valeur inférieure à 1 $) et attendez la confirmation de réception.</p>
</li>
<li>
<p>Lorsque vous créez un nouveau compte, commencez par n’envoyer qu’une petite transaction test à la nouvelle adresse. Une fois que vous avez reçu la transaction de test, essayez de renvoyer à partir de ce compte. Il existe de nombreuses raisons pour lesquelles la création d’un compte peut mal tourner, et si cela a mal tourné, il vaut mieux le découvrir avec une petite perte. Si les tests fonctionnent, tout va bien.</p>
</li>
<li>
<p>Les explorateurs de blocs publics sont un moyen simple de voir indépendamment si une transaction a été acceptée par le réseau. Cependant, cette commodité a un impact négatif sur votre vie privée, car vous révélez vos adresses pour bloquer les explorateurs, qui peuvent vous suivre.</p>
</li>
<li>
<p>N’envoyez pas d’argent à l’une des adresses indiquées dans ce livre. Les clés privées sont répertoriées dans le livre et quelqu’un prendra immédiatement cet argent.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Maintenant que nous avons couvert quelques bonnes pratiques de base pour la gestion des clés et la sécurité, passons au travail avec MetaMask !</p>
</div>
</div>
<div class="sect2">
<h3 id="installing_MetaMask">Premiers pas avec MetaMask</h3>
<div class="paragraph">
<p>Ouvrez le navigateur Google Chrome et accédez à <a href="https://chrome.google.com/webstore/category/extensions" class="bare">https://chrome.google.com/webstore/category/extensions</a>.</p>
</div>
<div class="paragraph">
<p>Recherchez "MetaMask" et cliquez sur le logo d’un renard. Vous devriez voir quelque chose comme le résultat affiché dans <a href="#metamask_download">La page de détail de l’extension MetaMask Chrome</a>.</p>
</div>
<div id="metamask_download" class="imageblock">
<div class="content">
<img src="images/metamask_download.png" alt="Page de détails du métamasque">
</div>
<div class="title">Figure 1. La page de détail de l’extension MetaMask Chrome</div>
</div>
<div class="paragraph">
<p>Il est important de vérifier que vous téléchargez la véritable extension MetaMask, car parfois les gens sont capables de passer furtivement des extensions malveillantes au-delà des filtres de Google. Le vrai:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Affiche l’ID nkbihfbeogaeaoehlefnkodbefgpgknn dans la barre d’adresse</p>
</li>
<li>
<p>Est offert par <a href="https://metamask.io" class="bare">https://metamask.io</a></p>
</li>
<li>
<p>A plus de 1 500 avis</p>
</li>
<li>
<p>A plus de 1 000 000 d’utilisateurs</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Une fois que vous avez confirmé que vous recherchez la bonne extension, cliquez sur "Ajouter à Chrome" pour l’installer.</p>
</div>
<div class="sect3">
<h4 id="using_MetaMask">Création d’un portefeuille</h4>
<div class="paragraph">
<p>Une fois MetaMask installé, vous devriez voir une nouvelle icône (la tête d’un renard) dans la barre d’outils de votre navigateur. Cliquez dessus pour commencer. Il vous sera demandé d’accepter les termes et conditions puis de créer votre nouveau portefeuille Ethereum en saisissant un mot de passe (voir <a href="#metamask_password">La page de mot de passe de l’extension MetaMask Chrome</a>).</p>
</div>
<div id="metamask_password" class="imageblock">
<div class="content">
<img src="images/metamask_password.png" alt="Page de mot de passe du métamasque">
</div>
<div class="title">Figure 2. La page de mot de passe de l’extension MetaMask Chrome</div>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<div class="title">Tip</div>
</td>
<td class="content">
<div class="paragraph">
<p>Le mot de passe contrôle l’accès à MetaMask, de sorte qu’il ne peut être utilisé par personne ayant accès à votre navigateur.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Une fois que vous avez défini un mot de passe, MetaMask générera un portefeuille pour vous et vous montrera un <em>mnémonique de sauvegarde</em> composé de 12 mots anglais (voir <a href="#metamask_mnemonic">La sauvegarde mnémonique de votre portefeuille, créée par MetaMask</a>). Ces mots peuvent être utilisés dans n’importe quel portefeuille compatible pour récupérer l’accès à vos fonds si quelque chose arrivait à MetaMask ou à votre ordinateur. Vous n’avez pas besoin du mot de passe pour cette récupération ; les 12 mots suffisent.</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<div class="title">Tip</div>
</td>
<td class="content">
<div class="paragraph">
<p>Sauvegardez votre mnémonique (12 mots) sur papier, deux fois. Conservez les deux sauvegardes papier dans deux emplacements sécurisés distincts, tels qu’un coffre-fort résistant au feu, un tiroir verrouillé ou un coffre-fort. Traitez les sauvegardes papier comme de l’argent de valeur équivalente à ce que vous stockez dans votre portefeuille Ethereum. Toute personne ayant accès à ces mots peut y accéder et voler votre argent.</p>
</div>
</td>
</tr>
</table>
</div>
<div id="metamask_mnemonic" class="imageblock">
<div class="content">
<img src="images/metamask_mnemonic.png" alt="Page Mnémonique MetaMask">
</div>
<div class="title">Figure 3. La sauvegarde mnémonique de votre portefeuille, créée par MetaMask</div>
</div>
<div class="paragraph">
<p>Une fois que vous avez confirmé que vous avez stocké le mnémonique en toute sécurité, vous pourrez voir les détails de votre compte Ethereum, comme indiqué dans <a href="#metamask_account">Votre compte Ethereum dans MetaMask</a>.</p>
</div>
<div id="metamask_account" class="imageblock">
<div class="content">
<img src="images/metamask_account.png" alt="Page de compte MetaMask">
</div>
<div class="title">Figure 4. Votre compte Ethereum dans MetaMask</div>
</div>
<div class="paragraph">
<p>La page de votre compte affiche le nom de votre compte ("Account 1" par défaut), une adresse Ethereum (0x9E713... dans l’exemple), et une icône colorée pour vous aider à distinguer visuellement ce compte des autres comptes. En haut de la page du compte, vous pouvez voir sur quel réseau Ethereum vous travaillez actuellement ("Main Network" dans l’exemple).</p>
</div>
<div class="paragraph">
<p>Toutes nos félicitations ! Vous avez configuré votre premier portefeuille Ethereum.</p>
</div>
</div>
<div class="sect3">
<h4 id="switching_networks">Changer le réseau</h4>
<div class="paragraph">
<p>Comme vous pouvez le voir sur la page du compte MetaMask, vous pouvez choisir entre plusieurs réseaux Ethereum. Par défaut, MetaMask essaiera de se connecter au réseau principal. Les autres choix sont des réseaux de test publics, tout nœud Ethereum de votre choix ou des nœuds exécutant des chaînes de blocs privées sur votre propre ordinateur (localhost) :</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Réseau principal Ethereum</dt>
<dd>
<p>La principale chaîne de blocs publique Ethereum. Véritable ETH, valeur réelle et conséquences réelles.</p>
</dd>
<dt class="hdlist1">Réseau de test Ropsten</dt>
<dd>
<p>Chaîne de blocs et réseau de test public Ethereum. l’ETH sur ce réseau n’a aucune valeur.</p>
</dd>
<dt class="hdlist1">Réseau de test Kovan</dt>
<dd>
<p>Chaîne de blocs et réseau de test public Ethereum utilisant le protocole de consensus Aura avec preuve d’autorité (signature fédérée). ETH sur ce réseau n’a aucune valeur. Le réseau de test Kovan est uniquement pris en charge par Parity. D’autres clients Ethereum utilisent le protocole de consensus Clique, qui a été proposé plus tard, pour la preuve de la vérification basée sur l’autorité.</p>
</dd>
<dt class="hdlist1">Réseau de test Rinkeby</dt>
<dd>
<p>Chaîne de blocs et réseau de test public Ethereum, utilisant le protocole de consensus Clique avec preuve d’autorité (signature fédérée). ETH sur ce réseau n’a aucune valeur.</p>
</dd>
<dt class="hdlist1">Localhost 8545</dt>
<dd>
<p>Se connecte à un nœud exécuté sur le même ordinateur que le navigateur. Le nœud peut faire partie de n’importe quelle chaîne de blocs publique (principale ou testnet) ou d’un testnet privé.</p>
</dd>
<dt class="hdlist1">RPC personnalisé</dt>
<dd>
<p>vous permet de connecter MetaMask à n’importe quel nœud avec une interface d’appel de procédure distante (RPC) compatible Geth. Le nœud peut faire partie de n’importe quelle chaîne de blocs publique ou privée.</p>
</dd>
</dl>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Votre portefeuille MetaMask utilise la même clé privée et la même adresse Ethereum sur tous les réseaux auxquels il se connecte. Cependant, votre solde d’adresses Ethereum sur chaque réseau Ethereum sera différent. Vos clés peuvent contrôler l’ether et les contrats sur Ropsten, par exemple, mais pas sur le réseau principal.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="getting_test_eth">Obtenir de l’ether de test</h4>
<div class="paragraph">
<p>Votre première tâche est de financer votre portefeuille. Vous ne ferez pas cela sur le réseau principal car l’ether réel coûte de l’argent et sa manipulation nécessite un peu plus d’expérience. Pour l’instant, vous allez charger votre portefeuille avec de l’ether testnet.</p>
</div>
<div class="paragraph">
<p>Passez MetaMask au <em>Réseau test Ropsten</em>. Cliquez sur Deposit, puis sur Ropsten Test Faucet. MetaMask ouvrira une nouvelle page Web, comme indiqué dans <a href="#metamask_ropsten_faucet">MetaMask et le robinet du réseau test Ropsten</a>.</p>
</div>
<div id="metamask_ropsten_faucet" class="imageblock">
<div class="content">
<img src="images/metamask_ropsten_faucet.png" alt="MetaMask et le robinet du réseau test Ropsten">
</div>
<div class="title">Figure 5. MetaMask et le robinet du réseau test Ropsten</div>
</div>
<div class="paragraph">
<p>Vous remarquerez peut-être que la page Web contient déjà l’adresse Ethereum de votre portefeuille MetaMask. MetaMask intègre les pages Web compatibles Ethereum avec votre portefeuille MetaMask et peut "voir" les adresses Ethereum sur la page Web, vous permettant, par exemple, d’envoyer un paiement à une boutique en ligne affichant une adresse Ethereum. MetaMask peut également remplir la page Web avec l’adresse de votre propre portefeuille en tant qu’adresse de destinataire si la page Web le demande. Sur cette page, l’application du robinet demande à MetaMask une adresse de portefeuille à laquelle envoyer de l’ether de test.</p>
</div>
<div class="paragraph">
<p>Cliquez sur le bouton vert "demander 1 ether au robinet". Vous verrez un ID de transaction apparaître dans la partie inférieure de la page. L’application robinet ou "faucet" a créé une transaction, un paiement qui vous est destiné. L’ID de transaction ressemble à ceci :</p>
</div>
<div id="faucet_tx_id" class="listingblock">
<div class="content">
<pre>0x7c7ad5aaea6474adccf6f5c5d6abed11b70a350fbc6f9590109e099568090c57</pre>
</div>
</div>
<div class="paragraph">
<p>Dans quelques secondes, la nouvelle transaction sera exploitée par les mineurs de Ropsten et votre portefeuille MetaMask affichera un solde de 1 ETH. Cliquez sur l’ID de transaction et votre navigateur vous amènera à un <em>explorateur de bloc</em>, qui est un site Web qui vous permet de visualiser et d’explorer des blocs, des adresses et des transactions. MetaMask utilise <a href="https://etherscan.io/">Explorateur de blocs Etherscan</a>, l’un des explorateurs de blocs Ethereum les plus populaires. La transaction contenant le paiement du Ropsten Test Faucet est affichée dans <a href="#ropsten_block_explorer">Explorateur de blocs Ropsten sur Etherscan</a>.</p>
</div>
<div id="ropsten_block_explorer" class="imageblock">
<div class="content">
<img src="images/ropsten_block_explorer.png" alt="Explorateur de blocs Ropsten sur Etherscan">
</div>
<div class="title">Figure 6. Explorateur de blocs Ropsten sur Etherscan</div>
</div>
<div class="paragraph">
<p>La transaction a été enregistrée sur la chaîne de blocs Ropsten et peut être consultée à tout moment par n’importe qui, simplement en recherchant l’ID de transaction, ou <a href="http://bit.ly/2Q860Wk">en visitant le lien</a>.</p>
</div>
<div class="paragraph">
<p>Essayez de visiter ce lien ou de saisir le hachage de la transaction sur le site Web <em>ropsten.etherscan.io</em> pour le voir par vous-même.</p>
</div>
</div>
<div class="sect3">
<h4 id="sending_eth_MetaMask">Envoi d’ether depuis MetaMask</h4>
<div class="paragraph">
<p>Une fois que vous avez reçu votre premier test d’ether du Ropsten Test Faucet, vous pouvez expérimenter l’envoi d’ether en essayant d’en renvoyer au robinet. Comme vous pouvez le voir sur la page Ropsten Test Faucet, il existe une option pour "donner" 1 ETH au robinet. Cette option est disponible pour qu’une fois que vous avez terminé les tests, vous puissiez retourner le reste de votre ether de test, afin que quelqu’un d’autre puisse l’utiliser ensuite. Même si l’ether de test n’a aucune valeur, certaines personnes l’accumulent, ce qui rend difficile pour tout le monde d’utiliser les réseaux de test. L’accumulation de l’ether de test est mal vue !</p>
</div>
<div class="paragraph">
<p>Heureusement, nous ne sommes pas des accumulateurs d’ether de test. Cliquez sur le bouton orange "1 ether" pour dire à MetaMask de créer une transaction payant le robinet 1 ether. MetaMask préparera une transaction et ouvrira une fenêtre avec la confirmation, comme indiqué dans <a href="#send_to_faucet">Envoi de 1 ether au robinet</a>.</p>
</div>
<div id="send_to_faucet" class="imageblock">
<div class="content">
<img src="images/send_to_faucet.png" alt="Envoi d'1 ether au robinet">
</div>
<div class="title">Figure 7. Envoi de 1 ether au robinet</div>
</div>
<div class="paragraph">
<p>Oups ! Vous avez probablement remarqué que vous ne pouvez pas terminer la transaction - MetaMask indique que vous avez un solde insuffisant. À première vue, cela peut sembler déroutant : vous avez 1 ETH, vous voulez envoyer 1 ETH, alors pourquoi MetaMask dit-il que vous avez des fonds insuffisants ?</p>
</div>
<div class="paragraph">
<p>La réponse est à cause du coût de <em>gaz</em>. Chaque transaction Ethereum nécessite le paiement d’une redevance, qui est perçue par les mineurs pour valider la transaction. Les frais d’Ethereum sont facturés dans une monnaie virtuelle appelée gaz. Vous payez le gaz avec de l’ether, dans le cadre de la transaction.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Des frais sont également exigés sur les réseaux de test. Sans frais, un réseau de test se comporterait différemment du réseau principal, ce qui en ferait une plate-forme de test inadéquate. Les frais protègent également les réseaux de test des attaques DoS et des contrats mal construits (par exemple, des boucles infinies), tout comme ils protègent le réseau principal.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Lorsque vous avez envoyé la transaction, MetaMask a calculé le prix moyen du gaz des récentes transactions réussies à 3 gwei, ce qui signifie gigawei. Wei est la plus petite <span class="keep-together">subdivision</span> de la monnaie ether, comme nous l’avons vu dans <a href="#ether_units">L’ether comme unité monétaire</a>. La limite de gaz est fixée au prix de l’envoi d’une transaction de base, soit 21 000 unités de gaz. Par conséquent, le montant maximum d’ETH que vous dépenserez est de 3 * 21 000 gwei = 63 000 gwei = 0,000063 ETH. (Sachez que les prix moyens du gaz peuvent fluctuer, car ils sont principalement déterminés par les mineurs. Nous verrons dans un chapitre ultérieur comment vous pouvez augmenter/diminuer votre limite de gaz pour vous assurer que votre transaction a la priorité si nécessaire.)</p>
</div>
<div class="paragraph">
<p>Tout cela pour dire : faire une transaction à 1 ETH coûte 1,000063 ETH. MetaMask arrondit de manière confuse au <em>plancher</em> d'1 ETH lors de l’affichage du total, mais le montant réel dont vous avez besoin est de 1,000063 ETH et vous n’avez que 1 ETH. Cliquez sur Reject pour annuler cette transaction.</p>
</div>
<div class="paragraph">
<p>Prenons un peu plus d’ether de test ! Cliquez à nouveau sur le bouton vert "request 1 ether from the faucet" et attendez quelques secondes. Ne vous inquiétez pas, le robinet devrait avoir beaucoup d’ether et vous en donnera plus si vous le demandez.</p>
</div>
<div class="paragraph">
<p>Une fois que vous avez un solde de 2 ETH, vous pouvez réessayer. Cette fois, lorsque vous cliquez sur le bouton de don orange "1 ether", vous disposez d’un solde suffisant pour finaliser la transaction. Cliquez sur Soumettre lorsque MetaMask apparaît dans la fenêtre de paiement. Après tout cela, vous devriez voir un solde de 0,999937 ETH car vous avez envoyé 1 ETH au robinet avec 0,000063 ETH en gaz.</p>
</div>
</div>
<div class="sect3">
<h4 id="explore_tx_history">Explorer l’historique des transactions d’une adresse</h4>
<div class="paragraph">
<p>Vous êtes maintenant devenu un expert dans l’utilisation de MetaMask pour envoyer et recevoir de l’ether de test. Votre portefeuille a reçu au moins deux paiements et en a envoyé au moins un. Vous pouvez afficher toutes ces transactions à l’aide de l’explorateur de blocs <em>ropsten.etherscan.io</em>. Vous pouvez soit copier l’adresse de votre portefeuille et la coller dans la zone de recherche de l’explorateur de blocs, soit demander à MetaMask d’ouvrir la page pour vous. À côté de l’icône de votre compte dans MetaMask, vous verrez un bouton affichant trois points. Cliquez dessus pour afficher un menu d’options liées au compte (voir <a href="#metamask_account_context_menu">Menu contextuel du compte MetaMask</a>).</p>
</div>
<div id="metamask_account_context_menu" class="imageblock">
<div class="content">
<img src="images/metamask_account_context_menu.png" alt="Menu contextuel du compte MetaMask">
</div>
<div class="title">Figure 8. Menu contextuel du compte MetaMask</div>
</div>
<div class="paragraph">
<p>Sélectionnez "View account on Etherscan" pour ouvrir une page Web dans l’explorateur de blocs affichant l’historique des transactions de votre compte, comme indiqué dans <a href="#block_explorer_account_history">Historique des transactions d’une adresse sur Etherscan</a>.</p>
</div>
<div id="block_explorer_account_history" class="imageblock">
<div class="content">
<img src="images/block_explorer_account_history.png" alt="Historique des transactions d’adresses sur Etherscan">
</div>
<div class="title">Figure 9. Historique des transactions d’une adresse sur Etherscan</div>
</div>
<div class="paragraph">
<p>Ici, vous pouvez voir l’historique complet des transactions de votre adresse Ethereum. Il montre toutes les transactions enregistrées sur la chaîne de blocs Ropsten où votre adresse est l’expéditeur ou le destinataire. Cliquez sur quelques-unes de ces transactions pour voir plus de détails.</p>
</div>
<div class="paragraph">
<p>Vous pouvez explorer l’historique des transactions de n’importe quelle adresse. Jetez un œil à l’historique des transactions de l’adresse Ropsten Test Faucet (indice : il s’agit de l’adresse « expéditeur » répertoriée dans le plus ancien paiement à votre adresse). Vous pouvez voir tout l’ether de test envoyé par le robinet à vous et à d’autres adresses. Chaque transaction que vous voyez peut vous mener à plus d’adresses et plus de transactions. D’ici peu, vous serez perdu dans le labyrinthe de données interconnectées. Les chaînes de blocs publiques contiennent une énorme richesse d’informations, qui peuvent toutes être explorées par programmation, comme nous le verrons dans de futurs exemples.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="intro_world_computer">Présentation de l’ordinateur mondial</h3>
<div class="paragraph">
<p> Vous avez maintenant créé un portefeuille et envoyé et reçu de l’ether. Jusqu’à présent, nous avons traité Ethereum comme une cryptomonnaie. Mais Ethereum est bien plus que cela. En fait, la fonction de cryptomonnaie est subordonnée à la fonction d’Ethereum en tant qu’ordinateur mondial décentralisé. L’ether est destiné à être utilisé pour payer l’exécution de <em>contrats intelligents</em> aussi, qui sont des programmes informatiques qui s’exécutent sur un ordinateur émulé appelé <em>Ethereum Virtual Machine</em> (EVM).</p>
</div>
<div class="paragraph">
<p>L’EVM est un singleton global, ce qui signifie qu’il fonctionne comme s’il s’agissait d’un ordinateur global à instance unique, fonctionnant partout. Chaque nœud du réseau Ethereum exécute une copie locale de l’EVM pour valider l’exécution du contrat, tandis que la chaîne de blocs Ethereum enregistre l’état changeant de cet ordinateur mondial lorsqu’il traite les transactions et les contrats intelligents. Nous en discuterons plus en détail dans <a href="#evm_chapter">[evm_chapter]</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="EOA_contracts">Comptes détenus en externe (EOA ou Externally Owned Accounts) et contrats</h3>
<div class="paragraph">
<p>Le type de compte que vous avez créé dans le portefeuille MetaMask est appelé un <em>compte détenu par une personne externe</em> (EOA ou Externally Owned Accounts). Les comptes détenus en externe sont ceux qui ont une clé privée ; avoir la clé privée signifie contrôler l’accès aux fonds ou aux contrats. Maintenant, vous devinez probablement qu’il existe un autre type de compte. Cet autre type de compte est un <em>compte de contrat</em>. Un compte de contrat a un code de contrat intelligent, ce qu’un simple EOA ne peut pas avoir. De plus, un compte contractuel ne possède pas de clé privée. Au lieu de cela, il est détenu (et contrôlé) par la logique de son code de contrat intelligent : le programme logiciel enregistré sur la chaîne de blocs Ethereum lors de la création du compte de contrat et exécuté par l’EVM.</p>
</div>
<div class="paragraph">
<p>Les contrats ont des adresses, tout comme les EOA. Les contrats peuvent également envoyer et recevoir de l’ether, tout comme les EOA. Cependant, lorsqu’une destination de transaction est une adresse de contrat, cela provoque l’exécution de ce contrat dans l’EVM, en utilisant la transaction et les données de la transaction comme entrée. En plus d’ether, les transactions peuvent contenir des <em>données</em> indiquant quelle fonction spécifique du contrat exécuter et quels paramètres transmettre à cette fonction. De cette façon, les transactions peuvent <em>appeler</em> des fonctions dans les contrats.</p>
</div>
<div class="paragraph">
<p>Notez qu’étant donné qu’un compte de contrat n’a pas de clé privée, il ne peut pas <em>initier</em> une transaction. Seuls les EOA peuvent initier des transactions, mais les contrats peuvent <em>réagir</em> aux transactions en appelant d’autres contrats, en créant des chemins d’exécution complexes. Une utilisation typique de ceci est un EOA envoyant une transaction de demande à un portefeuille de contrats intelligents multisignatures pour envoyer des ETH à une autre adresse. Un modèle de programmation DApp typique consiste à ce que le contrat A appelle le contrat B afin de maintenir un état partagé entre les utilisateurs du contrat A.</p>
</div>
<div class="paragraph">
<p>Dans les prochaines sections, nous rédigerons notre premier contrat. Vous apprendrez ensuite comment créer, financer et utiliser ce contrat avec votre portefeuille MetaMask et tester l’ether sur le réseau de test Ropsten.</p>
</div>
</div>
<div class="sect2">
<h3 id="exemple_contrat_simple">Un contrat simple : un robinet test d’ether</h3>
<div class="paragraph">
<p> Ethereum possède de nombreux langages de haut niveau différents, qui peuvent tous être utilisés pour écrire un contrat et produire un code intermédiaire ou bytecode EVM. Vous pouvez lire sur bon nombre des plus importantes et des plus intéressantes dans <a href="#high_level_languages">[high_level_languages]</a>. Un langage de haut niveau est de loin le choix dominant pour la programmation de contrats intelligents : Solidity. Solidity a été créé par le Dr Gavin Wood, le co-auteur de ce livre, et est devenu le langage le plus largement utilisé dans Ethereum (et au-delà). Nous utiliserons Solidity pour rédiger notre premier contrat.</p>
</div>
<div class="paragraph">
<p>Pour notre premier exemple (<a href="#solidity_faucet_example">Faucet.sol: Un contrat Solidity mettant en place un robinet</a>), nous allons écrire un contrat qui contrôle un <em>robinet</em>. Vous avez déjà utilisé un robinet pour obtenir de l’ether de test sur le réseau de test de Ropsten. Un robinet est une chose relativement simple: il donne de l’ether à toute adresse qui le demande et peut être rempli périodiquement. Vous pouvez implémenter un robinet comme un portefeuille contrôlé par un humain ou un serveur Web.</p>
</div>
<div id="solidity_faucet_example" class="exampleblock">
<div class="title">Example 1. Faucet.sol: Un contrat Solidity mettant en place un robinet</div>
<div class="content">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-solidity" data-lang="solidity">// Identifiant de licence SPDX : CC-BY-SA-4.0
// Version du compilateur Solidity pour lequel ce programme a été écrit
pragma solidity 0.6.4;
// Notre premier contrat est un faucet !
contract Faucet {
// Accepte tout montant entrant
receive() external payable {}
// Donnez de l'éther à quiconque demande
function withdraw(uint withdraw_amount) public {
// Limiter le montant du retrait
require(withdraw_amount <= 100000000000000000);
// Envoie le montant à l'adresse qui l'a demandé
msg.sender.transfer(withdraw_amount);
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Vous trouverez tous les exemples de code pour ce livre dans le sous-répertoire <em>code</em> de <a href="https://github.com/ethereumbook/ethereumbook/">le référentiel GitHub du livre</a>. Concrètement, notre contrat <em>Faucet.sol</em> est en:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>code/Solidity/Faucet.sol</pre>
</div>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Il s’agit d’un contrat très simple, à peu près aussi simple que possible. Il s’agit également d’un contrat <em>faussé</em>, démontrant un certain nombre de mauvaises pratiques et de failles de sécurité. Nous apprendrons en examinant tous ses défauts dans les sections suivantes. Mais pour l’instant, regardons ce que fait ce contrat et comment il fonctionne, ligne par ligne. Vous remarquerez rapidement que de nombreux éléments de Solidity sont similaires aux langages de programmation existants, tels que JavaScript, Java ou C++.</p>
</div>
<div class="paragraph">
<p>La première ligne est un commentaire :</p>
</div>
<div id="comment" class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-solidity" data-lang="solidity">// Notre premier contrat est un robinet (faucet) !</code></pre>
</div>
</div>
<div class="paragraph">
<p>Les commentaires sont destinés à être lus par des humains et ne sont pas inclus dans le code intermédiaire exécutable de l’EVM. Nous les plaçons généralement sur la ligne avant le code que nous essayons d’expliquer, ou parfois sur la même ligne. Les commentaires commencent par deux barres obliques : <code>//</code>. Tout, depuis la première barre oblique jusqu’à la fin de cette ligne, est traité comme une ligne vide et ignoré.</p>
</div>