@ -51,9 +51,9 @@ func TestGeneration(t *testing.T) {
var helper = newHelper ( )
stRoot := helper . makeStorageTrie ( common . Hash { } , [ ] string { "key-1" , "key-2" , "key-3" } , [ ] string { "val-1" , "val-2" , "val-3" } , false )
helper . addTrieAccount ( "acc-1" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & Account { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-1" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . 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 )
@ -85,16 +85,16 @@ func TestGenerateExistentState(t *testing.T) {
var helper = newHelper ( )
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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-1" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-1" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-1" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & Account { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & types . State Account{ Balance : big . 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 ( )
@ -160,18 +160,17 @@ func newHelper() *testHelper {
}
}
func ( t * testHelper ) addTrieAccount ( acckey string , acc * Account ) {
func ( t * testHelper ) addTrieAccount ( acckey string , acc * types . State Account) {
val , _ := rlp . EncodeToBytes ( acc )
t . accTrie . MustUpdate ( [ ] byte ( acckey ) , val )
}
func ( t * testHelper ) addSnapAccount ( acckey string , acc * Account ) {
val , _ := rlp . EncodeToBytes ( acc )
func ( t * testHelper ) addSnapAccount ( acckey string , acc * types . StateAccount ) {
key := hashData ( [ ] byte ( acckey ) )
rawdb . WriteAccountSnapshot ( t . diskdb , key , val )
rawdb . WriteAccountSnapshot ( t . diskdb , key , types . SlimAccountRLP ( * acc ) )
}
func ( t * testHelper ) addAccount ( acckey string , acc * Account ) {
func ( t * testHelper ) addAccount ( acckey string , acc * types . State Account) {
t . addTrieAccount ( acckey , acc )
t . addSnapAccount ( acckey , acc )
}
@ -183,20 +182,20 @@ func (t *testHelper) addSnapStorage(accKey string, keys []string, vals []string)
}
}
func ( t * testHelper ) makeStorageTrie ( owner common . Hash , keys [ ] string , vals [ ] string , commit bool ) [ ] byte {
func ( t * testHelper ) makeStorageTrie ( owner common . Hash , keys [ ] string , vals [ ] string , commit bool ) common . Hash {
id := trie . StorageTrieID ( types . EmptyRootHash , owner , types . EmptyRootHash )
stTrie , _ := trie . NewStateTrie ( id , t . triedb )
for i , k := range keys {
stTrie . MustUpdate ( [ ] byte ( k ) , [ ] byte ( vals [ i ] ) )
}
if ! commit {
return stTrie . Hash ( ) . Bytes ( )
return stTrie . Hash ( )
}
root , nodes := stTrie . Commit ( false )
if nodes != nil {
t . nodes . Merge ( nodes )
}
return root . Bytes ( )
return root
}
func ( t * testHelper ) Commit ( ) common . Hash {
@ -237,28 +236,28 @@ func TestGenerateExistentStateWithWrongStorage(t *testing.T) {
helper := newHelper ( )
// Account one, empty root but non-empty database
helper . addAccount ( "acc-1" , & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-1" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-2" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-3" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-4" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-5" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapStorage ( "acc-5" , [ ] string { "key-1" , "key-2" } , [ ] string { "val-1" , "val-2" } )
}
@ -266,22 +265,22 @@ func TestGenerateExistentStateWithWrongStorage(t *testing.T) {
{
// 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-6" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-7" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-8" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-9" , & types . State Account{ Balance : big . 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" } )
}
@ -289,17 +288,17 @@ func TestGenerateExistentStateWithWrongStorage(t *testing.T) {
{
// 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-10" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-11" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-12" , & types . State Account{ Balance : big . 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" } )
}
@ -339,25 +338,25 @@ func TestGenerateExistentStateWithWrongAccounts(t *testing.T) {
// Missing accounts, only in the trie
{
helper . addTrieAccount ( "acc-1" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Beginning
helper . addTrieAccount ( "acc-4" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Middle
helper . addTrieAccount ( "acc-6" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // End
helper . addTrieAccount ( "acc-1" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Beginning
helper . addTrieAccount ( "acc-4" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // Middle
helper . addTrieAccount ( "acc-6" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // End
}
// Wrong accounts
{
helper . addTrieAccount ( "acc-2" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : common . Hex2Bytes ( "0x1234" ) } )
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-2" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : common . Hex2Bytes ( "0x1234" ) } )
helper . addTrieAccount ( "acc-3" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addSnapAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
}
// Extra accounts, only in the snap
{
helper . addSnapAccount ( "acc-0" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // before the beginning
helper . addSnapAccount ( "acc-5" , & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : common . Hex2Bytes ( "0x1234" ) } ) // Middle
helper . addSnapAccount ( "acc-7" , & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // after the end
helper . addSnapAccount ( "acc-0" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // before the beginning
helper . addSnapAccount ( "acc-5" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : common . Hex2Bytes ( "0x1234" ) } ) // Middle
helper . addSnapAccount ( "acc-7" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // after the end
}
root , snap := helper . CommitAndGenerate ( )
@ -386,9 +385,9 @@ func TestGenerateCorruptAccountTrie(t *testing.T) {
// without any storage slots to keep the test smaller.
helper := newHelper ( )
helper . addTrieAccount ( "acc-1" , & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0xc7a30f39aff471c95d8a837497ad0e49b65be475cc0953540f80cfcdbdcd9074
helper . addTrieAccount ( "acc-2" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
helper . addTrieAccount ( "acc-3" , & Account { Balance : big . NewInt ( 3 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x19ead688e907b0fab07176120dceec244a72aff2f0aa51e8b827584e378772f4
helper . addTrieAccount ( "acc-1" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0xc7a30f39aff471c95d8a837497ad0e49b65be475cc0953540f80cfcdbdcd9074
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 3 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x19ead688e907b0fab07176120dceec244a72aff2f0aa51e8b827584e378772f4
root := helper . Commit ( ) // Root: 0xa04693ea110a31037fb5ee814308a6f1d76bdab0b11676bdf4541d2de55ba978
@ -420,16 +419,16 @@ func TestGenerateMissingStorageTrie(t *testing.T) {
// two of which also has the same 3-slot storage trie attached.
helper := newHelper ( )
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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
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 . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
root := helper . Commit ( )
// Delete a storage trie root and ensure the generator chokes
helper . diskdb . Delete ( stRoot )
helper . diskdb . Delete ( stRoot . Bytes ( ) )
snap := generateSnapshot ( helper . diskdb , helper . triedb , 16 , root )
select {
@ -454,11 +453,11 @@ func TestGenerateCorruptStorageTrie(t *testing.T) {
// two of which also has the same 3-slot storage trie attached.
helper := newHelper ( )
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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7
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 . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } ) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2
root := helper . Commit ( )
@ -490,7 +489,7 @@ func TestGenerateWithExtraAccounts(t *testing.T) {
[ ] string { "val-1" , "val-2" , "val-3" , "val-4" , "val-5" } ,
true ,
)
acc := & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( [ ] byte ( "acc-1" ) , val ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
@ -510,7 +509,7 @@ func TestGenerateWithExtraAccounts(t *testing.T) {
[ ] string { "val-1" , "val-2" , "val-3" , "val-4" , "val-5" } ,
true ,
)
acc := & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
key := hashData ( [ ] byte ( "acc-2" ) )
rawdb . WriteAccountSnapshot ( helper . diskdb , key , val )
@ -561,7 +560,7 @@ func TestGenerateWithManyExtraAccounts(t *testing.T) {
[ ] string { "val-1" , "val-2" , "val-3" } ,
true ,
)
acc := & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( [ ] byte ( "acc-1" ) , val ) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e
@ -575,7 +574,7 @@ func TestGenerateWithManyExtraAccounts(t *testing.T) {
{
// 100 accounts exist only in snapshot
for i := 0 ; i < 1000 ; i ++ {
acc := & Account { Balance : big . NewInt ( int64 ( i ) ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . State Account{ Balance : big . NewInt ( 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 )
@ -612,7 +611,7 @@ func TestGenerateWithExtraBeforeAndAfter(t *testing.T) {
}
helper := newHelper ( )
{
acc := & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . State Account{ Balance : big . 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 )
@ -649,7 +648,7 @@ func TestGenerateWithMalformedSnapdata(t *testing.T) {
}
helper := newHelper ( )
{
acc := & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) }
acc := & types . State Account{ Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash , CodeHash : types . EmptyCodeHash . Bytes ( ) }
val , _ := rlp . EncodeToBytes ( acc )
helper . accTrie . MustUpdate ( common . HexToHash ( "0x03" ) . Bytes ( ) , val )
@ -688,7 +687,7 @@ func TestGenerateFromEmptySnap(t *testing.T) {
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 ) ,
& Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
& types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
}
root , snap := helper . CommitAndGenerate ( )
t . Logf ( "Root: %#x\n" , root ) // Root: 0x6f7af6d2e1a1bf2b84a3beb3f8b64388465fbc1e274ca5d5d3fc787ca78f59e4
@ -725,7 +724,7 @@ func TestGenerateWithIncompleteStorage(t *testing.T) {
for i := 0 ; i < 8 ; i ++ {
accKey := fmt . Sprintf ( "acc-%d" , i )
stRoot := helper . makeStorageTrie ( hashData ( [ ] byte ( accKey ) ) , stKeys , stVals , true )
helper . addAccount ( accKey , & Account { Balance : big . NewInt ( int64 ( i ) ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( accKey , & types . State Account{ Balance : big . NewInt ( int64 ( i ) ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
var moddedKeys [ ] string
var moddedVals [ ] string
for ii := 0 ; ii < 8 ; ii ++ {
@ -817,11 +816,11 @@ func TestGenerateCompleteSnapshotWithDanglingStorage(t *testing.T) {
var helper = newHelper ( )
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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-2" , & Account { Balance : big . NewInt ( 1 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-1" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-2" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addAccount ( "acc-3" , & types . State Account{ Balance : big . 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" } )
@ -852,11 +851,11 @@ func TestGenerateBrokenSnapshotWithDanglingStorage(t *testing.T) {
var helper = newHelper ( )
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" , & Account { Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & Account { Balance : big . NewInt ( 2 ) , Root : types . EmptyRootHash . Bytes ( ) , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-1" , & types . State Account{ Balance : big . NewInt ( 1 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-2" , & types . State Account{ Balance : big . 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" , & Account { Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
helper . addTrieAccount ( "acc-3" , & types . State Account{ Balance : big . NewInt ( 3 ) , Root : stRoot , CodeHash : types . EmptyCodeHash . Bytes ( ) } )
populateDangling ( helper . diskdb )