etc dao分叉分析

  
分叉前:
  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的中, 這個只有當它的父塊的時間在當前處理時間之後,即這裏給直接給丟棄。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章