Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2019
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.16 KB | None | 0 0
  1. I Cześć pierwsza. Przygotowanie źródeł
  2.  
  3.  
  4.  
  5. - 1. Zainstaluj zależności
  6. sudo apt install build-essential libtool autotools-dev automake pkg-config libssl-dev libboost-dev libevent-dev bsdmainutils
  7.  
  8.  
  9. sudo apt install libboost-all-dev software-properties-common
  10.  
  11. sudo apt install libqt4-dev libprotobuf-dev protobuf-compiler
  12.  
  13. sudo apt install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools
  14.  
  15. sudo apt install libzmq3-dev
  16.  
  17. sudo apt-add-repository ppa:bitcoin/bitcoin
  18.  
  19. sudo apt update
  20.  
  21. sudo apt install libdb4.8-dev libdb4.8++-dev
  22.  
  23. sudo apt install libminiupnpc-dev
  24.  
  25.  
  26.  
  27. - 2. Pobierz i rozpakuj źródła LiteCoin
  28. wget https://github.com/litecoin-project/litecoin/archive/v0.8.7.4.tar.gz,
  29. tar xf v0.8.7.4.tar.gz
  30.  
  31.  
  32.  
  33.  
  34. 3. Przemianuj katalog na bstcoin
  35. mv litecoin-0.8.7.4 zipcoin
  36. cd zipcoin
  37. mv bitcoin-qt.pro zipcoin-qt.pro
  38.  
  39.  
  40.  
  41.  
  42. - 4. Dostosuj źródła tak aby program się kompilował
  43.  
  44. - cd src
  45. mousepad rpcrawtransaction.cpp &
  46.  
  47. linia 242 (skrót klawiaturowy Ctrl-L) powinna mieć postać:
  48.  
  49. const CScriptID& hash = boost::get<CScriptID>(address);
  50.  
  51. zapisanie
  52.  
  53. cd ..
  54.  
  55.  
  56.  
  57. 5. Zatąp teksty litecoin na zipcoin.
  58. W katalogu bstcoin wykonaj
  59.  
  60.  
  61.  
  62. find . -type f -print0 | xargs -0 sed -i 's/litecoin/zipcoin/g'
  63.  
  64. find . -type f -print0 | xargs -0 sed -i 's/Litecoin/Zipcoin/g'
  65.  
  66. find . -type f -print0 | xargs -0 sed -i 's/litecoind/zipcoind/g'
  67.  
  68. find . -type f -print0 | xargs -0 sed -i 's/LITECOIN/ZIPCOIN/g'
  69.  
  70. find . -type f -print0 | xargs -0 sed -i 's/LTC/ZIP/g'
  71.  
  72.  
  73.  
  74. i kompilacja komendą
  75. - cd src
  76. , make -f makefile.unix
  77. (przerwa na kawę)
  78.  
  79.  
  80.  
  81. II Część druga. Zmiana parametrów sieci P2P
  82.  
  83.  
  84.  
  85. 1. Zmiana portów których używa nasza sieć P2P
  86.  
  87.  
  88.  
  89. find . -type f -print0 | xargs -0 sed -i 's/9333/2333/g'
  90.  
  91. find . -type f -print0 | xargs -0 sed -i 's/19333/12333/g'
  92.  
  93. find . -type f -print0 | xargs -0 sed -i 's/9332/2332/g'
  94.  
  95. find . -type f -print0 | xargs -0 sed -i 's/19332/12332/g'
  96.  
  97.  
  98.  
  99. 2. Zmiana prefixu adresu BitCoin
  100.  
  101. plik base58.h, linie 275 i 277
  102. Zmieniamy prefixy 'L' (48) na 'Z' (80) i
  103. 'l' (111) na 'z' (142),
  104. wartości prefiksów na https://en.bitcoin.it/wiki/List_of_address_prefixes
  105.  
  106.  
  107.  
  108. 3. Podmiania kluczy służących do rozłaszania komunikatów w sieci
  109.  
  110.  
  111. a) generujemy klucze
  112.  
  113. openssl ecparam -genkey -name secp256k1 -out alertkey.pem
  114.  
  115. openssl ec -in alertkey.pem -text > alertkey.hex
  116.  
  117.  
  118. openssl ecparam -genkey -name secp256k1 -out testnetalertkey.pem
  119.  
  120. openssl ec -in testnetalertkey.pem -text > testnetalertkey.hex
  121.  
  122.  
  123.  
  124. b) bierzemy pliki hex do edycji i usuwamy ':' z kluczy publicznych
  125.  
  126.  
  127.  
  128. c) bierzemy do edycji plik alert.cpp i podmieniamy wartość kluczy (linie 22 i 23)
  129. wstawiamy wszyscy to samo żeby być w tej samej sieci
  130. /*
  131.  
  132.  
  133. static const char* pszMainKey = "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9";
  134.  
  135.  
  136. static const char* pszTestKey = "04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a";
  137. */
  138.  
  139.  
  140. static const char* pszMainKey = "04920d437e71911ab2720653dcd381511893d32c1cf5054f97a498b67f53de42984ba57b73f78dfcb061109aa57633d542cc4c23b46ab9365da98416bf528f5194";
  141.  
  142.  
  143. static const char* pszTestKey = "048a0da6e7eec861a2ad30ba16edefcab9086c8da8bcab50348435a4eae4b3b7f41478783c09561e89749068f360a3d8a4e24b78be717cbaeb5fe5097c4ab725b9";
  144.  
  145.  
  146.  
  147.  
  148. 3. Zmiana parametrów sieci,
  149.  
  150.  
  151.  
  152. a) podmiana klucza publicznego, edycja pliku main.cpp
  153. openssl ecparam -genkey -name secp256k1 -out genesiskey.pem
  154. openssl ec -in genesiskey.pem -text > genesiskey.hex
  155. i podmiana w pliku main.cpp, linia 2788, ma być
  156. txNew.vout[0].scriptPubKey = CScript() << ParseHex("0414fe835e7f7a86e1910a2f4b9a6f1b56dcba8e219d626f84cdc03a5e8dc609722ce3a26b785b6c9b0309dd40e10419f088dfd448807f258448b6059660659ce8") << OP_CHECKSIG;
  157.  
  158.  
  159.  
  160. b) Podmiana bajtów nagłówka komunikatu: 0xf0, 0xc1, 0xb2, 0xd3, linie 2745-2748 oraz linia 3082, plik main.cpp
  161.  
  162.  
  163.  
  164. c) Podmiana domyślnych adresów węzłów, plik net.cpp, linia 1175
  165. * w tablicach strMainNetDNSSeed i strTestNetDNSSeed kasujemy wszystkie wpisy za wyjątkiem pustego (NULL,NULL)
  166. * poniżej w tablicy pnSeed kasujemy wszystko i wstawiamy wpis 0x00000000,
  167.  
  168.  
  169.  
  170.  
  171. III Część trzecia. Zmiana parametrów kryptowaluty
  172.  
  173.  
  174.  
  175. 1. Generacja monet
  176. main.cpp,
  177.  
  178.  
  179. linia 39, początkowa trudność znajdowania bloków
  180. static CBigNum bnProofOfWorkLimit(~uint256(0) >> 10);
  181.  
  182.  
  183. linia 1099, częstotliwość generacji bloków
  184. static const int64 nTargetSpacing = 60 ; // Bstcoin: nowy blok co minutę
  185. linia 1090, nagroda za nowy blok
  186. int64 nSubsidy = 10 * COIN; // Nagroda za blok: 10 monet
  187.  
  188.  
  189. linia 1093, liczba bloków w roku 365*24*60=525600
  190. nSubsidy >>= (nHeight / 525600); // Bstcoin: nagroda maleje o połowę w każdym kolejnym roku
  191.  
  192. linia 1098, aktualizacja trudności obliczeń co jeden dzień
  193.  
  194. static const int64 nTargetTimespan = 24 * 60 * 60; // Bstcoin: one day
  195.  
  196. main.h
  197.  
  198.  
  199. linia 55, całkowita liczba monet 525600 * 10 * 2 = 10512000
  200.  
  201. static const int64 MAX_MONEY = 10512000 * COIN;
  202.  
  203.  
  204. linia 58, liczba bloków które muszą leżeć ponad blokiem z transakcją aby była ważna
  205. static const int COINBASE_MATURITY = 5 ;
  206. linia 627, liczba bloków w czasie zadanego poziomu trudności: u nas liczba minut w ciągu dnia 24*60=1440
  207. return dPriority > COIN * 1440 / 250;
  208.  
  209. 2. Generacja skrótu (hashMerkleRoot) treści bloku genesis
  210.  
  211. a) main.cpp,
  212. linia 2787, ustawić nagrodę w coinbase na 10 coins
  213. txNew.vout[0].nValue = 10 * COIN ;
  214.  
  215.  
  216.  
  217. b) main.cpp,
  218. linia 2782, zmiana zawartości bloku
  219. const char* pszTimestamp = "ZIP has project on 2019.03.03" ;
  220.  
  221. c) main.cpp, linia 2794 i 2800, wykonać date +%s i wkleić wynik
  222. block.nTime=1550943934 ;
  223.  
  224.  
  225.  
  226. d) main.cpp, linia 2796 i 2801,
  227. block.nNonce=0 ;
  228.  
  229.  
  230.  
  231. e) main.cpp, linia 2809, skasować zawartość MerkleRoot
  232. assert(block.hashMerkleRoot == uint256("0x"));
  233.  
  234.  
  235.  
  236. f) kompilacja i uruchomienie ./zipcoind
  237.  
  238.  
  239.  
  240. g) pobranie z ~/.zipcoin/debug.log wartości hashMerkleRoot i aktualizacja
  241. main.cpp, linia 2809, przenieść liczbę z ostatniego wpisu w pliku dziennika
  242.  
  243.  
  244.  
  245.  
  246. 3. Generacja skrótu nagłówka bloku genesis
  247.  
  248.  
  249.  
  250. a) Wyszukać w main.cpp zmienna hashGenesisBlock i usunąć przypisane wartości
  251.  
  252. linia 38, 2749
  253.  
  254.  
  255. b) w main.cpp w linii 2803 wstawić poniższy kod generujący skrót nagłówka bloku genesis
  256. /* ********************************* generacja skrótu nagłówka bloku genesis ***************** */
  257.  
  258. if (true && block.GetHash() != hashGenesisBlock)
  259.  
  260. {
  261. printf("Searching for genesis block...\n");
  262. // This will figure out a valid hash and Nonce if you're
  263. // creating a different genesis block:
  264. uint256 hashTarget = CBigNum().SetCompact(block.nBits).getuint256();
  265. uint256 thash;
  266. char scratchpad[SCRYPT_SCRATCHPAD_SIZE];
  267.  
  268. loop
  269. {
  270. scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad);
  271. if (thash <= hashTarget)
  272. break;
  273. if ((block.nNonce & 0xFFF) == 0)
  274. {
  275. printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str());
  276. }
  277. ++block.nNonce;
  278. if (block.nNonce == 0)
  279. {
  280. printf("NONCE WRAPPED, incrementing time\n");
  281. ++block.nTime;
  282. }
  283. }
  284. printf("block.nTime = %u \n", block.nTime);
  285. printf("block.nNonce = %u \n", block.nNonce);
  286. printf("block.GetHash = %s\n", block.GetHash().ToString().c_str());
  287.  
  288. }
  289. /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ generacja skrótu nagłówka bloku genesis ^^^^^^^^^^^^^^^^^^^^ */
  290.  
  291.  
  292.  
  293. c) kompilacja
  294. make -f makefile.unix
  295.  
  296.  
  297.  
  298. d) generacja bloku genesis
  299. * w terminalu
  300. tail -f ~/.zipcoin/debug.log
  301. * uruchomienie ./zipcoind
  302. i czekamy aż się dokopie
  303.  
  304.  
  305.  
  306. e) pobieramy z pliku debug.log wartość nNonce 1821026
  307. i wpisujemy do pliku main.cpp linie 2796 i 2801
  308. oraz skrót bloku genesis
  309. block.GetHash = a5e01ea1c77838753df640e742bebe17f7d245bbf634cd20989ac5f13aabafcb
  310. i wstawiamy do main.cpp, linie 38 oraz 2749
  311.  
  312.  
  313.  
  314. g) w main.cpp linia 2804 wpisujemy wyłączamy generację bloku genesis
  315. if (false && block.GetHash() != hashGenesisBlock)
  316.  
  317.  
  318.  
  319. h) usuwamy bloki kontrolne blockchainu zaszyte na stałe w źródłach
  320. plik checkpoints.cpp, linia 38,
  321.  
  322. * kasujemy wszystkie z wyjątkiem pierwszego,
  323. jako pierwszy blok kontrolny ustawiamy blok genesis: 1500 zastępujemy przez 0,
  324. a skrót w źródłach skrótem bloku genesis z debug.log
  325.  
  326. * poniżej w strukturze CCheckpointData wstwiamy własny timestamp
  327. linia 42, w linii 43 wstwiamy 0 a w linii 44 1.0
  328. static const CCheckpointData data = {
  329. &mapCheckpoints,
  330. 1550943934, // * UNIX timestamp of last checkpoint block
  331. 0, // * total number of transactions between genesis and last checkpoint
  332. // (the tx=... number in the SetBestChain debug.log lines)
  333. 1.0 // * estimated number of transactions per day after checkpoint
  334. };
  335.  
  336. * to samo w liniach 48 i 52
  337. static MapCheckpoints mapCheckpointsTestnet =
  338. boost::assign::map_list_of
  339. ( 0, uint256("0xbfde53e52461f94f9e50633b3bb18d92b2dbc5388b81fc5027dcadab81892c95"))
  340. ;
  341. static const CCheckpointData dataTestnet = {
  342. &mapCheckpointsTestnet,
  343. 1519886682,
  344. 0,
  345. 1.0
  346. };
  347.  
  348. * kompilacja
  349.  
  350.  
  351.  
  352.  
  353. IV. Część czwarta. Kompilacja i uruchomienie węzła z interfejsem graficznym
  354.  
  355.  
  356. 1. kompilacja
  357. qmake
  358. make
  359.  
  360.  
  361. 2. Konfiguracja serwera.
  362. W katalogu domowym tworzymy katalog .zipcoin
  363. a w nim plik zipcoin.conf o treści
  364. ########## zipcoin.conf
  365. listen=1
  366. server=1
  367. rpcuser=user
  368. rpcpassword=password
  369. ##########
  370.  
  371.  
  372. 3. Konfiguracja klienta
  373. W katalogu domowym
  374. W katalogu domowym tworzymy katalog .zipcoin
  375. a w nim plik zipcoin.conf o treści
  376. ########## zipcoin.conf
  377. addnode=157.158.24.137
  378. ##########
  379.  
  380.  
  381.  
  382. 4. Kopanie aktywujemy komendą
  383. Pomoc->Okno debugowania | Konsola
  384. help
  385. setgenerate true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement