Genesis-Block

創世區塊內的交易是否可以使用?

  • July 10, 2018

添加到創世塊的交易是可花費的,就像來自其他塊的任何其他交易一樣,還是不可花費的 coinbase 交易。

換一種說法..

如果找到比特幣接收者的相應私鑰,創世區塊內的交易是否可以使用?

如果我分叉比特幣程式碼,並生成我自己的創世塊。我可以使用我用作與創世塊硬編碼的交易的比特幣接收者的私鑰/公鑰嗎?

添加到創世塊的交易是可花費的,就像來自其他塊的任何其他交易一樣,還是不可花費的 coinbase 交易。

交易不可消費;交易輸出是。

如果找到比特幣接收者的相應私鑰,創世區塊內的交易是否可以使用?

比特幣創世區塊中的單個交易輸出不可使用。目前尚不清楚這是系統創建者的故意選擇,還是意外。無論如何,目前的原因並不重要,因為沒有比特幣全節點軟體會接受這樣的支出。

如果我分叉比特幣程式碼,並生成我自己的創世塊。我可以使用我用作與創世塊硬編碼的交易的比特幣接收者的私鑰/公鑰嗎?

在您自己的軟體中,您可以執行您喜歡的任何規則。

添加到創世塊的交易是可花費的,就像來自其他塊的任何其他交易一樣,還是不可花費的 coinbase 交易。

創世區塊的 coinbase 交易不可花費。

如果我分叉比特幣程式碼,並生成我自己的創世塊。我可以使用我用作與創世塊硬編碼的交易的比特幣接收者的私鑰/公鑰嗎?

是的,但是您必須對原始碼進行一些修改,因為它的“不可使用性”已被硬編碼以避免硬分叉。

如何讓它變得可消費

chainparams.cpp

  1. 通過在 中提供所有必要資訊來探勘您自己的創世塊chainparams.cpp,主要是CreateGenesisBlock第 123 行(對於主網,對於同一文件中的測試網和 regtest 類似)。

validation.cpp

您需要這樣做,以便將事務添加到索引中,並繞過一些使其無法使用的檢查。在v0.16

  1. validation.cpp您可以在#1812 行中找到未將其添加到索引的位置。註釋掉第 1817 行return true以避免跳過它。

您可能還需要在以下位置跳過驗證測試(例如,如果您的創世塊難度較低,如果您有預挖):

  1. 通過在其周圍添加檢查來跳過nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE;#1891 行:

if (block.GetHash() != chainparams.GetConsensus().hashGenesisBlock) { if (VersionBitsState(pindex->pprev, chainparams.GetConsensus(), Consensus::DEPLOYMENT_CSV, versionbitscache) == THRESHOLD_ACTIVE) { nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE; } } 3. 第 1988 行if (!WriteUndoDataForBlock(blockundo, state, pindex, chainparams)) return false;也有類似的異常(檢查 != 創世塊) 4. Line #1805Lines #1873-1876的類似例外

基本上,您需要執行它並嘗試查看它在日誌中失敗的位置,因為您違反了一堆規則。

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