分叉前:
Height: < Prev 1919999 Next >
TimeStamp: 643 days 17 hrs ago (Jul-20-2016 01:20:38 PM +UTC)
Transactions: 0 transactions and 0 contract internal transactions in this block
Hash: 0xa218e2c611f21232d857e3c8cecdcdf1f65f25a4477f98f6f47e4063807f2308
Parent Hash: 0x505ffd21f4cbf2c5c34fa84cd8c92525f3a719b7ad18852bffddad601035f5f4
Sha3Uncles: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
Mined By: 0x2a65aca4d5fc5b5c859090a6c34d164135398226 (DwarfPool1) in 3 secs
Difficulty: 62,382,916,183,238
Total Difficulty: 39,490,902,020,018,959,982
Size: 526 bytes
Gas Used: 0 (0.00%)
Gas Limit: 4,707,788
Nonce: 0x60832709c8979daa
Block Reward: 5 Ether
Uncles Reward: 0
Extra Data: DwarfPool (Hex:0x4477617266506f6f6c)
開始分叉:
新的代碼生成一個新的塊:
Height: < Prev 1920000 Next >
TimeStamp: 643 days 17 hrs ago (Jul-20-2016 01:20:40 PM +UTC)
Transactions: 4 transactions and 0 contract internal transactions in this block
Hash: 0x4985f5ca3d2afbec36529aa96f74de3cc10a2a4a6c44f2157a57d2c6059a11bb
Parent Hash: 0xa218e2c611f21232d857e3c8cecdcdf1f65f25a4477f98f6f47e4063807f2308
Sha3Uncles: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
Mined By: 0xbcdfc35b86bedf72f0cda046a3c16829a2ef41d1 (bw.com) in 2 secs
Difficulty: 62,413,376,722,602
Total Difficulty: 39,490,964,433,395,682,584
Size: 976 bytes
Gas Used: 84,000 (1.78%)
Gas Limit: 4,712,384
Nonce: 0xbede87201de42426
Block Reward: 5.00168 Ether (5 + 0.00168)
Uncles Reward: 0
Extra Data: dao-hard-fork (Hex:0x64616f2d686172642d666f726b)
0x4985f5ca3d2afbec36529aa96f74de3cc10a2a4a6c44f2157a57d2c6059a11bb進行廣播
舊的代碼生成一個新的塊:
Height: < Prev 1920000 Next >
TimeStamp: 643 days 17 hrs ago (Jul-20-2016 01:20:38 PM +UTC)
Transactions: 0 transactions and 0 contract internal transactions in this block
Hash: 0xa2************************
Parent Hash: 0xa218e2c611f21232d857e3c8cecdcdf1f65f25a4477f98f6f47e4063807f2308
如果在1919999這個塊及以前的的時候,因爲if header.Number.Cmp(config.DAOForkBlock) < 0 || header.Number.Cmp(config.DAOForkBlock+10)>= 0, 新舊代碼都可以兼容的.
A.1920000開始後,這個p2p的網絡大家還是連接着的,那麼,
1. 對於新版本的,在download到新版本塊,頭部校驗通過,insertchain. 如果收到舊的版本生成的塊,那麼這個就出錯了, 給拋棄(這個是ErrBadProDAOExtra,ErrBadNoDAOExtra,只會報告錯誤不會有後續處理)
2. 對於舊版本,則反之
3. 對於1,2的情況,會一直持續到 config.DAOForkBlock+10,即1920010,這時新舊的版本,已經各有11個不同的塊了.
B.19200011開始, parent := chain.GetHeader(header.ParentHash, number-1), 則各自的block在驗證header之前取父塊失敗,在驗證header之前就返回錯誤consensus.ErrUnknownAncestor,
這時這個塊會給有可能放入futureBlocks的隊列裏, 前提是滿足這個塊的父塊在futureBlocks的中, 這個只有當它的父塊的時間在當前處理時間之後,即這裏給直接給丟棄。