core: fix broken tests due to API changes + linter
This commit is contained in:
		
							parent
							
								
									19099421dc
								
							
						
					
					
						commit
						06d4470b41
					
				@ -144,7 +144,7 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		statedb, err := state.New(blockchain.GetBlockByHash(block.ParentHash()).Root(), blockchain.stateCache)
 | 
							statedb, err := state.New(blockchain.GetBlockByHash(block.ParentHash()).Root(), blockchain.stateCache, nil)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,7 @@ func TestNodeIteratorCoverage(t *testing.T) {
 | 
				
			|||||||
	// Create some arbitrary test state to iterate
 | 
						// Create some arbitrary test state to iterate
 | 
				
			||||||
	db, root, _ := makeTestState()
 | 
						db, root, _ := makeTestState()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	state, err := New(root, db)
 | 
						state, err := New(root, db, nil)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create state trie at %x: %v", root, err)
 | 
							t.Fatalf("failed to create state trie at %x: %v", root, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -478,7 +478,7 @@ func (dl *diffLayer) StorageList(accountHash common.Hash) []common.Hash {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	storageMap := dl.storageData[accountHash]
 | 
						storageMap := dl.storageData[accountHash]
 | 
				
			||||||
	storageList := make([]common.Hash, 0, len(storageMap))
 | 
						storageList := make([]common.Hash, 0, len(storageMap))
 | 
				
			||||||
	for k, _ := range storageMap {
 | 
						for k := range storageMap {
 | 
				
			||||||
		storageList = append(storageList, k)
 | 
							storageList = append(storageList, k)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sort.Sort(hashes(storageList))
 | 
						sort.Sort(hashes(storageList))
 | 
				
			||||||
 | 
				
			|||||||
@ -167,7 +167,7 @@ func TestInsertAndMerge(t *testing.T) {
 | 
				
			|||||||
	merged := (child.flatten()).(*diffLayer)
 | 
						merged := (child.flatten()).(*diffLayer)
 | 
				
			||||||
	{ // Check that slot value is present
 | 
						{ // Check that slot value is present
 | 
				
			||||||
		got, _ := merged.Storage(acc, slot)
 | 
							got, _ := merged.Storage(acc, slot)
 | 
				
			||||||
		if exp := []byte{0x01}; bytes.Compare(got, exp) != 0 {
 | 
							if exp := []byte{0x01}; !bytes.Equal(got, exp) {
 | 
				
			||||||
			t.Errorf("merged slot value wrong, got %x, exp %x", got, exp)
 | 
								t.Errorf("merged slot value wrong, got %x, exp %x", got, exp)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -310,7 +310,7 @@ func TestDiskPartialMerge(t *testing.T) {
 | 
				
			|||||||
			t.Helper()
 | 
								t.Helper()
 | 
				
			||||||
			blob, err := base.AccountRLP(account)
 | 
								blob, err := base.AccountRLP(account)
 | 
				
			||||||
			if bytes.Compare(account[:], genMarker) > 0 && err != ErrNotCoveredYet {
 | 
								if bytes.Compare(account[:], genMarker) > 0 && err != ErrNotCoveredYet {
 | 
				
			||||||
				t.Fatalf("test %d: post-marker (%x) account access (%x) succeded: %x", i, genMarker, account, blob)
 | 
									t.Fatalf("test %d: post-marker (%x) account access (%x) succeeded: %x", i, genMarker, account, blob)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if bytes.Compare(account[:], genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
								if bytes.Compare(account[:], genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
				
			||||||
				t.Fatalf("test %d: pre-marker (%x) account access (%x) mismatch: have %x, want %x", i, genMarker, account, blob, data)
 | 
									t.Fatalf("test %d: pre-marker (%x) account access (%x) mismatch: have %x, want %x", i, genMarker, account, blob, data)
 | 
				
			||||||
@ -326,7 +326,7 @@ func TestDiskPartialMerge(t *testing.T) {
 | 
				
			|||||||
			t.Helper()
 | 
								t.Helper()
 | 
				
			||||||
			blob, err := base.Storage(account, slot)
 | 
								blob, err := base.Storage(account, slot)
 | 
				
			||||||
			if bytes.Compare(append(account[:], slot[:]...), genMarker) > 0 && err != ErrNotCoveredYet {
 | 
								if bytes.Compare(append(account[:], slot[:]...), genMarker) > 0 && err != ErrNotCoveredYet {
 | 
				
			||||||
				t.Fatalf("test %d: post-marker (%x) storage access (%x:%x) succeded: %x", i, genMarker, account, slot, blob)
 | 
									t.Fatalf("test %d: post-marker (%x) storage access (%x:%x) succeeded: %x", i, genMarker, account, slot, blob)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
								if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
				
			||||||
				t.Fatalf("test %d: pre-marker (%x) storage access (%x:%x) mismatch: have %x, want %x", i, genMarker, account, slot, blob, data)
 | 
									t.Fatalf("test %d: pre-marker (%x) storage access (%x:%x) mismatch: have %x, want %x", i, genMarker, account, slot, blob, data)
 | 
				
			||||||
@ -386,7 +386,7 @@ func TestDiskPartialMerge(t *testing.T) {
 | 
				
			|||||||
			t.Helper()
 | 
								t.Helper()
 | 
				
			||||||
			blob := rawdb.ReadAccountSnapshot(db, account)
 | 
								blob := rawdb.ReadAccountSnapshot(db, account)
 | 
				
			||||||
			if bytes.Compare(account[:], genMarker) > 0 && blob != nil {
 | 
								if bytes.Compare(account[:], genMarker) > 0 && blob != nil {
 | 
				
			||||||
				t.Fatalf("test %d: post-marker (%x) account database access (%x) succeded: %x", i, genMarker, account, blob)
 | 
									t.Fatalf("test %d: post-marker (%x) account database access (%x) succeeded: %x", i, genMarker, account, blob)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if bytes.Compare(account[:], genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
								if bytes.Compare(account[:], genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
				
			||||||
				t.Fatalf("test %d: pre-marker (%x) account database access (%x) mismatch: have %x, want %x", i, genMarker, account, blob, data)
 | 
									t.Fatalf("test %d: pre-marker (%x) account database access (%x) mismatch: have %x, want %x", i, genMarker, account, blob, data)
 | 
				
			||||||
@ -406,7 +406,7 @@ func TestDiskPartialMerge(t *testing.T) {
 | 
				
			|||||||
			t.Helper()
 | 
								t.Helper()
 | 
				
			||||||
			blob := rawdb.ReadStorageSnapshot(db, account, slot)
 | 
								blob := rawdb.ReadStorageSnapshot(db, account, slot)
 | 
				
			||||||
			if bytes.Compare(append(account[:], slot[:]...), genMarker) > 0 && blob != nil {
 | 
								if bytes.Compare(append(account[:], slot[:]...), genMarker) > 0 && blob != nil {
 | 
				
			||||||
				t.Fatalf("test %d: post-marker (%x) storage database access (%x:%x) succeded: %x", i, genMarker, account, slot, blob)
 | 
									t.Fatalf("test %d: post-marker (%x) storage database access (%x:%x) succeeded: %x", i, genMarker, account, slot, blob)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
								if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 && !bytes.Equal(blob, data) {
 | 
				
			||||||
				t.Fatalf("test %d: pre-marker (%x) storage database access (%x:%x) mismatch: have %x, want %x", i, genMarker, account, slot, blob, data)
 | 
									t.Fatalf("test %d: pre-marker (%x) storage database access (%x:%x) mismatch: have %x, want %x", i, genMarker, account, slot, blob, data)
 | 
				
			||||||
 | 
				
			|||||||
@ -93,7 +93,7 @@ func (gs *generatorStats) Log(msg string, marker []byte) {
 | 
				
			|||||||
// and generation is continued in the background until done.
 | 
					// and generation is continued in the background until done.
 | 
				
			||||||
func generateSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache int, root common.Hash, wiper chan struct{}) *diskLayer {
 | 
					func generateSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache int, root common.Hash, wiper chan struct{}) *diskLayer {
 | 
				
			||||||
	// Wipe any previously existing snapshot from the database if no wiper is
 | 
						// Wipe any previously existing snapshot from the database if no wiper is
 | 
				
			||||||
	// currenty in progress.
 | 
						// currently in progress.
 | 
				
			||||||
	if wiper == nil {
 | 
						if wiper == nil {
 | 
				
			||||||
		wiper = wipeSnapshot(diskdb, true)
 | 
							wiper = wipeSnapshot(diskdb, true)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,60 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
## How the fast iterator works
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Consider the following example, where we have `6` iterators, sorted from
 | 
					 | 
				
			||||||
left to right in ascending order.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Our 'primary' `A` iterator is on the left, containing the elements `[0,1,8]`
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 A  B  C  D  E  F
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 0  1  2  4  7  9
 | 
					 | 
				
			||||||
 1  2  9  -  14 13
 | 
					 | 
				
			||||||
 8  8  -     15 15
 | 
					 | 
				
			||||||
 -  -        -  16
 | 
					 | 
				
			||||||
                 -
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
When we call `Next` on the primary iterator, we get (ignoring the future keys)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
A  B  C  D  E  F
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1  1  2  4  7  9
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
We detect that we now got an equality between our element and the next element.
 | 
					 | 
				
			||||||
And we need to continue `Next`ing on the next element
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
1  2  2  4  7  9
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
And move on:
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
A  B  C  D  E  F
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1  2  9  4  7  9
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
Now we broke out of the equality, but we need to re-sort the element `C`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
A  B  D  E  F  C
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1  2  4  7  9  9
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
And after shifting it rightwards, we check equality again, and find `C == F`, and thus
 | 
					 | 
				
			||||||
call `Next` on `C`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
A  B  D  E  F  C
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1  2  4  7  9  -
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
At this point, `C` was exhausted, and is removed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
A  B  D  E  F
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1  2  4  7  9
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
And we're done with this step.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -35,7 +35,7 @@ type binaryAccountIterator struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// newBinaryAccountIterator creates a simplistic account iterator to step over
 | 
					// newBinaryAccountIterator creates a simplistic account iterator to step over
 | 
				
			||||||
// all the accounts in a slow, but eaily verifyable way.
 | 
					// all the accounts in a slow, but eaily verifiable way.
 | 
				
			||||||
func (dl *diffLayer) newBinaryAccountIterator() AccountIterator {
 | 
					func (dl *diffLayer) newBinaryAccountIterator() AccountIterator {
 | 
				
			||||||
	parent, ok := dl.parent.(*diffLayer)
 | 
						parent, ok := dl.parent.(*diffLayer)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,7 @@ func (its weightedAccountIterators) Len() int { return len(its) }
 | 
				
			|||||||
// Less implements sort.Interface, returning which of two iterators in the stack
 | 
					// Less implements sort.Interface, returning which of two iterators in the stack
 | 
				
			||||||
// is before the other.
 | 
					// is before the other.
 | 
				
			||||||
func (its weightedAccountIterators) Less(i, j int) bool {
 | 
					func (its weightedAccountIterators) Less(i, j int) bool {
 | 
				
			||||||
	// Order the iterators primarilly by the account hashes
 | 
						// Order the iterators primarily by the account hashes
 | 
				
			||||||
	hashI := its[i].it.Hash()
 | 
						hashI := its[i].it.Hash()
 | 
				
			||||||
	hashJ := its[j].it.Hash()
 | 
						hashJ := its[j].it.Hash()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -131,7 +131,7 @@ func (fi *fastAccountIterator) init() {
 | 
				
			|||||||
				// determine which.
 | 
									// determine which.
 | 
				
			||||||
				//
 | 
									//
 | 
				
			||||||
				// This whole else-block can be avoided, if we instead
 | 
									// This whole else-block can be avoided, if we instead
 | 
				
			||||||
				// do an inital priority-sort of the iterators. If we do that,
 | 
									// do an initial priority-sort of the iterators. If we do that,
 | 
				
			||||||
				// then we'll only wind up here if a lower-priority (preferred) iterator
 | 
									// then we'll only wind up here if a lower-priority (preferred) iterator
 | 
				
			||||||
				// has the same value, and then we will always just continue.
 | 
									// has the same value, and then we will always just continue.
 | 
				
			||||||
				// However, it costs an extra sort, so it's probably not better
 | 
									// However, it costs an extra sort, so it's probably not better
 | 
				
			||||||
@ -233,16 +233,8 @@ func (fi *fastAccountIterator) next(idx int) bool {
 | 
				
			|||||||
		// The elem we're placing it next to has the same value,
 | 
							// The elem we're placing it next to has the same value,
 | 
				
			||||||
		// so whichever winds up on n+1 will need further iteraton
 | 
							// so whichever winds up on n+1 will need further iteraton
 | 
				
			||||||
		clash = n + 1
 | 
							clash = n + 1
 | 
				
			||||||
		if cur.priority < fi.iterators[n+1].priority {
 | 
					
 | 
				
			||||||
			// We can drop the iterator here
 | 
							return cur.priority < fi.iterators[n+1].priority
 | 
				
			||||||
			return true
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		// We need to move it one step further
 | 
					 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
		// TODO benchmark which is best, this works too:
 | 
					 | 
				
			||||||
		//clash = n
 | 
					 | 
				
			||||||
		//return true
 | 
					 | 
				
			||||||
		// Doing so should finish the current search earlier
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	fi.move(idx, index)
 | 
						fi.move(idx, index)
 | 
				
			||||||
	if clash != -1 {
 | 
						if clash != -1 {
 | 
				
			||||||
 | 
				
			|||||||
@ -67,14 +67,11 @@ func (ti *testIterator) Seek(common.Hash) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (ti *testIterator) Next() bool {
 | 
					func (ti *testIterator) Next() bool {
 | 
				
			||||||
	ti.values = ti.values[1:]
 | 
						ti.values = ti.values[1:]
 | 
				
			||||||
	if len(ti.values) == 0 {
 | 
						return len(ti.values) > 0
 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return true
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ti *testIterator) Error() error {
 | 
					func (ti *testIterator) Error() error {
 | 
				
			||||||
	panic("implement me")
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ti *testIterator) Hash() common.Hash {
 | 
					func (ti *testIterator) Hash() common.Hash {
 | 
				
			||||||
@ -82,7 +79,7 @@ func (ti *testIterator) Hash() common.Hash {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ti *testIterator) Account() []byte {
 | 
					func (ti *testIterator) Account() []byte {
 | 
				
			||||||
	panic("implement me")
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ti *testIterator) Release() {}
 | 
					func (ti *testIterator) Release() {}
 | 
				
			||||||
 | 
				
			|||||||
@ -164,7 +164,7 @@ func loadDiffLayer(parent snapshot, r *rlp.Stream) (snapshot, error) {
 | 
				
			|||||||
// Journal writes the persistent layer generator stats into a buffer to be stored
 | 
					// Journal writes the persistent layer generator stats into a buffer to be stored
 | 
				
			||||||
// in the database as the snapshot journal.
 | 
					// in the database as the snapshot journal.
 | 
				
			||||||
func (dl *diskLayer) Journal(buffer *bytes.Buffer) (common.Hash, error) {
 | 
					func (dl *diskLayer) Journal(buffer *bytes.Buffer) (common.Hash, error) {
 | 
				
			||||||
	// If the snapshot is currenty being generated, abort it
 | 
						// If the snapshot is currently being generated, abort it
 | 
				
			||||||
	var stats *generatorStats
 | 
						var stats *generatorStats
 | 
				
			||||||
	if dl.genAbort != nil {
 | 
						if dl.genAbort != nil {
 | 
				
			||||||
		abort := make(chan *generatorStats)
 | 
							abort := make(chan *generatorStats)
 | 
				
			||||||
 | 
				
			|||||||
@ -34,59 +34,3 @@ func (hs hashes) Less(i, j int) bool { return bytes.Compare(hs[i][:], hs[j][:])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Swap swaps the elements with indexes i and j.
 | 
					// Swap swaps the elements with indexes i and j.
 | 
				
			||||||
func (hs hashes) Swap(i, j int) { hs[i], hs[j] = hs[j], hs[i] }
 | 
					func (hs hashes) Swap(i, j int) { hs[i], hs[j] = hs[j], hs[i] }
 | 
				
			||||||
 | 
					 | 
				
			||||||
// merge combines two sorted lists of hashes into a combo sorted one.
 | 
					 | 
				
			||||||
func merge(a, b []common.Hash) []common.Hash {
 | 
					 | 
				
			||||||
	result := make([]common.Hash, len(a)+len(b))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	i := 0
 | 
					 | 
				
			||||||
	for len(a) > 0 && len(b) > 0 {
 | 
					 | 
				
			||||||
		if bytes.Compare(a[0][:], b[0][:]) < 0 {
 | 
					 | 
				
			||||||
			result[i] = a[0]
 | 
					 | 
				
			||||||
			a = a[1:]
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			result[i] = b[0]
 | 
					 | 
				
			||||||
			b = b[1:]
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		i++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for j := 0; j < len(a); j++ {
 | 
					 | 
				
			||||||
		result[i] = a[j]
 | 
					 | 
				
			||||||
		i++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for j := 0; j < len(b); j++ {
 | 
					 | 
				
			||||||
		result[i] = b[j]
 | 
					 | 
				
			||||||
		i++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return result
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// dedupMerge combines two sorted lists of hashes into a combo sorted one,
 | 
					 | 
				
			||||||
// and removes duplicates in the process
 | 
					 | 
				
			||||||
func dedupMerge(a, b []common.Hash) []common.Hash {
 | 
					 | 
				
			||||||
	result := make([]common.Hash, len(a)+len(b))
 | 
					 | 
				
			||||||
	i := 0
 | 
					 | 
				
			||||||
	for len(a) > 0 && len(b) > 0 {
 | 
					 | 
				
			||||||
		if diff := bytes.Compare(a[0][:], b[0][:]); diff < 0 {
 | 
					 | 
				
			||||||
			result[i] = a[0]
 | 
					 | 
				
			||||||
			a = a[1:]
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			result[i] = b[0]
 | 
					 | 
				
			||||||
			b = b[1:]
 | 
					 | 
				
			||||||
			// If they were equal, progress a too
 | 
					 | 
				
			||||||
			if diff == 0 {
 | 
					 | 
				
			||||||
				a = a[1:]
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		i++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for j := 0; j < len(a); j++ {
 | 
					 | 
				
			||||||
		result[i] = a[j]
 | 
					 | 
				
			||||||
		i++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for j := 0; j < len(b); j++ {
 | 
					 | 
				
			||||||
		result[i] = b[j]
 | 
					 | 
				
			||||||
		i++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return result[:i]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -36,7 +36,7 @@ type stateTest struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func newStateTest() *stateTest {
 | 
					func newStateTest() *stateTest {
 | 
				
			||||||
	db := rawdb.NewMemoryDatabase()
 | 
						db := rawdb.NewMemoryDatabase()
 | 
				
			||||||
	sdb, _ := New(common.Hash{}, NewDatabase(db))
 | 
						sdb, _ := New(common.Hash{}, NewDatabase(db), nil)
 | 
				
			||||||
	return &stateTest{db: db, state: sdb}
 | 
						return &stateTest{db: db, state: sdb}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -146,7 +146,7 @@ func TestSnapshotEmpty(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSnapshot2(t *testing.T) {
 | 
					func TestSnapshot2(t *testing.T) {
 | 
				
			||||||
	state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stateobjaddr0 := toAddr([]byte("so0"))
 | 
						stateobjaddr0 := toAddr([]byte("so0"))
 | 
				
			||||||
	stateobjaddr1 := toAddr([]byte("so1"))
 | 
						stateobjaddr1 := toAddr([]byte("so1"))
 | 
				
			||||||
 | 
				
			|||||||
@ -39,7 +39,7 @@ import (
 | 
				
			|||||||
func TestUpdateLeaks(t *testing.T) {
 | 
					func TestUpdateLeaks(t *testing.T) {
 | 
				
			||||||
	// Create an empty state database
 | 
						// Create an empty state database
 | 
				
			||||||
	db := rawdb.NewMemoryDatabase()
 | 
						db := rawdb.NewMemoryDatabase()
 | 
				
			||||||
	state, _ := New(common.Hash{}, NewDatabase(db))
 | 
						state, _ := New(common.Hash{}, NewDatabase(db), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Update it with some accounts
 | 
						// Update it with some accounts
 | 
				
			||||||
	for i := byte(0); i < 255; i++ {
 | 
						for i := byte(0); i < 255; i++ {
 | 
				
			||||||
@ -73,8 +73,8 @@ func TestIntermediateLeaks(t *testing.T) {
 | 
				
			|||||||
	// Create two state databases, one transitioning to the final state, the other final from the beginning
 | 
						// Create two state databases, one transitioning to the final state, the other final from the beginning
 | 
				
			||||||
	transDb := rawdb.NewMemoryDatabase()
 | 
						transDb := rawdb.NewMemoryDatabase()
 | 
				
			||||||
	finalDb := rawdb.NewMemoryDatabase()
 | 
						finalDb := rawdb.NewMemoryDatabase()
 | 
				
			||||||
	transState, _ := New(common.Hash{}, NewDatabase(transDb))
 | 
						transState, _ := New(common.Hash{}, NewDatabase(transDb), nil)
 | 
				
			||||||
	finalState, _ := New(common.Hash{}, NewDatabase(finalDb))
 | 
						finalState, _ := New(common.Hash{}, NewDatabase(finalDb), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	modify := func(state *StateDB, addr common.Address, i, tweak byte) {
 | 
						modify := func(state *StateDB, addr common.Address, i, tweak byte) {
 | 
				
			||||||
		state.SetBalance(addr, big.NewInt(int64(11*i)+int64(tweak)))
 | 
							state.SetBalance(addr, big.NewInt(int64(11*i)+int64(tweak)))
 | 
				
			||||||
@ -149,7 +149,7 @@ func TestIntermediateLeaks(t *testing.T) {
 | 
				
			|||||||
// https://github.com/ethereum/go-ethereum/pull/15549.
 | 
					// https://github.com/ethereum/go-ethereum/pull/15549.
 | 
				
			||||||
func TestCopy(t *testing.T) {
 | 
					func TestCopy(t *testing.T) {
 | 
				
			||||||
	// Create a random state test to copy and modify "independently"
 | 
						// Create a random state test to copy and modify "independently"
 | 
				
			||||||
	orig, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						orig, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i := byte(0); i < 255; i++ {
 | 
						for i := byte(0); i < 255; i++ {
 | 
				
			||||||
		obj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i}))
 | 
							obj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i}))
 | 
				
			||||||
@ -385,7 +385,7 @@ func (test *snapshotTest) String() string {
 | 
				
			|||||||
func (test *snapshotTest) run() bool {
 | 
					func (test *snapshotTest) run() bool {
 | 
				
			||||||
	// Run all actions and create snapshots.
 | 
						// Run all actions and create snapshots.
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
		state, _     = New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
							state, _     = New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
		snapshotRevs = make([]int, len(test.snapshots))
 | 
							snapshotRevs = make([]int, len(test.snapshots))
 | 
				
			||||||
		sindex       = 0
 | 
							sindex       = 0
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
@ -399,7 +399,7 @@ func (test *snapshotTest) run() bool {
 | 
				
			|||||||
	// Revert all snapshots in reverse order. Each revert must yield a state
 | 
						// Revert all snapshots in reverse order. Each revert must yield a state
 | 
				
			||||||
	// that is equivalent to fresh state with all actions up the snapshot applied.
 | 
						// that is equivalent to fresh state with all actions up the snapshot applied.
 | 
				
			||||||
	for sindex--; sindex >= 0; sindex-- {
 | 
						for sindex--; sindex >= 0; sindex-- {
 | 
				
			||||||
		checkstate, _ := New(common.Hash{}, state.Database())
 | 
							checkstate, _ := New(common.Hash{}, state.Database(), nil)
 | 
				
			||||||
		for _, action := range test.actions[:test.snapshots[sindex]] {
 | 
							for _, action := range test.actions[:test.snapshots[sindex]] {
 | 
				
			||||||
			action.fn(action, checkstate)
 | 
								action.fn(action, checkstate)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -477,7 +477,7 @@ func TestTouchDelete(t *testing.T) {
 | 
				
			|||||||
// TestCopyOfCopy tests that modified objects are carried over to the copy, and the copy of the copy.
 | 
					// TestCopyOfCopy tests that modified objects are carried over to the copy, and the copy of the copy.
 | 
				
			||||||
// See https://github.com/ethereum/go-ethereum/pull/15225#issuecomment-380191512
 | 
					// See https://github.com/ethereum/go-ethereum/pull/15225#issuecomment-380191512
 | 
				
			||||||
func TestCopyOfCopy(t *testing.T) {
 | 
					func TestCopyOfCopy(t *testing.T) {
 | 
				
			||||||
	state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	addr := common.HexToAddress("aaaa")
 | 
						addr := common.HexToAddress("aaaa")
 | 
				
			||||||
	state.SetBalance(addr, big.NewInt(42))
 | 
						state.SetBalance(addr, big.NewInt(42))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -494,7 +494,7 @@ func TestCopyOfCopy(t *testing.T) {
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
// See https://github.com/ethereum/go-ethereum/issues/20106.
 | 
					// See https://github.com/ethereum/go-ethereum/issues/20106.
 | 
				
			||||||
func TestCopyCommitCopy(t *testing.T) {
 | 
					func TestCopyCommitCopy(t *testing.T) {
 | 
				
			||||||
	state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create an account and check if the retrieved balance is correct
 | 
						// Create an account and check if the retrieved balance is correct
 | 
				
			||||||
	addr := common.HexToAddress("0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe")
 | 
						addr := common.HexToAddress("0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe")
 | 
				
			||||||
@ -566,7 +566,7 @@ func TestCopyCommitCopy(t *testing.T) {
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
// See https://github.com/ethereum/go-ethereum/issues/20106.
 | 
					// See https://github.com/ethereum/go-ethereum/issues/20106.
 | 
				
			||||||
func TestCopyCopyCommitCopy(t *testing.T) {
 | 
					func TestCopyCopyCommitCopy(t *testing.T) {
 | 
				
			||||||
	state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create an account and check if the retrieved balance is correct
 | 
						// Create an account and check if the retrieved balance is correct
 | 
				
			||||||
	addr := common.HexToAddress("0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe")
 | 
						addr := common.HexToAddress("0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe")
 | 
				
			||||||
@ -656,7 +656,7 @@ func TestCopyCopyCommitCopy(t *testing.T) {
 | 
				
			|||||||
// first, but the journal wiped the entire state object on create-revert.
 | 
					// first, but the journal wiped the entire state object on create-revert.
 | 
				
			||||||
func TestDeleteCreateRevert(t *testing.T) {
 | 
					func TestDeleteCreateRevert(t *testing.T) {
 | 
				
			||||||
	// Create an initial state with a single contract
 | 
						// Create an initial state with a single contract
 | 
				
			||||||
	state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	addr := toAddr([]byte("so"))
 | 
						addr := toAddr([]byte("so"))
 | 
				
			||||||
	state.SetBalance(addr, big.NewInt(1))
 | 
						state.SetBalance(addr, big.NewInt(1))
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,7 @@ type testAccount struct {
 | 
				
			|||||||
func makeTestState() (Database, common.Hash, []*testAccount) {
 | 
					func makeTestState() (Database, common.Hash, []*testAccount) {
 | 
				
			||||||
	// Create an empty state
 | 
						// Create an empty state
 | 
				
			||||||
	db := NewDatabase(rawdb.NewMemoryDatabase())
 | 
						db := NewDatabase(rawdb.NewMemoryDatabase())
 | 
				
			||||||
	state, _ := New(common.Hash{}, db)
 | 
						state, _ := New(common.Hash{}, db, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Fill it with some arbitrary data
 | 
						// Fill it with some arbitrary data
 | 
				
			||||||
	accounts := []*testAccount{}
 | 
						accounts := []*testAccount{}
 | 
				
			||||||
@ -72,7 +72,7 @@ func makeTestState() (Database, common.Hash, []*testAccount) {
 | 
				
			|||||||
// account array.
 | 
					// account array.
 | 
				
			||||||
func checkStateAccounts(t *testing.T, db ethdb.Database, root common.Hash, accounts []*testAccount) {
 | 
					func checkStateAccounts(t *testing.T, db ethdb.Database, root common.Hash, accounts []*testAccount) {
 | 
				
			||||||
	// Check root availability and state contents
 | 
						// Check root availability and state contents
 | 
				
			||||||
	state, err := New(root, NewDatabase(db))
 | 
						state, err := New(root, NewDatabase(db), nil)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create state trie at %x: %v", root, err)
 | 
							t.Fatalf("failed to create state trie at %x: %v", root, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -113,7 +113,7 @@ func checkStateConsistency(db ethdb.Database, root common.Hash) error {
 | 
				
			|||||||
	if _, err := db.Get(root.Bytes()); err != nil {
 | 
						if _, err := db.Get(root.Bytes()); err != nil {
 | 
				
			||||||
		return nil // Consider a non existent state consistent.
 | 
							return nil // Consider a non existent state consistent.
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	state, err := New(root, NewDatabase(db))
 | 
						state, err := New(root, NewDatabase(db), nil)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -86,7 +86,7 @@ func pricedDataTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setupTxPool() (*TxPool, *ecdsa.PrivateKey) {
 | 
					func setupTxPool() (*TxPool, *ecdsa.PrivateKey) {
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 10000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 10000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	key, _ := crypto.GenerateKey()
 | 
						key, _ := crypto.GenerateKey()
 | 
				
			||||||
@ -171,7 +171,7 @@ func (c *testChain) State() (*state.StateDB, error) {
 | 
				
			|||||||
	// a state change between those fetches.
 | 
						// a state change between those fetches.
 | 
				
			||||||
	stdb := c.statedb
 | 
						stdb := c.statedb
 | 
				
			||||||
	if *c.trigger {
 | 
						if *c.trigger {
 | 
				
			||||||
		c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
							c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
		// simulate that the new head block included tx0 and tx1
 | 
							// simulate that the new head block included tx0 and tx1
 | 
				
			||||||
		c.statedb.SetNonce(c.address, 2)
 | 
							c.statedb.SetNonce(c.address, 2)
 | 
				
			||||||
		c.statedb.SetBalance(c.address, new(big.Int).SetUint64(params.Ether))
 | 
							c.statedb.SetBalance(c.address, new(big.Int).SetUint64(params.Ether))
 | 
				
			||||||
@ -189,7 +189,7 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) {
 | 
				
			|||||||
	var (
 | 
						var (
 | 
				
			||||||
		key, _     = crypto.GenerateKey()
 | 
							key, _     = crypto.GenerateKey()
 | 
				
			||||||
		address    = crypto.PubkeyToAddress(key.PublicKey)
 | 
							address    = crypto.PubkeyToAddress(key.PublicKey)
 | 
				
			||||||
		statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
							statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
		trigger    = false
 | 
							trigger    = false
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -345,7 +345,7 @@ func TestTransactionChainFork(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	addr := crypto.PubkeyToAddress(key.PublicKey)
 | 
						addr := crypto.PubkeyToAddress(key.PublicKey)
 | 
				
			||||||
	resetState := func() {
 | 
						resetState := func() {
 | 
				
			||||||
		statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
							statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
		statedb.AddBalance(addr, big.NewInt(100000000000000))
 | 
							statedb.AddBalance(addr, big.NewInt(100000000000000))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
							pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
@ -374,7 +374,7 @@ func TestTransactionDoubleNonce(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	addr := crypto.PubkeyToAddress(key.PublicKey)
 | 
						addr := crypto.PubkeyToAddress(key.PublicKey)
 | 
				
			||||||
	resetState := func() {
 | 
						resetState := func() {
 | 
				
			||||||
		statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
							statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
		statedb.AddBalance(addr, big.NewInt(100000000000000))
 | 
							statedb.AddBalance(addr, big.NewInt(100000000000000))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
							pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
@ -565,7 +565,7 @@ func TestTransactionPostponing(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the postponing with
 | 
						// Create the pool to test the postponing with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
						pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
				
			||||||
@ -778,7 +778,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the limit enforcement with
 | 
						// Create the pool to test the limit enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -866,7 +866,7 @@ func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) {
 | 
				
			|||||||
	evictionInterval = time.Second
 | 
						evictionInterval = time.Second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the non-expiration enforcement
 | 
						// Create the pool to test the non-expiration enforcement
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -969,7 +969,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the limit enforcement with
 | 
						// Create the pool to test the limit enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -1071,7 +1071,7 @@ func TestTransactionCapClearsFromAll(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the limit enforcement with
 | 
						// Create the pool to test the limit enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -1105,7 +1105,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the limit enforcement with
 | 
						// Create the pool to test the limit enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -1153,7 +1153,7 @@ func TestTransactionPoolRepricing(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the pricing enforcement with
 | 
						// Create the pool to test the pricing enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
						pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
				
			||||||
@ -1274,7 +1274,7 @@ func TestTransactionPoolRepricingKeepsLocals(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the pricing enforcement with
 | 
						// Create the pool to test the pricing enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
						pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
				
			||||||
@ -1336,7 +1336,7 @@ func TestTransactionPoolUnderpricing(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the pricing enforcement with
 | 
						// Create the pool to test the pricing enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -1442,7 +1442,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the pricing enforcement with
 | 
						// Create the pool to test the pricing enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -1507,7 +1507,7 @@ func TestTransactionDeduplication(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the pricing enforcement with
 | 
						// Create the pool to test the pricing enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
						pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
				
			||||||
@ -1573,7 +1573,7 @@ func TestTransactionReplacement(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the pricing enforcement with
 | 
						// Create the pool to test the pricing enforcement with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
						pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
				
			||||||
@ -1668,7 +1668,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) {
 | 
				
			|||||||
	os.Remove(journal)
 | 
						os.Remove(journal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the original pool to inject transaction into the journal
 | 
						// Create the original pool to inject transaction into the journal
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := testTxPoolConfig
 | 
						config := testTxPoolConfig
 | 
				
			||||||
@ -1766,7 +1766,7 @@ func TestTransactionStatusCheck(t *testing.T) {
 | 
				
			|||||||
	t.Parallel()
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create the pool to test the status retrievals with
 | 
						// Create the pool to test the status retrievals with
 | 
				
			||||||
	statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
						statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
	blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
						blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
						pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain)
 | 
				
			||||||
 | 
				
			|||||||
@ -81,7 +81,7 @@ func TestEIP2200(t *testing.T) {
 | 
				
			|||||||
	for i, tt := range eip2200Tests {
 | 
						for i, tt := range eip2200Tests {
 | 
				
			||||||
		address := common.BytesToAddress([]byte("contract"))
 | 
							address := common.BytesToAddress([]byte("contract"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
 | 
							statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
 | 
				
			||||||
		statedb.CreateAccount(address)
 | 
							statedb.CreateAccount(address)
 | 
				
			||||||
		statedb.SetCode(address, hexutil.MustDecode(tt.input))
 | 
							statedb.SetCode(address, hexutil.MustDecode(tt.input))
 | 
				
			||||||
		statedb.SetState(address, common.Hash{}, common.BytesToHash([]byte{tt.original}))
 | 
							statedb.SetState(address, common.Hash{}, common.BytesToHash([]byte{tt.original}))
 | 
				
			||||||
 | 
				
			|||||||
@ -91,7 +91,7 @@ func odrAccounts(ctx context.Context, db ethdb.Database, config *params.ChainCon
 | 
				
			|||||||
	for _, addr := range acc {
 | 
						for _, addr := range acc {
 | 
				
			||||||
		if bc != nil {
 | 
							if bc != nil {
 | 
				
			||||||
			header := bc.GetHeaderByHash(bhash)
 | 
								header := bc.GetHeaderByHash(bhash)
 | 
				
			||||||
			st, err = state.New(header.Root, state.NewDatabase(db))
 | 
								st, err = state.New(header.Root, state.NewDatabase(db), nil)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			header := lc.GetHeaderByHash(bhash)
 | 
								header := lc.GetHeaderByHash(bhash)
 | 
				
			||||||
			st = light.NewState(ctx, header, lc.Odr())
 | 
								st = light.NewState(ctx, header, lc.Odr())
 | 
				
			||||||
@ -122,7 +122,7 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai
 | 
				
			|||||||
		data[35] = byte(i)
 | 
							data[35] = byte(i)
 | 
				
			||||||
		if bc != nil {
 | 
							if bc != nil {
 | 
				
			||||||
			header := bc.GetHeaderByHash(bhash)
 | 
								header := bc.GetHeaderByHash(bhash)
 | 
				
			||||||
			statedb, err := state.New(header.Root, state.NewDatabase(db))
 | 
								statedb, err := state.New(header.Root, state.NewDatabase(db), nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err == nil {
 | 
								if err == nil {
 | 
				
			||||||
				from := statedb.GetOrNewStateObject(bankAddr)
 | 
									from := statedb.GetOrNewStateObject(bankAddr)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user