|
|
|
@ -1,17 +1,17 @@ |
|
|
|
|
package ethtrie |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"bytes" |
|
|
|
|
"encoding/hex" |
|
|
|
|
"encoding/json" |
|
|
|
|
_ "bytes" |
|
|
|
|
_ "encoding/hex" |
|
|
|
|
_ "encoding/json" |
|
|
|
|
"fmt" |
|
|
|
|
"github.com/ethereum/eth-go/ethutil" |
|
|
|
|
"io/ioutil" |
|
|
|
|
"math/rand" |
|
|
|
|
"net/http" |
|
|
|
|
"reflect" |
|
|
|
|
_ "io/ioutil" |
|
|
|
|
_ "math/rand" |
|
|
|
|
_ "net/http" |
|
|
|
|
_ "reflect" |
|
|
|
|
"testing" |
|
|
|
|
"time" |
|
|
|
|
_ "time" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const LONG_WORD = "1234567890abcdefghijklmnopqrstuvwxxzABCEFGHIJKLMNOPQRSTUVWXYZ" |
|
|
|
@ -43,6 +43,7 @@ func New() (*MemDatabase, *Trie) { |
|
|
|
|
return db, NewTrie(db, "") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
func TestTrieSync(t *testing.T) { |
|
|
|
|
db, trie := New() |
|
|
|
|
|
|
|
|
@ -365,3 +366,55 @@ func TestDelete(t *testing.T) { |
|
|
|
|
|
|
|
|
|
fmt.Printf("o: %x\nc: %x\n", a, b) |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
func TestRndCase(t *testing.T) { |
|
|
|
|
_, trie := New() |
|
|
|
|
|
|
|
|
|
data := []struct{ k, v string }{ |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000001", "a07573657264617461000000000000000000000000000000000000000000000000"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000003", "8453bb5b31"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000004", "850218711a00"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000005", "9462d7705bd0b3ecbc51a8026a25597cb28a650c79"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000010", "947e70f9460402290a3e487dae01f610a1a8218fda"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000111", "01"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000112", "a053656e6174650000000000000000000000000000000000000000000000000000"}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000113", "a053656e6174650000000000000000000000000000000000000000000000000000"}, |
|
|
|
|
{"53656e6174650000000000000000000000000000000000000000000000000000", "94977e3f62f5e1ed7953697430303a3cfa2b5b736e"}, |
|
|
|
|
} |
|
|
|
|
for _, e := range data { |
|
|
|
|
trie.Update(string(ethutil.Hex2Bytes(e.k)), string(ethutil.Hex2Bytes(e.v))) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fmt.Printf("root after update %x\n", trie.Root) |
|
|
|
|
trie.NewIterator().Each(func(k string, v *ethutil.Value) { |
|
|
|
|
fmt.Printf("%x %x\n", k, v.Bytes()) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
data = []struct{ k, v string }{ |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000112", ""}, |
|
|
|
|
{"436974697a656e73000000000000000000000000000000000000000000000001", ""}, |
|
|
|
|
{"436f757274000000000000000000000000000000000000000000000000000002", ""}, |
|
|
|
|
{"53656e6174650000000000000000000000000000000000000000000000000000", ""}, |
|
|
|
|
{"436f757274000000000000000000000000000000000000000000000000000000", ""}, |
|
|
|
|
{"53656e6174650000000000000000000000000000000000000000000000000001", ""}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000113", ""}, |
|
|
|
|
{"436974697a656e73000000000000000000000000000000000000000000000000", ""}, |
|
|
|
|
{"436974697a656e73000000000000000000000000000000000000000000000002", ""}, |
|
|
|
|
{"436f757274000000000000000000000000000000000000000000000000000001", ""}, |
|
|
|
|
{"0000000000000000000000000000000000000000000000000000000000000111", ""}, |
|
|
|
|
{"53656e6174650000000000000000000000000000000000000000000000000002", ""}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, e := range data { |
|
|
|
|
trie.Delete(string(ethutil.Hex2Bytes(e.k))) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fmt.Printf("root after delete %x\n", trie.Root) |
|
|
|
|
|
|
|
|
|
trie.NewIterator().Each(func(k string, v *ethutil.Value) { |
|
|
|
|
fmt.Printf("%x %x\n", k, v.Bytes()) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
fmt.Printf("%x\n", trie.Get(string(ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001")))) |
|
|
|
|
} |
|
|
|
|