@ -43,24 +43,26 @@ func TestCreation(t *testing.T) {
params . MainnetChainConfig ,
params . MainnetChainConfig ,
params . MainnetGenesisHash ,
params . MainnetGenesisHash ,
[ ] testcase {
[ ] testcase {
{ 0 , ID { Hash : checksumToBytes ( 0xfc64ec04 ) , Next : 1150000 } } , // Unsynced
{ 0 , ID { Hash : checksumToBytes ( 0xfc64ec04 ) , Next : 1150000 } } , // Unsynced
{ 1149999 , ID { Hash : checksumToBytes ( 0xfc64ec04 ) , Next : 1150000 } } , // Last Frontier block
{ 1149999 , ID { Hash : checksumToBytes ( 0xfc64ec04 ) , Next : 1150000 } } , // Last Frontier block
{ 1150000 , ID { Hash : checksumToBytes ( 0x97c2c34c ) , Next : 1920000 } } , // First Homestead block
{ 1150000 , ID { Hash : checksumToBytes ( 0x97c2c34c ) , Next : 1920000 } } , // First Homestead block
{ 1919999 , ID { Hash : checksumToBytes ( 0x97c2c34c ) , Next : 1920000 } } , // Last Homestead block
{ 1919999 , ID { Hash : checksumToBytes ( 0x97c2c34c ) , Next : 1920000 } } , // Last Homestead block
{ 1920000 , ID { Hash : checksumToBytes ( 0x91d1f948 ) , Next : 2463000 } } , // First DAO block
{ 1920000 , ID { Hash : checksumToBytes ( 0x91d1f948 ) , Next : 2463000 } } , // First DAO block
{ 2462999 , ID { Hash : checksumToBytes ( 0x91d1f948 ) , Next : 2463000 } } , // Last DAO block
{ 2462999 , ID { Hash : checksumToBytes ( 0x91d1f948 ) , Next : 2463000 } } , // Last DAO block
{ 2463000 , ID { Hash : checksumToBytes ( 0x7a64da13 ) , Next : 2675000 } } , // First Tangerine block
{ 2463000 , ID { Hash : checksumToBytes ( 0x7a64da13 ) , Next : 2675000 } } , // First Tangerine block
{ 2674999 , ID { Hash : checksumToBytes ( 0x7a64da13 ) , Next : 2675000 } } , // Last Tangerine block
{ 2674999 , ID { Hash : checksumToBytes ( 0x7a64da13 ) , Next : 2675000 } } , // Last Tangerine block
{ 2675000 , ID { Hash : checksumToBytes ( 0x3edd5b10 ) , Next : 4370000 } } , // First Spurious block
{ 2675000 , ID { Hash : checksumToBytes ( 0x3edd5b10 ) , Next : 4370000 } } , // First Spurious block
{ 4369999 , ID { Hash : checksumToBytes ( 0x3edd5b10 ) , Next : 4370000 } } , // Last Spurious block
{ 4369999 , ID { Hash : checksumToBytes ( 0x3edd5b10 ) , Next : 4370000 } } , // Last Spurious block
{ 4370000 , ID { Hash : checksumToBytes ( 0xa00bc324 ) , Next : 7280000 } } , // First Byzantium block
{ 4370000 , ID { Hash : checksumToBytes ( 0xa00bc324 ) , Next : 7280000 } } , // First Byzantium block
{ 7279999 , ID { Hash : checksumToBytes ( 0xa00bc324 ) , Next : 7280000 } } , // Last Byzantium block
{ 7279999 , ID { Hash : checksumToBytes ( 0xa00bc324 ) , Next : 7280000 } } , // Last Byzantium block
{ 7280000 , ID { Hash : checksumToBytes ( 0x668db0af ) , Next : 9069000 } } , // First and last Constantinople, first Petersburg block
{ 7280000 , ID { Hash : checksumToBytes ( 0x668db0af ) , Next : 9069000 } } , // First and last Constantinople, first Petersburg block
{ 9068999 , ID { Hash : checksumToBytes ( 0x668db0af ) , Next : 9069000 } } , // Last Petersburg block
{ 9068999 , ID { Hash : checksumToBytes ( 0x668db0af ) , Next : 9069000 } } , // Last Petersburg block
{ 9069000 , ID { Hash : checksumToBytes ( 0x879d6e30 ) , Next : 9200000 } } , // First Istanbul and first Muir Glacier block
{ 9069000 , ID { Hash : checksumToBytes ( 0x879d6e30 ) , Next : 9200000 } } , // First Istanbul and first Muir Glacier block
{ 9199999 , ID { Hash : checksumToBytes ( 0x879d6e30 ) , Next : 9200000 } } , // Last Istanbul and first Muir Glacier block
{ 9199999 , ID { Hash : checksumToBytes ( 0x879d6e30 ) , Next : 9200000 } } , // Last Istanbul and first Muir Glacier block
{ 9200000 , ID { Hash : checksumToBytes ( 0xe029e991 ) , Next : 0 } } , // First Muir Glacier block
{ 9200000 , ID { Hash : checksumToBytes ( 0xe029e991 ) , Next : 12244000 } } , // First Muir Glacier block
{ 12243999 , ID { Hash : checksumToBytes ( 0xe029e991 ) , Next : 0 } } , // Future Muir Glacier block
{ 12243999 , ID { Hash : checksumToBytes ( 0xe029e991 ) , Next : 12244000 } } , // Last Muir Glacier block
{ 12244000 , ID { Hash : checksumToBytes ( 0x0eb440f6 ) , Next : 0 } } , // First Berlin block
{ 20000000 , ID { Hash : checksumToBytes ( 0x0eb440f6 ) , Next : 0 } } , // Future Berlin block
} ,
} ,
} ,
} ,
// Ropsten test cases
// Ropsten test cases
@ -80,8 +82,10 @@ func TestCreation(t *testing.T) {
{ 6485845 , ID { Hash : checksumToBytes ( 0xd6e2149b ) , Next : 6485846 } } , // Last Petersburg block
{ 6485845 , ID { Hash : checksumToBytes ( 0xd6e2149b ) , Next : 6485846 } } , // Last Petersburg block
{ 6485846 , ID { Hash : checksumToBytes ( 0x4bc66396 ) , Next : 7117117 } } , // First Istanbul block
{ 6485846 , ID { Hash : checksumToBytes ( 0x4bc66396 ) , Next : 7117117 } } , // First Istanbul block
{ 7117116 , ID { Hash : checksumToBytes ( 0x4bc66396 ) , Next : 7117117 } } , // Last Istanbul block
{ 7117116 , ID { Hash : checksumToBytes ( 0x4bc66396 ) , Next : 7117117 } } , // Last Istanbul block
{ 7117117 , ID { Hash : checksumToBytes ( 0x6727ef90 ) , Next : 0 } } , // First Muir Glacier block
{ 7117117 , ID { Hash : checksumToBytes ( 0x6727ef90 ) , Next : 9812189 } } , // First Muir Glacier block
{ 9812188 , ID { Hash : checksumToBytes ( 0x6727ef90 ) , Next : 0 } } , // Future Muir Glacier block
{ 9812188 , ID { Hash : checksumToBytes ( 0x6727ef90 ) , Next : 9812189 } } , // Last Muir Glacier block
{ 9812189 , ID { Hash : checksumToBytes ( 0xa157d377 ) , Next : 0 } } , // First Berlin block
{ 10000000 , ID { Hash : checksumToBytes ( 0xa157d377 ) , Next : 0 } } , // Future Berlin block
} ,
} ,
} ,
} ,
// Rinkeby test cases
// Rinkeby test cases
@ -100,8 +104,10 @@ func TestCreation(t *testing.T) {
{ 4321233 , ID { Hash : checksumToBytes ( 0xe49cab14 ) , Next : 4321234 } } , // Last Constantinople block
{ 4321233 , ID { Hash : checksumToBytes ( 0xe49cab14 ) , Next : 4321234 } } , // Last Constantinople block
{ 4321234 , ID { Hash : checksumToBytes ( 0xafec6b27 ) , Next : 5435345 } } , // First Petersburg block
{ 4321234 , ID { Hash : checksumToBytes ( 0xafec6b27 ) , Next : 5435345 } } , // First Petersburg block
{ 5435344 , ID { Hash : checksumToBytes ( 0xafec6b27 ) , Next : 5435345 } } , // Last Petersburg block
{ 5435344 , ID { Hash : checksumToBytes ( 0xafec6b27 ) , Next : 5435345 } } , // Last Petersburg block
{ 5435345 , ID { Hash : checksumToBytes ( 0xcbdb8838 ) , Next : 0 } } , // First Istanbul block
{ 5435345 , ID { Hash : checksumToBytes ( 0xcbdb8838 ) , Next : 8290928 } } , // First Istanbul block
{ 8290927 , ID { Hash : checksumToBytes ( 0xcbdb8838 ) , Next : 0 } } , // Future Istanbul block
{ 8290927 , ID { Hash : checksumToBytes ( 0xcbdb8838 ) , Next : 8290928 } } , // Last Istanbul block
{ 8290928 , ID { Hash : checksumToBytes ( 0x6910c8bd ) , Next : 0 } } , // First Berlin block
{ 10000000 , ID { Hash : checksumToBytes ( 0x6910c8bd ) , Next : 0 } } , // Future Berlin block
} ,
} ,
} ,
} ,
// Goerli test cases
// Goerli test cases
@ -111,8 +117,10 @@ func TestCreation(t *testing.T) {
[ ] testcase {
[ ] testcase {
{ 0 , ID { Hash : checksumToBytes ( 0xa3f5ab08 ) , Next : 1561651 } } , // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople and first Petersburg block
{ 0 , ID { Hash : checksumToBytes ( 0xa3f5ab08 ) , Next : 1561651 } } , // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople and first Petersburg block
{ 1561650 , ID { Hash : checksumToBytes ( 0xa3f5ab08 ) , Next : 1561651 } } , // Last Petersburg block
{ 1561650 , ID { Hash : checksumToBytes ( 0xa3f5ab08 ) , Next : 1561651 } } , // Last Petersburg block
{ 1561651 , ID { Hash : checksumToBytes ( 0xc25efa5c ) , Next : 0 } } , // First Istanbul block
{ 1561651 , ID { Hash : checksumToBytes ( 0xc25efa5c ) , Next : 4460644 } } , // First Istanbul block
{ 4460643 , ID { Hash : checksumToBytes ( 0xc25efa5c ) , Next : 0 } } , // Future Istanbul block
{ 4460643 , ID { Hash : checksumToBytes ( 0xc25efa5c ) , Next : 4460644 } } , // Last Istanbul block
{ 4460644 , ID { Hash : checksumToBytes ( 0x757a1c47 ) , Next : 0 } } , // First Berlin block
{ 5000000 , ID { Hash : checksumToBytes ( 0x757a1c47 ) , Next : 0 } } , // Future Berlin block
} ,
} ,
} ,
} ,
}
}
@ -185,7 +193,7 @@ func TestValidation(t *testing.T) {
// Local is mainnet Petersburg, remote is Rinkeby Petersburg.
// Local is mainnet Petersburg, remote is Rinkeby Petersburg.
{ 7987396 , ID { Hash : checksumToBytes ( 0xafec6b27 ) , Next : 0 } , ErrLocalIncompatibleOrStale } ,
{ 7987396 , ID { Hash : checksumToBytes ( 0xafec6b27 ) , Next : 0 } , ErrLocalIncompatibleOrStale } ,
// Local is mainnet Istanbul , far in the future. Remote announces Gopherium (non existing fork)
// Local is mainnet Berlin , far in the future. Remote announces Gopherium (non existing fork)
// at some future block 88888888, for itself, but past block for local. Local is incompatible.
// at some future block 88888888, for itself, but past block for local. Local is incompatible.
//
//
// This case detects non-upgraded nodes with majority hash power (typical Ropsten mess).
// This case detects non-upgraded nodes with majority hash power (typical Ropsten mess).