func (c *StateObject) GetInstr(pc *big.Int) *common.Value { if int64(len(c.code)-1) < pc.Int64() { return common.NewValue(0) } return common.NewValueFromBytes([]byte{c.code[pc.Int64()]}) }
func (db *MemDatabase) Print() { for key, val := range db.db { fmt.Printf("%x(%d): ", key, len(key)) node := common.NewValueFromBytes(val) fmt.Printf("%q\n", node.Val) } }
func (self *Trie) trans(node Node) Node { switch node := node.(type) { case *HashNode: value := common.NewValueFromBytes(self.cache.Get(node.key)) return self.mknode(value) default: return node } }
func (c *StateObject) RlpDecode(data []byte) { decoder := common.NewValueFromBytes(data) c.nonce = decoder.Get(0).Uint() c.balance = decoder.Get(1).BigInt() c.trie = trie.NewSecure(decoder.Get(2).Bytes(), c.db) c.storage = make(map[string]common.Hash) c.gasPool = new(big.Int) c.codeHash = decoder.Get(3).Bytes() c.code, _ = c.db.Get(c.codeHash) }
// Reset should only be called if the trie has been hashed func (self *Trie) Reset() { self.mu.Lock() defer self.mu.Unlock() self.cache.Reset() if self.revisions.Len() > 0 { revision := self.revisions.Remove(self.revisions.Back()).([]byte) self.roothash = revision } value := common.NewValueFromBytes(self.cache.Get(self.roothash)) self.root = self.mknode(value) }
func New(root []byte, backend Backend) *Trie { trie := &Trie{} trie.revisions = list.New() trie.roothash = root if backend != nil { trie.cache = NewCache(backend) } if root != nil { value := common.NewValueFromBytes(trie.cache.Get(root)) trie.root = trie.mknode(value) } return trie }