Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- I Cześć pierwsza. Przygotowanie źródeł
- - 1. Zainstaluj zależności
- sudo apt install build-essential libtool autotools-dev automake pkg-config libssl-dev libboost-dev libevent-dev bsdmainutils
- sudo apt install libboost-all-dev software-properties-common
- sudo apt install libqt4-dev libprotobuf-dev protobuf-compiler
- sudo apt install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools
- sudo apt install libzmq3-dev
- sudo apt-add-repository ppa:bitcoin/bitcoin
- sudo apt update
- sudo apt install libdb4.8-dev libdb4.8++-dev
- sudo apt install libminiupnpc-dev
- - 2. Pobierz i rozpakuj źródła LiteCoin
- wget https://github.com/litecoin-project/litecoin/archive/v0.8.7.4.tar.gz,
- tar xf v0.8.7.4.tar.gz
- 3. Przemianuj katalog na bstcoin
- mv litecoin-0.8.7.4 zipcoin
- cd zipcoin
- mv bitcoin-qt.pro zipcoin-qt.pro
- - 4. Dostosuj źródła tak aby program się kompilował
- - cd src
- mousepad rpcrawtransaction.cpp &
- linia 242 (skrót klawiaturowy Ctrl-L) powinna mieć postać:
- const CScriptID& hash = boost::get<CScriptID>(address);
- zapisanie
- cd ..
- 5. Zatąp teksty litecoin na zipcoin.
- W katalogu bstcoin wykonaj
- find . -type f -print0 | xargs -0 sed -i 's/litecoin/zipcoin/g'
- find . -type f -print0 | xargs -0 sed -i 's/Litecoin/Zipcoin/g'
- find . -type f -print0 | xargs -0 sed -i 's/litecoind/zipcoind/g'
- find . -type f -print0 | xargs -0 sed -i 's/LITECOIN/ZIPCOIN/g'
- find . -type f -print0 | xargs -0 sed -i 's/LTC/ZIP/g'
- i kompilacja komendą
- - cd src
- , make -f makefile.unix
- (przerwa na kawę)
- II Część druga. Zmiana parametrów sieci P2P
- 1. Zmiana portów których używa nasza sieć P2P
- find . -type f -print0 | xargs -0 sed -i 's/9333/2333/g'
- find . -type f -print0 | xargs -0 sed -i 's/19333/12333/g'
- find . -type f -print0 | xargs -0 sed -i 's/9332/2332/g'
- find . -type f -print0 | xargs -0 sed -i 's/19332/12332/g'
- 2. Zmiana prefixu adresu BitCoin
- plik base58.h, linie 275 i 277
- Zmieniamy prefixy 'L' (48) na 'Z' (80) i
- 'l' (111) na 'z' (142),
- wartości prefiksów na https://en.bitcoin.it/wiki/List_of_address_prefixes
- 3. Podmiania kluczy służących do rozłaszania komunikatów w sieci
- a) generujemy klucze
- openssl ecparam -genkey -name secp256k1 -out alertkey.pem
- openssl ec -in alertkey.pem -text > alertkey.hex
- openssl ecparam -genkey -name secp256k1 -out testnetalertkey.pem
- openssl ec -in testnetalertkey.pem -text > testnetalertkey.hex
- b) bierzemy pliki hex do edycji i usuwamy ':' z kluczy publicznych
- c) bierzemy do edycji plik alert.cpp i podmieniamy wartość kluczy (linie 22 i 23)
- wstawiamy wszyscy to samo żeby być w tej samej sieci
- /*
- static const char* pszMainKey = "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9";
- static const char* pszTestKey = "04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a";
- */
- static const char* pszMainKey = "04920d437e71911ab2720653dcd381511893d32c1cf5054f97a498b67f53de42984ba57b73f78dfcb061109aa57633d542cc4c23b46ab9365da98416bf528f5194";
- static const char* pszTestKey = "048a0da6e7eec861a2ad30ba16edefcab9086c8da8bcab50348435a4eae4b3b7f41478783c09561e89749068f360a3d8a4e24b78be717cbaeb5fe5097c4ab725b9";
- 3. Zmiana parametrów sieci,
- a) podmiana klucza publicznego, edycja pliku main.cpp
- openssl ecparam -genkey -name secp256k1 -out genesiskey.pem
- openssl ec -in genesiskey.pem -text > genesiskey.hex
- i podmiana w pliku main.cpp, linia 2788, ma być
- txNew.vout[0].scriptPubKey = CScript() << ParseHex("0414fe835e7f7a86e1910a2f4b9a6f1b56dcba8e219d626f84cdc03a5e8dc609722ce3a26b785b6c9b0309dd40e10419f088dfd448807f258448b6059660659ce8") << OP_CHECKSIG;
- b) Podmiana bajtów nagłówka komunikatu: 0xf0, 0xc1, 0xb2, 0xd3, linie 2745-2748 oraz linia 3082, plik main.cpp
- c) Podmiana domyślnych adresów węzłów, plik net.cpp, linia 1175
- * w tablicach strMainNetDNSSeed i strTestNetDNSSeed kasujemy wszystkie wpisy za wyjątkiem pustego (NULL,NULL)
- * poniżej w tablicy pnSeed kasujemy wszystko i wstawiamy wpis 0x00000000,
- III Część trzecia. Zmiana parametrów kryptowaluty
- 1. Generacja monet
- main.cpp,
- linia 39, początkowa trudność znajdowania bloków
- static CBigNum bnProofOfWorkLimit(~uint256(0) >> 10);
- linia 1099, częstotliwość generacji bloków
- static const int64 nTargetSpacing = 60 ; // Bstcoin: nowy blok co minutę
- linia 1090, nagroda za nowy blok
- int64 nSubsidy = 10 * COIN; // Nagroda za blok: 10 monet
- linia 1093, liczba bloków w roku 365*24*60=525600
- nSubsidy >>= (nHeight / 525600); // Bstcoin: nagroda maleje o połowę w każdym kolejnym roku
- linia 1098, aktualizacja trudności obliczeń co jeden dzień
- static const int64 nTargetTimespan = 24 * 60 * 60; // Bstcoin: one day
- main.h
- linia 55, całkowita liczba monet 525600 * 10 * 2 = 10512000
- static const int64 MAX_MONEY = 10512000 * COIN;
- linia 58, liczba bloków które muszą leżeć ponad blokiem z transakcją aby była ważna
- static const int COINBASE_MATURITY = 5 ;
- linia 627, liczba bloków w czasie zadanego poziomu trudności: u nas liczba minut w ciągu dnia 24*60=1440
- return dPriority > COIN * 1440 / 250;
- 2. Generacja skrótu (hashMerkleRoot) treści bloku genesis
- a) main.cpp,
- linia 2787, ustawić nagrodę w coinbase na 10 coins
- txNew.vout[0].nValue = 10 * COIN ;
- b) main.cpp,
- linia 2782, zmiana zawartości bloku
- const char* pszTimestamp = "ZIP has project on 2019.03.03" ;
- c) main.cpp, linia 2794 i 2800, wykonać date +%s i wkleić wynik
- block.nTime=1550943934 ;
- d) main.cpp, linia 2796 i 2801,
- block.nNonce=0 ;
- e) main.cpp, linia 2809, skasować zawartość MerkleRoot
- assert(block.hashMerkleRoot == uint256("0x"));
- f) kompilacja i uruchomienie ./zipcoind
- g) pobranie z ~/.zipcoin/debug.log wartości hashMerkleRoot i aktualizacja
- main.cpp, linia 2809, przenieść liczbę z ostatniego wpisu w pliku dziennika
- 3. Generacja skrótu nagłówka bloku genesis
- a) Wyszukać w main.cpp zmienna hashGenesisBlock i usunąć przypisane wartości
- linia 38, 2749
- b) w main.cpp w linii 2803 wstawić poniższy kod generujący skrót nagłówka bloku genesis
- /* ********************************* generacja skrótu nagłówka bloku genesis ***************** */
- 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
- {
- scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad);
- 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());
- }
- /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ generacja skrótu nagłówka bloku genesis ^^^^^^^^^^^^^^^^^^^^ */
- c) kompilacja
- make -f makefile.unix
- d) generacja bloku genesis
- * w terminalu
- tail -f ~/.zipcoin/debug.log
- * uruchomienie ./zipcoind
- i czekamy aż się dokopie
- e) pobieramy z pliku debug.log wartość nNonce 1821026
- i wpisujemy do pliku main.cpp linie 2796 i 2801
- oraz skrót bloku genesis
- block.GetHash = a5e01ea1c77838753df640e742bebe17f7d245bbf634cd20989ac5f13aabafcb
- i wstawiamy do main.cpp, linie 38 oraz 2749
- g) w main.cpp linia 2804 wpisujemy wyłączamy generację bloku genesis
- if (false && block.GetHash() != hashGenesisBlock)
- h) usuwamy bloki kontrolne blockchainu zaszyte na stałe w źródłach
- plik checkpoints.cpp, linia 38,
- * kasujemy wszystkie z wyjątkiem pierwszego,
- jako pierwszy blok kontrolny ustawiamy blok genesis: 1500 zastępujemy przez 0,
- a skrót w źródłach skrótem bloku genesis z debug.log
- * poniżej w strukturze CCheckpointData wstwiamy własny timestamp
- linia 42, w linii 43 wstwiamy 0 a w linii 44 1.0
- static const CCheckpointData data = {
- &mapCheckpoints,
- 1550943934, // * UNIX timestamp of last checkpoint block
- 0, // * total number of transactions between genesis and last checkpoint
- // (the tx=... number in the SetBestChain debug.log lines)
- 1.0 // * estimated number of transactions per day after checkpoint
- };
- * to samo w liniach 48 i 52
- static MapCheckpoints mapCheckpointsTestnet =
- boost::assign::map_list_of
- ( 0, uint256("0xbfde53e52461f94f9e50633b3bb18d92b2dbc5388b81fc5027dcadab81892c95"))
- ;
- static const CCheckpointData dataTestnet = {
- &mapCheckpointsTestnet,
- 1519886682,
- 0,
- 1.0
- };
- * kompilacja
- IV. Część czwarta. Kompilacja i uruchomienie węzła z interfejsem graficznym
- 1. kompilacja
- qmake
- make
- 2. Konfiguracja serwera.
- W katalogu domowym tworzymy katalog .zipcoin
- a w nim plik zipcoin.conf o treści
- ########## zipcoin.conf
- listen=1
- server=1
- rpcuser=user
- rpcpassword=password
- ##########
- 3. Konfiguracja klienta
- W katalogu domowym
- W katalogu domowym tworzymy katalog .zipcoin
- a w nim plik zipcoin.conf o treści
- ########## zipcoin.conf
- addnode=157.158.24.137
- ##########
- 4. Kopanie aktywujemy komendą
- Pomoc->Okno debugowania | Konsola
- help
- setgenerate true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement