-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
696 lines (604 loc) · 26.2 KB
/
index.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
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang=""> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang=""> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9" lang=""> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang=""> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Atelier Crypto !</title>
<!-- Behavioral Meta Data -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<script src="js/vendor/w3.js"></script>
<script src="js/vendor/reveal.js"></script>
<link rel="stylesheet" href="./css/reveal.css">
<link rel="stylesheet" href="./css/theme/solarized.css">
<link rel="stylesheet" href="./lib/css/zenburn.css">
<link rel="stylesheet" href="css/main.css">
<style>
.moreinfo{
font-size: 0.3em
}
</style>
</head>
<body>
<!--[if lt IE 8]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<div class="reveal">
<div class="slides">
<section>
<img data-src="./img/bricodeurstransp-200px.png">
<h2>Créer sa propre crypto-monnaie !</h2>
<h5>A partir de LiteCoin</h5>
<p><i>Basé sur le tutoriel réalisé par <a href="https://www.youtube.com/channel/UCgnaLsp9LBdRvJDppY59cvw">Aqua</a></i></p>
</section>
<section>
<section>
<h2>Configuration de l'environnement</h2>
</section>
<section>
<h2>OS</h2>
<p>
Ubuntu 14.04 +
</p>
<p>
Pour aller plus vite, image à importer dans virtualbox
<a href="http://cryptotux.org">Cryptotux</a>
</p>
</section>
<section>
<h2>Installation des dépendances</h2>
<p> <i>déjà installés sur Cryptotux</i>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
#indispensable git
sudo apt-get install git
#outils
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl1.0-dev libevent-dev bsdmainutils python3 software-properties-common
#librairie boost. Alternative plus complete : sudo apt-get install libboost-all-dev
sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev
</code></pre>
</section>
<section>
<h2>Installation des dépendances</h2>
<p> <i>déjà installés sur Cryptotux</i>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
#depot bitcoin pour récupérer une version précédent de libdb
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev
#Optionnel
sudo apt-get install libminiupnpc-dev libzmq3-dev
#librairies graphiques (Qt5)
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
</code></pre>
</section>
<section>
<h2>
Repo Github
</h2>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
git clone -b 0.8 https://github.com/litecoin-project/litecoin.git
</code></pre>
</section>
<section>
<h2>corrections problème vieux paquet</h2>
<p>
src/rpcrawtransaction.cpp
<br>ligne 242
<br>Enlever : & et const
</p>
<pre><code data-trim data-noescape class="c++ hljs">
const CScriptID& hash = boost::get<<mark> const</mark>CScriptID<mark>&</mark>>(address);
</code></pre>
</section>
<section>
<h2>
Choisir un nom
</h2>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
find . -type f -print0 | xargs -0 sed -i 's/litecoin/bricocoin/g'
find . -type f -print0 | xargs -0 sed -i 's/Litecoin/Bricocoin/g'
find . -type f -print0 | xargs -0 sed -i 's/LiteCoin/BricoCoin/g'
find . -type f -print0 | xargs -0 sed -i 's/LITECOIN/BRICOCOIN/g'
find . -type f -print0 | xargs -0 sed -i 's/LTC/BRC/g'
</code></pre>
<p>A lancer depuis le répertoir src/. Vous pouvez remplacer BriCoin par le nom de votre choix.</p>
</section>
<section>
<h2>Compilation <span>(test)</span> </h2>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make -f makefile.unix
</code></pre>
</section>
<section>
<p>Vous devriez maintenant avoir un executable : bricocoind (ou autre nom)</p>
</section>
<section>
</section>
</section>
<section>
<section>
<h2>Configuration</h2>
</section>
<section>
<h2>PORT P2P</h2>
<p>#/home/USER/BricoCoin/src/</p>
<p>On remplace les ports de litecoin 9333/9332 par 6333/6332 (aléatoire)</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
find . -type f -print0 | xargs -0 sed -i 's/9333/6333/g'
find . -type f -print0 | xargs -0 sed -i 's/9332/6332/g'
</code></pre>
</section>
<section>
<h2>Préfixe personalisé des adresses BricoCoin</h2>
<p>fichier base58.h <br>ligne 275</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
PUBKEY_ADDRESS = <mark>25</mark>, // Bricocoin addresses start with <mark>B</mark>
PUBKEY_ADDRESS_TEST = <mark>85</mark>,
</code></pre>
<p>La liste des codes est <a href="https://en.bitcoin.it/wiki/List_of_address_prefixes">ici</a></p>
</section>
<section>
<h2>Création des clefs publics / privées</h2>
<p>#/home/USER/BricoCoin/</p>
<p>A placer hors du dossier, en local</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
openssl ecparam -genkey -name secp256k1 -out alertkey.pem
openssl ec -in alertkey.pem -text > alertkey.hex
openssl ecparam -genkey -name secp256k1 -out genesiscoinbase.pem
openssl ec -in genesiscoinbase.pem -text > genesiscoinbase.hex
</code></pre>
<p>* <a href="https://en.bitcoin.it/wiki/Secp256k1">secp245k1</a></p>
</section>
<section>
<h2>Placer la clef public de alert.HEX dans alert.cpp</h2>
<p>En supprimant les ":"</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
static const char* pszTestKey = "<mark>04d67f78ca51075ba965efe950ce4fac72a4a2f2109c0fd0f493418e7a877b8b1b51355fe1660ead9c05d9a7ff0dceba0d287b906ff78d059a7dd9f075a1283ef9</mark>";
</code></pre>
</section>
<section>
<h2>Placer la clef public de genesiscoinbase dans main.cpp</h2>
<p>ligne 2788</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
txNew.vout[0].scriptPubKey = CScript() << ParseHex("<mark>04d67f78ca51075ba965efe950ce4fac72a4a2f2109c0fd0f493418e7a877b8b1b51355fe1660ead9c05d9a7ff0dceba0d287b906ff78d059a7dd9f075a1283ef9</mark>") << OP_CHECKSIG;
</code></pre>
</section>
<section>
<h2>PeerMagic (main)</h2>
<p>ligne 3082 de main.cpp</p>
<p>(Choix aléatoires)</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
unsigned char pchMessageStart[4] = { 0xf<mark>a</mark>, 0xc<mark>2</mark> , 0xb<mark>1</mark>, 0xd<mark>b</mark> }; // BricoCoin: increase each by adding 2 to bitcoin's value.
</code></pre>
<p>PeerMagic: "identifiant" qui permet d'annoncer que le message qu'on envoie concerne telle blockchain</p>
<p>Plus d'info : <a href="https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery">lien 1</a> <a href="https://coinlogic.wordpress.com/2014/03/09/the-bitcoin-protocol-4-network-messages-1-version/">lien 2</a> <a href="https://en.bitcoin.it/wiki/Protocol_specification#Message_structure">lien 3</a></p>
</section>
<!--<section>-->
<!--<h2>PeerMagic (test net)</h2>-->
<!--<p>ligne 2745 de main.cpp</p>-->
<!--<p>(Choix aléatoires)</p>-->
<!--<pre><code data-trim data-noescape class="shell hljs livecodeserver">-->
<!--if (fTestNet)-->
<!--{-->
<!--pchMessageStart[0] = 0xf<mark>2</mark>;-->
<!--pchMessageStart[1] = 0xc<mark>3</mark>;-->
<!--pchMessageStart[2] = 0xb<mark>7</mark>;-->
<!--pchMessageStart[3] = 0xd<mark>4</mark>;-->
<!--</code></pre>-->
<!--<p>PeerMagic: "identifiant" qui permet d'annoncer que le message qu'on envoie concerne telle blockchain</p>-->
<!--<p>Plus d'info : <a href="https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery">lien 1</a> <a href="https://coinlogic.wordpress.com/2014/03/09/the-bitcoin-protocol-4-network-messages-1-version/">lien 2</a> <a href="https://en.bitcoin.it/wiki/Protocol_specification#Message_structure">lien 3</a></p>-->
<!--</section>-->
<section>
<h2>Suppression des DNS hardcodés</h2>
<p>
ligne 1176 de net.cpp
</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
static const char *strMainNetDNSSeed[][2] = {
{NULL, NULL}
};
static const char *strTestNetDNSSeed[][2] = {
{NULL, NULL}
};
</code></pre>
</section>
<section>
<h2>Suppression des IPs hardcodés</h2>
<p>
lign 1226 de net.cpp
</p>
<p>
laisser "0x0" pour éviter une erreur de compilation
</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
unsigned int pnSeed[] =
{
<mark>0x0</mark>
};
</code></pre>
</section>
<section>
<h3>
Maintenant on est sûr qu'il n'essayera pas de se connecter au réseau LiteCoin !
</h3>
</section>
</section>
<section>
<section>
<h2>Paramètres de la BlockChain !</h2>
<p>Avant de faire cette partie, testez la compilation à nouveau. </p>
</section>
<section>
<h2>Proof of work</h2>
<p>main.cpp ligne 1090</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
int64 static GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = <mark>10</mark> * COIN;
// Subsidy is cut in half every 10 blocks, which will occur approximately every 20 min
nSubsidy >>= (nHeight / <mark>10</mark>); // BricoCoin: 10 blocks in ~ 20 minutes
return nSubsidy + nFees;
}
static const int64 nTargetTimespan = <mark>0.007</mark> * 24 * 60 * 60; // BricoCoin : 10 minutes between difficulty adjustments
static const int64 nTargetSpacing = <mark>2</mark> * 60; // BricoCoin: 2 minutes between blocks
</code></pre>
<span class="moreinfo">Sur Bitcoin : remise en question de la difficulté toutes les 2 semaines, avec pour objectif 1 block toutes les 10 minutes ( 14 * 24 * 60 / 10 = 2016 blocks ). <a href="https://en.bitcoin.it/wiki/Difficulty#What_network_hash_rate_results_in_a_given_difficulty.3F"> voir ici </a></span>
</section>
<section>
<h2>Correction</h2>
<p>main.cpp ligne 2787</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
txNew.vout[0].nValue = <mark>10</mark> * COIN;
</code></pre>
</section>
<section>
<h2>Nombre max de BricoCoin dans une transaction</h2>
<p>main.h ligne 55</p>
<p> On choisit le nombre maximal de BricoCoins, calculé à partir de la somme des "subsidy" 10 * 10 + 10 * 10/2 + 10 * 10/4 + 10 * 10/6 + ... ~= 200 </p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
static const int64 MAX_MONEY = <mark>200</mark> * COIN;
</code></pre>
</section>
<section>
<h2>Nombre de blocks avant Maturité</h2>
<p>main.h ligne 58</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
static const int COINBASE_MATURITY = <mark>1</mark>;
</code></pre>
<p>
main.cpp ligne 948
</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
int CMerkleTx::GetBlocksToMaturity() const
{
if (!IsCoinBase())
return 0;
return max(0, (COINBASE_MATURITY+<mark>5</mark>) - GetDepthInMainChain());
}
</code></pre>
</section>
<section>
<h2>Période de réajustement de la difficulté </h2>
<p>main.h ligne 627</p>
<p> 1 block / 2 min sur une période de 10 minutes : 10 / 2 = 5 </p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
static bool AllowFree(double dPriority)
{
// Large (in bytes) low-priority (new, small-coin) transactions
// need a fee.
return dPriority > COIN * <mark>5</mark> / 250;
}
</code></pre>
</section>
<section>
<h2>timeStamp</h2>
<p>main.cpp 2782</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
const char* pszTimestamp = "25/01/2018 Atelier créer sa propre crypto-monnaie";
</code></pre>
</section>
<section>
<h2>timeStamp</h2>
<p>Dans le terminal</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
date +%s
</code></pre>
<p>main.cpp ligne 2794</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
block.nTime = 1515165286;
</code></pre>
</section>
<section>
<h2>Racine de l'arbre de Merkle</h2>
<p>Fusion des noeuds de même niveau en un seul Hash</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make -f makefile.unix
</code></pre>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
./bricocoind
</code></pre>
<p class="moreinfo">
<a href="https://fr.wikipedia.org/wiki/Arbre_de_Merkle">Arbre de Merkle </a>
</p>
</section>
<section>
<h2>Racine de l'arbre de Merkle</h2>
<p>Ouvrir à /home/USER/.bricocoin/debug.log</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
2018-01-25 15:51:57 <mark>7z5cd2bc0f49e58a5587734366a558f78cecec6f9489fdafed3660dad53a3864</mark>
</code></pre>
</section>
<section>
<h2>Racine de l'arbre de Merkle</h2>
<p>main.cpp ligne 2809</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
assert(block.hashMerkleRoot == uint256("0x<mark>7z5cd2bc0f49e58a5587734366a558f78cecec6f9489fdafed3660dad53a3864</mark>"));
</code></pre>
</section>
</section>
<section>
<section>
<h2>Miner le premier block</h2>
</section>
<section>
<h2>Genesis Block</h2>
<p>Code nécessaire pour générer le 1er block</p>
<p>Copiez le !</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
if (true && block.GetHash() != hashGenesisBlock)
{
printf("Searching for genesis block...\n");
// This will figure out a valid hash and Nonce if you're
// creating a different genesis block:
uint256 hashTarget = CBigNum().SetCompact(block.nBits).getuint256();
uint256 thash;
char scratchpad[SCRYPT_SCRATCHPAD_SIZE];
loop
{
#if defined(USE_SSE2)
// Detection would work, but in cases where we KNOW it always has SSE2,
// it is faster to use directly than to use a function pointer or conditional.
#if defined(_M_X64) || defined(__x86_64__) || defined(_M_AMD64) || (defined(MAC_OSX) && defined(__i386__))
// Always SSE2: x86_64 or Intel MacOS X
scrypt_1024_1_1_256_sp_sse2(BEGIN(block.nVersion), BEGIN(thash), scratchpad);
#else
// Detect SSE2: 32bit x86 Linux or Windows
scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad);
#endif
#else
// Generic scrypt
scrypt_1024_1_1_256_sp_generic(BEGIN(block.nVersion), BEGIN(thash), scratchpad);
#endif
if (thash <= hashTarget)
break;
if ((block.nNonce & 0xFFF) == 0)
{
printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str());
}
++block.nNonce;
if (block.nNonce == 0)
{
printf("NONCE WRAPPED, incrementing time\n");
++block.nTime;
}
}
printf("block.nTime = %u \n", block.nTime);
printf("block.nNonce = %u \n", block.nNonce);
printf("block.GetHash = %s\n", block.GetHash().ToString().c_str());
}
</code></pre>
</section>
<section>
<h2>Genesis Block</h2>
<p>ligne 2798</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
if (fTestNet)
{
block.nTime = 1515165286;
block.nNonce = 387357830;
}
<mark>Collez ici</mark>
</code></pre>
</section>
<section>
<h2>Genesis Block</h2>
<p>Compilez</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make -f makefile.unix
</code></pre>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
./bricocoind
</code></pre>
</section>
<section>
<h2>Cherchez les infos du block genesis</h2>
<p>Debug.log</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
2018-01-25 16:00:00 block.nNonce = <mark>2085850195</mark>
2018-01-25 16:00:00 block.getHash = <mark>03454bf05bd73a9dcddcdc43a2d81afb2481e3fbd1c3d43f70e6ecc8dc7ae46c</mark>
</code></pre>
</section>
<section>
<h2>Copiez les ici</h2>
<p>main.cpp ligne 2796</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
block.nNonce = <mark>2085850195</mark>;
</code></pre>
<p>main.cpp ligne 38</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
uint256 hashGenesisBlock("0x<mark>03454bf05bd73a9dcddcdc43a2d81afb2481e3fbd1c3d43f70e6ecc8dc7ae46c</mark>");
</code></pre>
</section>
<section>
<h2>Mise à jour des Points de Sauvegardes</h2>
<p>checkpoints.cpp</p>
<p>copiez le hash et le nTime du genesis block</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
static MapCheckpoints mapCheckpoints =
boost::assign::map_list_of
( 0, uint256(" 0x<mark>03454bf05bd73a9dcddcdc43a2d81afb2481e3fbd1c3d43f70e6ecc8dc7ae46c</mark> "))
<mark>Supprimez le reste</mark>
;
static const CCheckpointData data = {
&mapCheckpoints,
<mark>1515165286 // (block.nTime = 1515165286; (main.cpp ligne 2794) )</mark>, // * UNIX timestamp of last checkpoint block
<mark>0</mark>, // * total number of transactions between genesis and last checkpoint
// (the tx=... number in the SetBestChain debug.log lines)
<mark>1.0</mark> // * estimated number of transactions per day after checkpoint
};
</code></pre>
</section>
<section>
<p>Annulez le hack pour générez le block génésis</p>
<p>main.cpp ligne 2809</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
if ( <mark>false </mark> && block.GetHash() != hashGenesisBlock)
{
printf("Searching for genesis block...\n");
// This will figure out a valid hash and Nonce if you're
// creating a different genesis block:
uint256 hashTarget = CBigNum().SetCompact(block.nBits).getuint256();
uint256 thash;
char scratchpad[SCRYPT_SCRATCHPAD_SIZE];
</code></pre>
</section>
<section>
<h2>Compilation finale !</h2>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make -f makefile.unix
</code></pre>
</section>
</section>
<section>
<section>
<h2>Interface graphique</h2>
</section>
<section>
<p>#/home/USER/bricocoin/</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
qmake
</code></pre>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make
</code></pre>
</section>
<section>
<p>Lancez l'interface</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
./bricocoin-qt
</code></pre>
</section>
</section>
<section>
<section>
<h2>Testez avec votre voisin !</h2>
</section>
<section>
<h2>Pushez sur un hebergeur git</h2>
<ul>
<li>Partagez à votre repo à votre voisin</li>
</ul>
</section>
<section>
<h2>Fichier de conf du server</h2>
<p>#/home/USER/.bricocoin/bricocoin.conf</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
server=1
rpcuser=user
rpcpassword=password
</code></pre>
</section>
<section>
<h2>Fichier de conf d'un peer</h2>
<p>#/home/USER/.bricocoin/bricocoin.conf</p>
<img data-src="./img/wifi-ip.png">
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
addnode=192.168.1.13
</code></pre>
</section>
<section>
<h2>Pour le peer : Compilez !</h2>
<p>#/home/USER/bricocoin/src</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make -f makefile.unix
</code></pre>
<p>#/home/USER/bricocoin/</p>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
qmake
</code></pre>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
make
</code></pre>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
./bricocoin-qt
</code></pre>
</section>
</section>
<section>
<section>
<h2>Commencez à Miner !</h2>
</section>
<section>
<ul>
<li>help</li>
<li>debug window</li>
<li>console</li>
</ul>
<pre><code data-trim data-noescape class="shell hljs livecodeserver">
setgenerate true
</code></pre>
</section>
</section>
<section>
<section>
<h2>Et si on minait tous la même monnaie</h2>
</section>
<section>
<h2>BricoCoin</h2>
<p>
<a href="https://github.com/LesGeeksDuDimanche/bricocoin">https://github.com/LesGeeksDuDimanche/bricocoin</a>
</p>
</section>
</section>
<section>
<section>
<h2>Ressources</h2>
</section>
<section>
<p>
<a href="http://lesbricodeurs.fr/creersaproprecryptomonnaie/">http://lesbricodeurs.fr/creersaproprecryptomonnaie/</a>
</p>
<p>
Autre tuto : <br>
<a href="https://vcoin-project.github.io/cloning-litecoin/">https://vcoin-project.github.io/cloning-litecoin/</a>
</p>
<p>Livre complet de référence : <br>
<a href="https://bitcoinbook.info/wp-content/translations/fr/book.pdf">https://bitcoinbook.info/wp-content/translations/fr/book.pdf</a>
</p>
<p>Pourboires des transactions du réseau bitcoin : <br>
<a href="http://bitcoinfees.com/">http://bitcoinfees.com/</a>
</p>
</section>
<section>
<h2>Définitions</h2>
<iframe frameborder="0" scrolling="no" style="border:0px" src="https://books.google.fr/books?id=X49aCAAAQBAJ&lpg=PT52&ots=fb1JTyF9l7&dq=AllowFree%20bitcoin&hl=fr&pg=PT55&output=embed" width=500 height=500></iframe>
</section>
</section>
</div>
</div>
<!--// ressources-->
<script src="js/main.js"></script>
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
<script>
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create','UA-64227504-1','auto');ga('send','pageview');
</script>
</body>
</html>