Litecoin

如何創建新的創世塊?

  • February 26, 2021

我正在嘗試使用萊特幣創建一個測試幣。為了創建創世塊,我將一些行更改為:

block.nTime = 1390948469; // current time

uint256 hashGenesisBlock("0x"); //I dont now it's true or false

uint256 hash = block.GetHash();
       printf("%s\n", hash.ToString().c_str());
       printf("%s\n", hashGenesisBlock.ToString().c_str());
       printf("%s\n", block.hashMerkleRoot.ToString().c_str());
       assert(block.hashMerkleRoot == uint256("0x")); //I dont now it's true or false.
       block.print();
       assert(hash == hashGenesisBlock);

當我建構守護程序並啟動它時,我收到了這個錯誤:

litecoind: main.cpp:2788: bool InitBlockIndex(): Assertion `hash == hashGenesisBlock' failed.
Aborted

當我檢查./litecoin debug.log文件時,我看到了萊特幣現在使用的以前的hashMerkleRoot 和 hashGenesisBlock。我無法創建新的雜湊和默克爾根。

創建創世區塊。有些人卡在那裡,這真的很容易:

  • 在裡面找到 LoadBlockIndex() 函式,改變:

    • 釋義 (pszTimestamp) 到任何最近的新聞階段。
    • 獲取最新的 unix 時間(Google),並輸入 block.nTime。
    • 設置任何 nNonce (並不重要),如果你想使用它,你也可以更改測試網的時間/隨機數。

完成後,保存它。現在創世塊不會匹配雜湊檢查和默克爾根檢查,沒關係。

第一次執行編譯後的程式碼(daemon 或 qt)時,它會說“assertion failed”。退出程序,進入config dir(AppData/Roaming下),打開debug.log,得到“block.GetHash() =”後的hash,複製粘貼到main.cpp的beginnig,hashGenesisBlock。還要在同一個日誌文件中獲取 merkle 根,將其粘貼到以下程式碼中的 … 位置,在 LoadBlockIndex()

assert(block.hashMerkleRoot == uint256("0x..."));

重新編譯程式碼,創世塊就創建好了!

順便說一句,不要忘記將“txNew.vout[0].nValue =”更改為您定義的每塊硬幣,保留為 50 沒有關係,只要與您的每塊硬幣一致(在調整之前執行此操作雜湊和 m-root,否則將再次更改)。

檢查<https://bitcointalk.org/index.php?topic=225690.0>了解完整資訊

如果你想生成我們自己獨特的創世塊,你應該生成並替換至少以下參數:

  • nTime(unix 時間。如果距現在 5 週,您的錢包將顯示“5 週後沒有可用的塊源”)
  • pszTimeStamp(“證明”沒有發生預挖的“時間戳”)
  • hashMerkleRoot(基於區塊的coinbase交易的merkle根)
  • hashGenesisBlock(創世雜湊本身!)
  • nNonce(在搜尋滿足目標(=難度)的雜湊時遞增的正確 nounce)

輸出交易腳本中的公鑰也可以更改為唯一值。然而,由於創世塊無論如何都不能被使用,因此可以使用相同的公鑰,例如萊特幣。此外,如果您計劃創建 Litecoin 複製,則不應更改 nBits。

您可以使用此腳本為 scrypt genesisblock 創建值: https ://github.com/lhartikk/GenesisH0

引用自:https://bitcoin.stackexchange.com/questions/21303