分叉前:
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的中, 这个只有当它的父块的时间在当前处理时间之后,即这里给直接给丢弃。