Création de sa propre cryptomonnaie basé sur Litecoin v0.15 : Cubecoin

Création de sa propre cryptomonnaie basé sur Litecoin v0.15 : Cubecoin

Lien : https://www.hackster.io/pjdecarlo/how-to-make-a-cryptocurrency-using-litecoin-v0-15-source-fb5e82
Distribution de travail : Lubuntu 18.04

1/ Mise-à-jour du système d’exploitation.


util01@station01:~$ sudo apt-get update && sudo apt-get upgrade

2/ Installation des paquets de développement.


util01@station01:~$ sudo apt-get install build-essential git libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb-dev libdb++-dev libminiupnpc-dev libzmq3-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

3/ Installation de ‘libdb4.8’.


util01@station01:~$ sudo add-apt-repository ppa:bitcoin/bitcoin
util01@station01:~$ sudo apt-get update
util01@station01:~$ sudo apt-get install -y libdb4.8-dev libdb4.8++-dev

4/ Création du répertoire de travail.


util01@station01:~$ mkdir CUBECOIN
util01@station01:~$ cd CUBECOIN/
util01@station01:~/CUBECOIN$

5/ Téléchargement du code source de Litecoin.


util01@station01:~/CUBECOIN$ git clone https://github.com/litecoin-project/litecoin.git cubecoin


util01@station01:~/CUBECOIN$ cd cubecoin/
util01@station01:~/CUBECOIN/cubecoin$

6/ Récupération de la version 0.15.1.


util01@station01:~/CUBECOIN/litecoin$ git checkout tags/v0.15.1
util01@station01:~/CUBECOIN/litecoin$ git checkout -b v0.15.1

7/ Création de la branche ‘cubecoin’.


util01@station01:~/CUBECOIN/cubecoin$ git checkout -b cubecoin

8/ Renommage de la monnaie : Litecoin en Cubecoin.


util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/Litecoin/Cubecoin/g" {} \;
util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/LiteCoin/CubeCoin/g" {} \;
util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/LTC/CC/g" {} \;
util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/litecoin/cubecoin/g" {} \;
util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/litecoind/cubecoind/g" {} \;

9/ Renommage du code la monnaie.


util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/lites/cubes/g" {} \;
util01@station01:~/CUBECOIN/cubecoin$ find ./ -type f -readable -writable -exec sed -i "s/photons/atoms/g" {} \;

10/ Changement du ‘numéro magic’ dans les messages ‘pch’.

http://www.asciitable.com/

c = 63
u = 75
b = 62
e = 65

Ouvrir :

src/chainparams.cpp

Chercher :
# line 104


pchMessageStart[0] = 0xfb;
pchMessageStart[1] = 0xc0;
pchMessageStart[2] = 0xb6;
pchMessageStart[3] = 0xdb;

Remplacer par :

pchMessageStart[0] = 0x63;
pchMessageStart[1] = 0x75;
pchMessageStart[2] = 0x62;
pchMessageStart[3] = 0x65;

11/ Mise-à-jour de la valeur de ‘base58Prefixes’.

https://en.bitcoin.it/wiki/List_of_address_prefixes

Decimal version Leading symbol Address length
28 C 34

Ouvrir :

src/chainparams.cpp

Chercher :

base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,48);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5);
base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,50);
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,176);
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E};
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4};

Remplacer par :

base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,28);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5);
base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,50);
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,28);
base58Prefixes[EXT_PUBLIC_KEY] = {0xff, 0x88, 0xB2, 0x1E};
base58Prefixes[EXT_SECRET_KEY] = {0xff, 0x88, 0xAD, 0xE4};


util01@station01:~/CUBECOIN/cubecoin$ cd ..
util01@station01:~/CUBECOIN$

12/ Installation de la dépendance pour GenesisH0.


util01@station01:~/CUBECOIN$ sudo apt install python-pip
util01@station01:~/CUBECOIN$ sudo pip install scrypt construct==2.5.2

13/ Installation de GenesisH0.


util01@station01:~/CUBECOIN$ git clone https://github.com/lhartikk/GenesisH0.git


util01@station01:~/CUBECOIN$ cd GenesisH0/
util01@station01:~/CUBECOIN/GenesisH0$

14/ Récupération du timestamp actuel.


util01@station01:~/CUBECOIN/GenesisH0$ date +%s
1594148555

15/ Création du ‘Genesis Block’ et du ‘Merkle Root’ : 1ère passe.


util01@station01:~/CUBECOIN/GenesisH0$ python genesis.py -a scrypt -z "Blockchain for CubeCoin" -p "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9" -t 1594148555 -n 2084524493


04ffff001d010417426c6f636b636861696e20666f722043756265436f696e
algorithm: scrypt
merkle hash: 75c043ef2b32fdb1625beb798e10f03561a07492809fc5021865fe342365c25f
pszTimestamp: Blockchain for CubeCoin
pubkey: 040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9
time: 1594148555
bits: 0x1e0ffff0
Searching for genesis hash..
2539.0 hash/s, estimate: 469.9 hgenesis hash found!
nonce: 2085137478
genesis hash: ef6cdb4ebe56effe9e0292470d3d4f42ac53f7e86091883f721d1f6838cba6f5

16/ Création du ‘Genesis Block’ et du ‘Merkle Root’ : 2ème passe.


util01@station01:~/CUBECOIN/GenesisH0$ python genesis.py -a scrypt -z "Blockchain for CubeCoin" -p "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9" -t 1594148555 -n 2085137478


04ffff001d010417426c6f636b636861696e20666f722043756265436f696e
algorithm: scrypt
merkle hash: 75c043ef2b32fdb1625beb798e10f03561a07492809fc5021865fe342365c25f
pszTimestamp: Blockchain for CubeCoin
pubkey: 040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9
time: 1594148555
bits: 0x1e0ffff0
Searching for genesis hash..
genesis hash found!
nonce: 2085137478
genesis hash: ef6cdb4ebe56effe9e0292470d3d4f42ac53f7e86091883f721d1f6838cba6f5

17/ Modification de ‘chainparams.cpp’ : Timestamp, Genesis Block, Merkle Root, nonce.

Ouvrir :

src/chainparams.cpp

Chercher :
# line 51


const char* pszTimestamp = "NY Times 05/Oct/2011 Steve Jobs, Apple’s Visionary, Dies at 56";

Remplacer par :

const char* pszTimestamp = "Blockchain for CubeCoin";

Chercher :
# line 121


genesis = CreateGenesisBlock(1317972665, 2084524493, 0x1e0ffff0, 1, 50 * COIN);

Remplacer par :

genesis = CreateGenesisBlock(1594148555, 2085137478, 0x1e0ffff0, 1, 50 * COIN);

Chercher :
# line 123


assert(consensus.hashGenesisBlock == uint256S("0x12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2"));
assert(genesis.hashMerkleRoot == uint256S("0x97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9"));

Remplace par :

assert(consensus.hashGenesisBlock == uint256S("0xef6cdb4ebe56effe9e0292470d3d4f42ac53f7e86091883f721d1f6838cba6f5"));
assert(genesis.hashMerkleRoot == uint256S("0x75c043ef2b32fdb1625beb798e10f03561a07492809fc5021865fe342365c25f"));

Chercher :

# class CRegTestParams : public CChainParams
genesis = CreateGenesisBlock(
consensus.hashGenesisBlock = genesis.GetHash();
assert(consensus.hashGenesisBlock == uint256S("
assert(genesis.hashMerkleRoot == uint256S("

Remplace par :

genesis = CreateGenesisBlock(1594148555, 2085137478, 0x1e0ffff0, 1, 50 * COIN);
consensus.hashGenesisBlock = genesis.GetHash();
assert(consensus.hashGenesisBlock == uint256S("0xef6cdb4ebe56effe9e0292470d3d4f42ac53f7e86091883f721d1f6838cba6f5"));
assert(genesis.hashMerkleRoot == uint256S("0x75c043ef2b32fdb1625beb798e10f03561a07492809fc5021865fe342365c25f"));

Chercher :
# line 146


checkpointData = (CCheckpointData) {
{
{ 1500, uint256S("0x841a2965955dd288cfa707a755d05a54e45f8bd476835ec9af4402a2b59a2967")},
{ 4032, uint256S("0x9ce90e427198fc0ef05e5905ce3503725b80e26afd35a987965fd7e3d9cf0846")},
{ 8064, uint256S("0xeb984353fc5190f210651f150c40b8a4bab9eeeff0b729fcb3987da694430d70")},
{ 16128, uint256S("0x602edf1859b7f9a6af809f1d9b0e6cb66fdc1d4d9dcd7a4bec03e12a1ccd153d")},
{ 23420, uint256S("0xd80fdf9ca81afd0bd2b2a90ac3a9fe547da58f2530ec874e978fce0b5101b507")},
{ 50000, uint256S("0x69dc37eb029b68f075a5012dcc0419c127672adb4f3a32882b2b3e71d07a20a6")},
{ 80000, uint256S("0x4fcb7c02f676a300503f49c764a89955a8f920b46a8cbecb4867182ecdb2e90a")},
{120000, uint256S("0xbd9d26924f05f6daa7f0155f32828ec89e8e29cee9e7121b026a7a3552ac6131")},
{161500, uint256S("0xdbe89880474f4bb4f75c227c77ba1cdc024991123b28b8418dbbf7798471ff43")},
{179620, uint256S("0x2ad9c65c990ac00426d18e446e0fd7be2ffa69e9a7dcb28358a50b2b78b9f709")},
{240000, uint256S("0x7140d1c4b4c2157ca217ee7636f24c9c73db39c4590c4e6eab2e3ea1555088aa")},
{383640, uint256S("0x2b6809f094a9215bafc65eb3f110a35127a34be94b7d0590a096c3f126c6f364")},
{409004, uint256S("0x487518d663d9f1fa08611d9395ad74d982b667fbdc0e77e9cf39b4f1355908a3")},
{456000, uint256S("0xbf34f71cc6366cd487930d06be22f897e34ca6a40501ac7d401be32456372004")},
{638902, uint256S("0x15238656e8ec63d28de29a8c75fcf3a5819afc953dcd9cc45cecc53baec74f38")},
{721000, uint256S("0x198a7b4de1df9478e2463bd99d75b714eab235a2e63e741641dc8a759a9840e5")},
}
};

Remplacer par :

checkpointData = {
{
{ 0, uint256S("0xef6cdb4ebe56effe9e0292470d3d4f42ac53f7e86091883f721d1f6838cba6f5")},
}
};

Chercher :
# line 152


chainTxData = ChainTxData{
// Data as of block 59c9b9d3fec105bdc716d84caa7579503d5b05b73618d0bf2d5fa639f780a011 (height 1353397).
1516406833, // * UNIX timestamp of last known number of transactions
19831879, // * total number of transactions between genesis and that timestamp
// (the tx=... number in the SetBestChain debug.log lines)
0.06 // * estimated number of transactions per second after that timestamp
};


Remplacer par :


chainTxData = ChainTxData{
// Data as of block 59c9b9d3fec105bdc716d84caa7579503d5b05b73618d0bf2d5fa639f780a011 (height 1353397).
1594148555, // * UNIX timestamp of last known number of transactions
0, // * total number of transactions between genesis and that timestamp
// (the tx=... number in the SetBestChain debug.log lines)
0.0 // * estimated number of transactions per second after that timestamp
};

18/ Modification de ‘dnsseed’.

Ouvrir :

src/chainparams.cpp

Chercher :
# line 127


vSeeds.emplace_back("seed-a.cubecoin.loshan.co.uk", true);
vSeeds.emplace_back("dnsseed.thrasher.io", true);
vSeeds.emplace_back("dnsseed.cubecointools.com", true);
vSeeds.emplace_back("dnsseed.cubecoinpool.org", true);
vSeeds.emplace_back("dnsseed.koin-project.com", false);

Remplacer par :

vSeeds.emplace_back("dnsseed.cubeco.in");

19/ Modification du consensus.

Ouvrir :

src/chainparams.cpp

Chercher :
# line 104


consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000002ee655bf00bf13b4cca");

Remplacer par :

consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000");

20/ Modificatio du port.


util01@station01:~/CUBECOIN/litecoin$ find ./ -type f -readable -writable -exec sed -i "s/9333/9666/g" {} \;

21/ Renommage de la documentation.


util01@station01:~/CUBECOIN/litecoin$ cp doc/man/litecoin-cli.1 doc/man/cubecoin-cli.1
util01@station01:~/CUBECOIN/litecoin$ cp doc/man/litecoind.1 doc/man/cubecoind.1
util01@station01:~/CUBECOIN/litecoin$ cp doc/man/litecoin-qt.1 doc/man/cubecoin-qt.1
util01@station01:~/CUBECOIN/litecoin$ cp doc/man/litecoin-tx.1 doc/man/cubecoin-tx.1

22/ Configuration de la compilation, compilation et installation.


util01@station01:~/CUBECOIN/litecoin$ ./autogen.sh
util01@station01:~/CUBECOIN/litecoin$ ./configure
util01@station01:~/CUBECOIN/litecoin$ make
util01@station01:~/CUBECOIN/litecoin$ sudo make install


util01@station01:~/CUBECOIN/litecoin$ cd

23/ Création du répertoire caché de configuration de ‘cubecoin’.


util01@station01:~$ mkdir .cubecoin

24/ Création du fichier de configuration.

Ouvrir :

.cubecoin/cubecoin.conf

Ajouter :

# Use as many addnode= settings as you like to connect to specific peers
addnode=192.168.1.200:9666
addnode=192.168.1.201:9666
# JSON-RPC options (for controlling a running cubecoin/cubecoind process)
# server=1 tells cubecoin-QT to accept JSON-RPC commands.
server=1
# You must set rpcuser and rpcpassword to secure the JSON-RPC api
rpcuser=cubecoinrpc
rpcpassword=mot2passe
# How many seconds cubecoin will wait for a complete RPC HTTP request.
# after the HTTP connection is established.
rpctimeout=30
# By default, only RPC connections from localhost are allowed. Specify
# as many rpcallowip= settings as you like to allow connections from
# other hosts (and you may use * as a wildcard character):
#rpcallowip=10.1.1.34
#rpcallowip=192.168.*.*
#rpcallowip=1.2.3.4/255.255.255.0
rpcallowip=127.0.0.1
# Set gen=1 to attempt to generate cubecoins
gen=1
# Use SSE instructions to try to generate cubecoins faster.
4way=1
# Pay an optional transaction fee every time you send cubecoins. Transactions with fees
# are more likely than free transactions to be included in generated blocks, so may
# be validated sooner.
paytxfee=0.001

25/ Sur 3 nodes (== serveurs), lancement du daemon ‘cubecoin’.


util01@station01:~$ cubecoind --printconsole

26/ Sur 2 ordinateurs : Lancement du porte-feuille (wallet) Cubecoin.


util01@station01:~$ cubecoin-qt -reindex

27/ Sur ces ordinateurs : Lancement du minage.

Ouvrir :

~/CUBECOIN/mine_cubecoin.sh

Ajouter :

#!/bin/bash
echo "Mining... Press [CTRL+C] to stop"
while :
do
cubecoin-cli generate 1
done

Action :

chmod +x mine_cubecoin.sh


util01@station01:~/CUBECOIN$ ./mine_cubecoin.sh

28/ Minage en-cours.

Comments are closed, but trackbacks and pingbacks are open.