|
|
@ -569,11 +569,11 @@ func testInsertNonceError(t *testing.T, full bool) { |
|
|
|
func TestFastVsFullChains(t *testing.T) { |
|
|
|
func TestFastVsFullChains(t *testing.T) { |
|
|
|
// Configure and generate a sample block chain
|
|
|
|
// Configure and generate a sample block chain
|
|
|
|
var ( |
|
|
|
var ( |
|
|
|
gendb, _ = ethdb.NewMemDatabase() |
|
|
|
gendb = ethdb.NewMemDatabase() |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
|
gspec = &Genesis{ |
|
|
|
gspec = &Genesis{ |
|
|
|
Config: params.TestChainConfig, |
|
|
|
Config: params.TestChainConfig, |
|
|
|
Alloc: GenesisAlloc{address: {Balance: funds}}, |
|
|
|
Alloc: GenesisAlloc{address: {Balance: funds}}, |
|
|
|
} |
|
|
|
} |
|
|
@ -599,7 +599,7 @@ func TestFastVsFullChains(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
// Import the chain as an archive node for the comparison baseline
|
|
|
|
// Import the chain as an archive node for the comparison baseline
|
|
|
|
archiveDb, _ := ethdb.NewMemDatabase() |
|
|
|
archiveDb := ethdb.NewMemDatabase() |
|
|
|
gspec.MustCommit(archiveDb) |
|
|
|
gspec.MustCommit(archiveDb) |
|
|
|
archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
defer archive.Stop() |
|
|
|
defer archive.Stop() |
|
|
@ -608,7 +608,7 @@ func TestFastVsFullChains(t *testing.T) { |
|
|
|
t.Fatalf("failed to process block %d: %v", n, err) |
|
|
|
t.Fatalf("failed to process block %d: %v", n, err) |
|
|
|
} |
|
|
|
} |
|
|
|
// Fast import the chain as a non-archive node to test
|
|
|
|
// Fast import the chain as a non-archive node to test
|
|
|
|
fastDb, _ := ethdb.NewMemDatabase() |
|
|
|
fastDb := ethdb.NewMemDatabase() |
|
|
|
gspec.MustCommit(fastDb) |
|
|
|
gspec.MustCommit(fastDb) |
|
|
|
fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
defer fast.Stop() |
|
|
|
defer fast.Stop() |
|
|
@ -657,12 +657,12 @@ func TestFastVsFullChains(t *testing.T) { |
|
|
|
func TestLightVsFastVsFullChainHeads(t *testing.T) { |
|
|
|
func TestLightVsFastVsFullChainHeads(t *testing.T) { |
|
|
|
// Configure and generate a sample block chain
|
|
|
|
// Configure and generate a sample block chain
|
|
|
|
var ( |
|
|
|
var ( |
|
|
|
gendb, _ = ethdb.NewMemDatabase() |
|
|
|
gendb = ethdb.NewMemDatabase() |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
|
gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{address: {Balance: funds}}} |
|
|
|
gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{address: {Balance: funds}}} |
|
|
|
genesis = gspec.MustCommit(gendb) |
|
|
|
genesis = gspec.MustCommit(gendb) |
|
|
|
) |
|
|
|
) |
|
|
|
height := uint64(1024) |
|
|
|
height := uint64(1024) |
|
|
|
blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), nil) |
|
|
|
blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), nil) |
|
|
@ -685,7 +685,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// Import the chain as an archive node and ensure all pointers are updated
|
|
|
|
// Import the chain as an archive node and ensure all pointers are updated
|
|
|
|
archiveDb, _ := ethdb.NewMemDatabase() |
|
|
|
archiveDb := ethdb.NewMemDatabase() |
|
|
|
gspec.MustCommit(archiveDb) |
|
|
|
gspec.MustCommit(archiveDb) |
|
|
|
|
|
|
|
|
|
|
|
archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
@ -699,7 +699,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { |
|
|
|
assert(t, "archive", archive, height/2, height/2, height/2) |
|
|
|
assert(t, "archive", archive, height/2, height/2, height/2) |
|
|
|
|
|
|
|
|
|
|
|
// Import the chain as a non-archive node and ensure all pointers are updated
|
|
|
|
// Import the chain as a non-archive node and ensure all pointers are updated
|
|
|
|
fastDb, _ := ethdb.NewMemDatabase() |
|
|
|
fastDb := ethdb.NewMemDatabase() |
|
|
|
gspec.MustCommit(fastDb) |
|
|
|
gspec.MustCommit(fastDb) |
|
|
|
fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
defer fast.Stop() |
|
|
|
defer fast.Stop() |
|
|
@ -719,7 +719,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { |
|
|
|
assert(t, "fast", fast, height/2, height/2, 0) |
|
|
|
assert(t, "fast", fast, height/2, height/2, 0) |
|
|
|
|
|
|
|
|
|
|
|
// Import the chain as a light node and ensure all pointers are updated
|
|
|
|
// Import the chain as a light node and ensure all pointers are updated
|
|
|
|
lightDb, _ := ethdb.NewMemDatabase() |
|
|
|
lightDb := ethdb.NewMemDatabase() |
|
|
|
gspec.MustCommit(lightDb) |
|
|
|
gspec.MustCommit(lightDb) |
|
|
|
|
|
|
|
|
|
|
|
light, _ := NewBlockChain(lightDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
|
light, _ := NewBlockChain(lightDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}) |
|
|
@ -742,7 +742,7 @@ func TestChainTxReorgs(t *testing.T) { |
|
|
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey) |
|
|
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey) |
|
|
|
addr2 = crypto.PubkeyToAddress(key2.PublicKey) |
|
|
|
addr2 = crypto.PubkeyToAddress(key2.PublicKey) |
|
|
|
addr3 = crypto.PubkeyToAddress(key3.PublicKey) |
|
|
|
addr3 = crypto.PubkeyToAddress(key3.PublicKey) |
|
|
|
db, _ = ethdb.NewMemDatabase() |
|
|
|
db = ethdb.NewMemDatabase() |
|
|
|
gspec = &Genesis{ |
|
|
|
gspec = &Genesis{ |
|
|
|
Config: params.TestChainConfig, |
|
|
|
Config: params.TestChainConfig, |
|
|
|
GasLimit: 3141592, |
|
|
|
GasLimit: 3141592, |
|
|
@ -854,7 +854,7 @@ func TestLogReorgs(t *testing.T) { |
|
|
|
var ( |
|
|
|
var ( |
|
|
|
key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey) |
|
|
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey) |
|
|
|
db, _ = ethdb.NewMemDatabase() |
|
|
|
db = ethdb.NewMemDatabase() |
|
|
|
// this code generates a log
|
|
|
|
// this code generates a log
|
|
|
|
code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") |
|
|
|
code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") |
|
|
|
gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} |
|
|
|
gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} |
|
|
@ -898,7 +898,7 @@ func TestLogReorgs(t *testing.T) { |
|
|
|
|
|
|
|
|
|
|
|
func TestReorgSideEvent(t *testing.T) { |
|
|
|
func TestReorgSideEvent(t *testing.T) { |
|
|
|
var ( |
|
|
|
var ( |
|
|
|
db, _ = ethdb.NewMemDatabase() |
|
|
|
db = ethdb.NewMemDatabase() |
|
|
|
key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey) |
|
|
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey) |
|
|
|
gspec = &Genesis{ |
|
|
|
gspec = &Genesis{ |
|
|
@ -1026,7 +1026,7 @@ func TestCanonicalBlockRetrieval(t *testing.T) { |
|
|
|
func TestEIP155Transition(t *testing.T) { |
|
|
|
func TestEIP155Transition(t *testing.T) { |
|
|
|
// Configure and generate a sample block chain
|
|
|
|
// Configure and generate a sample block chain
|
|
|
|
var ( |
|
|
|
var ( |
|
|
|
db, _ = ethdb.NewMemDatabase() |
|
|
|
db = ethdb.NewMemDatabase() |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
@ -1130,7 +1130,7 @@ func TestEIP155Transition(t *testing.T) { |
|
|
|
func TestEIP161AccountRemoval(t *testing.T) { |
|
|
|
func TestEIP161AccountRemoval(t *testing.T) { |
|
|
|
// Configure and generate a sample block chain
|
|
|
|
// Configure and generate a sample block chain
|
|
|
|
var ( |
|
|
|
var ( |
|
|
|
db, _ = ethdb.NewMemDatabase() |
|
|
|
db = ethdb.NewMemDatabase() |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
address = crypto.PubkeyToAddress(key.PublicKey) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
|
funds = big.NewInt(1000000000) |
|
|
@ -1202,7 +1202,7 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { |
|
|
|
// Generate a canonical chain to act as the main dataset
|
|
|
|
// Generate a canonical chain to act as the main dataset
|
|
|
|
engine := ethash.NewFaker() |
|
|
|
engine := ethash.NewFaker() |
|
|
|
|
|
|
|
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
db := ethdb.NewMemDatabase() |
|
|
|
genesis := new(Genesis).MustCommit(db) |
|
|
|
genesis := new(Genesis).MustCommit(db) |
|
|
|
blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) |
|
|
|
blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) |
|
|
|
|
|
|
|
|
|
|
@ -1218,7 +1218,7 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
// Import the canonical and fork chain side by side, verifying the current block
|
|
|
|
// Import the canonical and fork chain side by side, verifying the current block
|
|
|
|
// and current header consistency
|
|
|
|
// and current header consistency
|
|
|
|
diskdb, _ := ethdb.NewMemDatabase() |
|
|
|
diskdb := ethdb.NewMemDatabase() |
|
|
|
new(Genesis).MustCommit(diskdb) |
|
|
|
new(Genesis).MustCommit(diskdb) |
|
|
|
|
|
|
|
|
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
@ -1247,7 +1247,7 @@ func TestTrieForkGC(t *testing.T) { |
|
|
|
// Generate a canonical chain to act as the main dataset
|
|
|
|
// Generate a canonical chain to act as the main dataset
|
|
|
|
engine := ethash.NewFaker() |
|
|
|
engine := ethash.NewFaker() |
|
|
|
|
|
|
|
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
db := ethdb.NewMemDatabase() |
|
|
|
genesis := new(Genesis).MustCommit(db) |
|
|
|
genesis := new(Genesis).MustCommit(db) |
|
|
|
blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*triesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) |
|
|
|
blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*triesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) |
|
|
|
|
|
|
|
|
|
|
@ -1262,7 +1262,7 @@ func TestTrieForkGC(t *testing.T) { |
|
|
|
forks[i] = fork[0] |
|
|
|
forks[i] = fork[0] |
|
|
|
} |
|
|
|
} |
|
|
|
// Import the canonical and fork chain side by side, forcing the trie cache to cache both
|
|
|
|
// Import the canonical and fork chain side by side, forcing the trie cache to cache both
|
|
|
|
diskdb, _ := ethdb.NewMemDatabase() |
|
|
|
diskdb := ethdb.NewMemDatabase() |
|
|
|
new(Genesis).MustCommit(diskdb) |
|
|
|
new(Genesis).MustCommit(diskdb) |
|
|
|
|
|
|
|
|
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
@ -1293,7 +1293,7 @@ func TestLargeReorgTrieGC(t *testing.T) { |
|
|
|
// Generate the original common chain segment and the two competing forks
|
|
|
|
// Generate the original common chain segment and the two competing forks
|
|
|
|
engine := ethash.NewFaker() |
|
|
|
engine := ethash.NewFaker() |
|
|
|
|
|
|
|
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
db := ethdb.NewMemDatabase() |
|
|
|
genesis := new(Genesis).MustCommit(db) |
|
|
|
genesis := new(Genesis).MustCommit(db) |
|
|
|
|
|
|
|
|
|
|
|
shared, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) |
|
|
|
shared, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) |
|
|
@ -1301,7 +1301,7 @@ func TestLargeReorgTrieGC(t *testing.T) { |
|
|
|
competitor, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*triesInMemory+1, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{3}) }) |
|
|
|
competitor, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*triesInMemory+1, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{3}) }) |
|
|
|
|
|
|
|
|
|
|
|
// Import the shared chain and the original canonical one
|
|
|
|
// Import the shared chain and the original canonical one
|
|
|
|
diskdb, _ := ethdb.NewMemDatabase() |
|
|
|
diskdb := ethdb.NewMemDatabase() |
|
|
|
new(Genesis).MustCommit(diskdb) |
|
|
|
new(Genesis).MustCommit(diskdb) |
|
|
|
|
|
|
|
|
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
@ -1361,7 +1361,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in |
|
|
|
) |
|
|
|
) |
|
|
|
// Generate the original common chain segment and the two competing forks
|
|
|
|
// Generate the original common chain segment and the two competing forks
|
|
|
|
engine := ethash.NewFaker() |
|
|
|
engine := ethash.NewFaker() |
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
db := ethdb.NewMemDatabase() |
|
|
|
genesis := gspec.MustCommit(db) |
|
|
|
genesis := gspec.MustCommit(db) |
|
|
|
|
|
|
|
|
|
|
|
blockGenerator := func(i int, block *BlockGen) { |
|
|
|
blockGenerator := func(i int, block *BlockGen) { |
|
|
@ -1383,7 +1383,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in |
|
|
|
b.ResetTimer() |
|
|
|
b.ResetTimer() |
|
|
|
for i := 0; i < b.N; i++ { |
|
|
|
for i := 0; i < b.N; i++ { |
|
|
|
// Import the shared chain and the original canonical one
|
|
|
|
// Import the shared chain and the original canonical one
|
|
|
|
diskdb, _ := ethdb.NewMemDatabase() |
|
|
|
diskdb := ethdb.NewMemDatabase() |
|
|
|
gspec.MustCommit(diskdb) |
|
|
|
gspec.MustCommit(diskdb) |
|
|
|
|
|
|
|
|
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
|
chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}) |
|
|
|