Преглед изворни кода

Secure trie shakey / key matching

obscuren пре 10 година
родитељ
комит
bbe795455a
2 измењених фајлова са 14 додато и 5 уклоњено
  1. 4 4
      core/state/dump.go
  2. 10 1
      trie/secure_trie.go

+ 4 - 4
core/state/dump.go

@@ -28,17 +28,17 @@ func (self *StateDB) RawDump() World {
 
 	it := self.trie.Iterator()
 	for it.Next() {
-		stateObject := NewStateObjectFromBytes(common.BytesToAddress(it.Key), it.Value, self.db)
+		addr := self.trie.GetKey(it.Key)
+		stateObject := NewStateObjectFromBytes(common.BytesToAddress(addr), it.Value, self.db)
 
 		account := Account{Balance: stateObject.balance.String(), Nonce: stateObject.nonce, Root: common.Bytes2Hex(stateObject.Root()), CodeHash: common.Bytes2Hex(stateObject.codeHash)}
 		account.Storage = make(map[string]string)
 
 		storageIt := stateObject.State.trie.Iterator()
 		for storageIt.Next() {
-			fmt.Println("value", storageIt.Value)
-			account.Storage[common.Bytes2Hex(storageIt.Key)] = common.Bytes2Hex(storageIt.Value)
+			account.Storage[common.Bytes2Hex(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(storageIt.Value)
 		}
-		world.Accounts[common.Bytes2Hex(it.Key)] = account
+		world.Accounts[common.Bytes2Hex(addr)] = account
 	}
 	return world
 }

+ 10 - 1
trie/secure_trie.go

@@ -2,6 +2,8 @@ package trie
 
 import "github.com/ethereum/go-ethereum/crypto"
 
+var keyPrefix = []byte("secure-key-")
+
 type SecureTrie struct {
 	*Trie
 }
@@ -11,7 +13,10 @@ func NewSecure(root []byte, backend Backend) *SecureTrie {
 }
 
 func (self *SecureTrie) Update(key, value []byte) Node {
-	return self.Trie.Update(crypto.Sha3(key), value)
+	shaKey := crypto.Sha3(key)
+	self.Trie.cache.Put(append(keyPrefix, shaKey...), key)
+
+	return self.Trie.Update(shaKey, value)
 }
 func (self *SecureTrie) UpdateString(key, value string) Node {
 	return self.Update([]byte(key), []byte(value))
@@ -34,3 +39,7 @@ func (self *SecureTrie) DeleteString(key string) Node {
 func (self *SecureTrie) Copy() *SecureTrie {
 	return &SecureTrie{self.Trie.Copy()}
 }
+
+func (self *SecureTrie) GetKey(shaKey []byte) []byte {
+	return self.Trie.cache.Get(append(keyPrefix, shaKey...))
+}