@ -18,7 +18,6 @@ package snapshot
import (
"fmt"
"math/big"
"os"
"testing"
"time"
@ -33,6 +32,7 @@ import (
"github.com/ethereum/go-ethereum/trie/triedb/hashdb"
"github.com/ethereum/go-ethereum/trie/triedb/pathdb"
"github.com/ethereum/go-ethereum/trie/trienode"
"github.com/holiman/uint256"
"golang.org/x/crypto/sha3"
)
@ -58,9 +58,9 @@ func testGeneration(t *testing.T, scheme string) {
var helper = newHelper ( scheme )
stRoot := helper . makeStorageTrie ( common . Hash { } , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , false )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-1" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
@ -97,16 +97,16 @@ func testGenerateExistentState(t *testing.T, scheme string) {
var helper = newHelper ( scheme )
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-1" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-1" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
stRoot = helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-3" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } )
root , snap := helper . CommitAndGenerate ( )
@ -259,28 +259,28 @@ func testGenerateExistentStateWithWrongStorage(t *testing.T, scheme string) {
helper := newHelper ( scheme )
// Account one, empty root but non-empty database
helper . addAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-1" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } )
// Account two, non empty root but empty database
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-2" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
// Miss slots
{
// Account three, non empty root but misses slots in the beginning
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-3" , [ ] string { "key-2" , "key-3" } , [ ] string { "val-2" , "val-3" } )
// Account four, non empty root but misses slots in the middle
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-4" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-4" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-4" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-4" , [ ] string { "key-1" , "key-3" } , [ ] string { "val-1" , "val-3" } )
// Account five, non empty root but misses slots in the end
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-5" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-5" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-5" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-5" , [ ] string { "key-1" , "key-2" } , [ ] string { "val-1" , "val-2" } )
}
@ -288,22 +288,22 @@ func testGenerateExistentStateWithWrongStorage(t *testing.T, scheme string) {
{
// Account six, non empty root but wrong slots in the beginning
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-6" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-6" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-6" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-6" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "badval-1" , "val-2" , "val-3" } )
// Account seven, non empty root but wrong slots in the middle
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-7" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-7" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-7" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-7" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "badval-2" , "val-3" } )
// Account eight, non empty root but wrong slots in the end
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-8" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-8" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-8" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-8" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "badval-3" } )
// Account 9, non empty root but rotated slots
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-9" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-9" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-9" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-9" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-3" , "val-2" } )
}
@ -311,17 +311,17 @@ func testGenerateExistentStateWithWrongStorage(t *testing.T, scheme string) {
{
// Account 10, non empty root but extra slots in the beginning
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-10" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-10" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-10" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-10" , [ ] string { "key-0" , "key-1" , "key-2" , "key-3" } , [ ] string { "val-0" , "val-1" , "val-2" , "val-3" } )
// Account 11, non empty root but extra slots in the middle
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-11" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-11" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-11" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-11" , [ ] string { "key-1" , "key-2" , "key-2-1" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-2-1" , "val-3" } )
// Account 12, non empty root but extra slots in the end
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-12" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-12" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-12" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-12" , [ ] string { "key-1" , "key-2" , "key-3" , "key-4" } , [ ] string { "val-1" , "val-2" , "val-3" , "val-4" } )
}
@ -366,25 +366,25 @@ func testGenerateExistentStateWithWrongAccounts(t *testing.T, scheme string) {
// Missing accounts, only in the trie
{
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Beginning
helper . addTrieAccount ( "acc-4" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Middle
helper . addTrieAccount ( "acc-6" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // End
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Beginning
helper . addTrieAccount ( "acc-4" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Middle
helper . addTrieAccount ( "acc-6" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // End
}
// Wrong accounts
{
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : common . Hex2Bytes ( "0x1234" ) } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : common . Hex2Bytes ( "0x1234" ) } )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
}
// Extra accounts, only in the snap
{
helper . addSnapAccount ( "acc-0" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // before the beginning
helper . addSnapAccount ( "acc-5" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : common . Hex2Bytes ( "0x1234" ) } ) // Middle
helper . addSnapAccount ( "acc-7" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // after the end
helper . addSnapAccount ( "acc-0" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // before the beginning
helper . addSnapAccount ( "acc-5" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : common . Hex2Bytes ( "0x1234" ) } ) // Middle
helper . addSnapAccount ( "acc-7" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // after the end
}
root , snap := helper . CommitAndGenerate ( )
@ -418,9 +418,9 @@ func testGenerateCorruptAccountTrie(t *testing.T, scheme string) {
// without any storage slots to keep the test smaller.
helper := newHelper ( scheme )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0xc7a30f39aff471c95d8a837497ad0e49b65be475cc0953540f80cfcdbdcd9074
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x19ead688e907b0fab07176120dceec244a72aff2f0aa51e8b827584e378772f4
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0xc7a30f39aff471c95d8a837497ad0e49b65be475cc0953540f80cfcdbdcd9074
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x19ead688e907b0fab07176120dceec244a72aff2f0aa51e8b827584e378772f4
root := helper . Commit ( ) // Root: 0xa04693ea110a31037fb5ee814308a6f1d76bdab0b11676bdf4541d2de55ba978
@ -463,10 +463,10 @@ func testGenerateMissingStorageTrie(t *testing.T, scheme string) {
helper = newHelper ( scheme )
)
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-1" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true ) // 0xddefcd9376dd029653ef384bd2f0a126bb755fe84fdcc9e7cf421ba454f2bc67
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
stRoot = helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
root := helper . Commit ( )
@ -503,10 +503,10 @@ func testGenerateCorruptStorageTrie(t *testing.T, scheme string) {
helper := newHelper ( scheme )
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-1" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true ) // 0xddefcd9376dd029653ef384bd2f0a126bb755fe84fdcc9e7cf421ba454f2bc67
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
stRoot = helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
root := helper . Commit ( )
@ -546,7 +546,7 @@ func testGenerateWithExtraAccounts(t *testing.T, scheme string) {
[ ] string { "val-1" , "val-2" , "val-3" , "val-4" , "val-5" } ,
true ,
)
acc := & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( [ ] byte ( "acc-1" ) , val ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
@ -566,7 +566,7 @@ func testGenerateWithExtraAccounts(t *testing.T, scheme string) {
[ ] string { "val-1" , "val-2" , "val-3" , "val-4" , "val-5" } ,
true ,
)
acc := & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
key := hashData ( [ ] byte ( "acc-2" ) )
rawdb . WriteAccountSnapshot ( helper . diskdb , key , val )
@ -622,7 +622,7 @@ func testGenerateWithManyExtraAccounts(t *testing.T, scheme string) {
[ ] string { "val-1" , "val-2" , "val-3" } ,
true ,
)
acc := & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( [ ] byte ( "acc-1" ) , val ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
@ -636,7 +636,7 @@ func testGenerateWithManyExtraAccounts(t *testing.T, scheme string) {
{
// 100 accounts exist only in snapshot
for i := 0 ; i < 1000 ; i ++ {
acc := & types . StateAccount { Balance : big . NewInt ( int64 ( i ) ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . StateAccount { Balance : uint256 . NewInt ( u int64( i ) ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
key := hashData ( [ ] byte ( fmt . Sprintf ( "acc-%d" , i ) ) )
rawdb . WriteAccountSnapshot ( helper . diskdb , key , val )
@ -678,7 +678,7 @@ func testGenerateWithExtraBeforeAndAfter(t *testing.T, scheme string) {
}
helper := newHelper ( scheme )
{
acc := & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( common . HexToHash ( "0x03" ) . Bytes ( ) , val )
helper . accTrie . MustUpdate ( common . HexToHash ( "0x07" ) . Bytes ( ) , val )
@ -720,7 +720,7 @@ func testGenerateWithMalformedSnapdata(t *testing.T, scheme string) {
}
helper := newHelper ( scheme )
{
acc := & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( common . HexToHash ( "0x03" ) . Bytes ( ) , val )
@ -764,7 +764,7 @@ func testGenerateFromEmptySnap(t *testing.T, scheme string) {
for i := 0 ; i < 400 ; i ++ {
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( fmt . Sprintf ( "acc-%d" , i ) ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( fmt . Sprintf ( "acc-%d" , i ) ,
& types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
& types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
}
root , snap := helper . CommitAndGenerate ( )
t . Logf ( "Root: %#x\n" , root ) // Root: 0x6f7af6d2e1a1bf2b84a3beb3f8b64388465fbc1e274ca5d5d3fc787ca78f59e4
@ -806,7 +806,7 @@ func testGenerateWithIncompleteStorage(t *testing.T, scheme string) {
for i := 0 ; i < 8 ; i ++ {
accKey := fmt . Sprintf ( "acc-%d" , i )
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( accKey ) ) , stKeys , stVals , true )
helper . addAccount ( accKey , & types . StateAccount { Balance : big . NewInt ( int64 ( i ) ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( accKey , & types . StateAccount { Balance : uint256 . NewInt ( u int64( i ) ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
var moddedKeys [ ] string
var moddedVals [ ] string
for ii := 0 ; ii < 8 ; ii ++ {
@ -903,11 +903,11 @@ func testGenerateCompleteSnapshotWithDanglingStorage(t *testing.T, scheme string
var helper = newHelper ( scheme )
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-1" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-1" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } )
helper . addSnapStorage ( "acc-3" , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } )
@ -943,11 +943,11 @@ func testGenerateBrokenSnapshotWithDanglingStorage(t *testing.T, scheme string)
var helper = newHelper ( scheme )
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-1" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-1" , & types . StateAccount { Balance : uint256 . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . StateAccount { Balance : uint256 . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . makeStorageTrie ( hashData ( [ ] byte ( "acc-3" ) ) , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , true )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . StateAccount { Balance : uint256 . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
populateDangling ( helper . diskdb )