aboutsummaryrefslogtreecommitdiffstats
path: root/ethstate
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-10-31 21:43:14 +0800
committerobscuren <geffobscura@gmail.com>2014-10-31 21:43:14 +0800
commitaf8f5f0b69f1c359991d12c7708804fe8dd1f944 (patch)
treedd3d5bea8d57037a2d32fae86c4ba7fcc9161b16 /ethstate
parent0ed1a8b50a9b9726cd57a2731d0405f6949c6188 (diff)
downloaddexon-af8f5f0b69f1c359991d12c7708804fe8dd1f944.tar.gz
dexon-af8f5f0b69f1c359991d12c7708804fe8dd1f944.tar.zst
dexon-af8f5f0b69f1c359991d12c7708804fe8dd1f944.zip
ethstate => state
Diffstat (limited to 'ethstate')
-rw-r--r--ethstate/.ethtest0
-rw-r--r--ethstate/dump.go47
-rw-r--r--ethstate/errors.go23
-rw-r--r--ethstate/log.go38
-rw-r--r--ethstate/manifest.go55
-rw-r--r--ethstate/state.go321
-rw-r--r--ethstate/state_object.go339
-rw-r--r--ethstate/state_test.go36
8 files changed, 0 insertions, 859 deletions
diff --git a/ethstate/.ethtest b/ethstate/.ethtest
deleted file mode 100644
index e69de29bb..000000000
--- a/ethstate/.ethtest
+++ /dev/null
diff --git a/ethstate/dump.go b/ethstate/dump.go
deleted file mode 100644
index fd92ac4df..000000000
--- a/ethstate/dump.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package ethstate
-
-import (
- "encoding/json"
- "fmt"
-
- "github.com/ethereum/go-ethereum/ethutil"
-)
-
-type Account struct {
- Balance string `json:"balance"`
- Nonce uint64 `json:"nonce"`
- CodeHash string `json:"codeHash"`
- Storage map[string]string `json:"storage"`
-}
-
-type World struct {
- Root string `json:"root"`
- Accounts map[string]Account `json:"accounts"`
-}
-
-func (self *State) Dump() []byte {
- world := World{
- Root: ethutil.Bytes2Hex(self.Trie.Root.([]byte)),
- Accounts: make(map[string]Account),
- }
-
- self.Trie.NewIterator().Each(func(key string, value *ethutil.Value) {
- stateObject := NewStateObjectFromBytes([]byte(key), value.Bytes())
-
- account := Account{Balance: stateObject.balance.String(), Nonce: stateObject.Nonce, CodeHash: ethutil.Bytes2Hex(stateObject.codeHash)}
- account.Storage = make(map[string]string)
-
- stateObject.EachStorage(func(key string, value *ethutil.Value) {
- value.Decode()
- account.Storage[ethutil.Bytes2Hex([]byte(key))] = ethutil.Bytes2Hex(value.Bytes())
- })
- world.Accounts[ethutil.Bytes2Hex([]byte(key))] = account
- })
-
- json, err := json.MarshalIndent(world, "", " ")
- if err != nil {
- fmt.Println("dump err", err)
- }
-
- return json
-}
diff --git a/ethstate/errors.go b/ethstate/errors.go
deleted file mode 100644
index d5d7db86b..000000000
--- a/ethstate/errors.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package ethstate
-
-import (
- "fmt"
- "math/big"
-)
-
-type GasLimitErr struct {
- Message string
- Is, Max *big.Int
-}
-
-func IsGasLimitErr(err error) bool {
- _, ok := err.(*GasLimitErr)
-
- return ok
-}
-func (err *GasLimitErr) Error() string {
- return err.Message
-}
-func GasLimitError(is, max *big.Int) *GasLimitErr {
- return &GasLimitErr{Message: fmt.Sprintf("GasLimit error. Max %s, transaction would take it to %s", max, is), Is: is, Max: max}
-}
diff --git a/ethstate/log.go b/ethstate/log.go
deleted file mode 100644
index a2e9ca041..000000000
--- a/ethstate/log.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package ethstate
-
-import "github.com/ethereum/go-ethereum/ethutil"
-
-type Log struct {
- Address []byte
- Topics [][]byte
- Data []byte
-}
-
-func NewLogFromValue(decoder *ethutil.Value) Log {
- log := Log{
- Address: decoder.Get(0).Bytes(),
- Data: decoder.Get(2).Bytes(),
- }
-
- it := decoder.Get(1).NewIterator()
- for it.Next() {
- log.Topics = append(log.Topics, it.Value().Bytes())
- }
-
- return log
-}
-
-func (self Log) RlpData() interface{} {
- return []interface{}{self.Address, ethutil.ByteSliceToInterface(self.Topics), self.Data}
-}
-
-type Logs []Log
-
-func (self Logs) RlpData() interface{} {
- data := make([]interface{}, len(self))
- for i, log := range self {
- data[i] = log.RlpData()
- }
-
- return data
-}
diff --git a/ethstate/manifest.go b/ethstate/manifest.go
deleted file mode 100644
index 945de22ab..000000000
--- a/ethstate/manifest.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package ethstate
-
-import (
- "fmt"
- "math/big"
-)
-
-// Object manifest
-//
-// The object manifest is used to keep changes to the state so we can keep track of the changes
-// that occurred during a state transitioning phase.
-type Manifest struct {
- Messages Messages
-}
-
-func NewManifest() *Manifest {
- m := &Manifest{}
- m.Reset()
-
- return m
-}
-
-func (m *Manifest) Reset() {
- m.Messages = nil
-}
-
-func (self *Manifest) AddMessage(msg *Message) *Message {
- self.Messages = append(self.Messages, msg)
-
- return msg
-}
-
-type Messages []*Message
-type Message struct {
- To, From []byte
- Input []byte
- Output []byte
- Path int
- Origin []byte
- Timestamp int64
- Coinbase []byte
- Block []byte
- Number *big.Int
- Value *big.Int
-
- ChangedAddresses [][]byte
-}
-
-func (self *Message) AddStorageChange(addr []byte) {
- self.ChangedAddresses = append(self.ChangedAddresses, addr)
-}
-
-func (self *Message) String() string {
- return fmt.Sprintf("Message{to: %x from: %x input: %x output: %x origin: %x coinbase: %x block: %x number: %v timestamp: %d path: %d value: %v", self.To, self.From, self.Input, self.Output, self.Origin, self.Coinbase, self.Block, self.Number, self.Timestamp, self.Path, self.Value)
-}
diff --git a/ethstate/state.go b/ethstate/state.go
deleted file mode 100644
index 9025194e5..000000000
--- a/ethstate/state.go
+++ /dev/null
@@ -1,321 +0,0 @@
-package ethstate
-
-import (
- "math/big"
-
- "github.com/ethereum/go-ethereum/ethtrie"
- "github.com/ethereum/go-ethereum/ethutil"
- "github.com/ethereum/go-ethereum/logger"
-)
-
-var statelogger = logger.NewLogger("STATE")
-
-// States within the ethereum protocol are used to store anything
-// within the merkle trie. States take care of caching and storing
-// nested states. It's the general query interface to retrieve:
-// * Contracts
-// * Accounts
-type State struct {
- // The trie for this structure
- Trie *ethtrie.Trie
-
- stateObjects map[string]*StateObject
-
- manifest *Manifest
-
- refund map[string]*big.Int
-
- logs Logs
-}
-
-// Create a new state from a given trie
-func New(trie *ethtrie.Trie) *State {
- return &State{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string]*big.Int)}
-}
-
-func (self *State) EmptyLogs() {
- self.logs = nil
-}
-
-func (self *State) AddLog(log Log) {
- self.logs = append(self.logs, log)
-}
-
-func (self *State) Logs() Logs {
- return self.logs
-}
-
-// Retrieve the balance from the given address or 0 if object not found
-func (self *State) GetBalance(addr []byte) *big.Int {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- return stateObject.balance
- }
-
- return ethutil.Big0
-}
-
-func (self *State) Refund(addr []byte, gas, price *big.Int) {
- amount := new(big.Int).Mul(gas, price)
-
- if self.refund[string(addr)] == nil {
- self.refund[string(addr)] = new(big.Int)
- }
-
- self.refund[string(addr)] = new(big.Int).Add(self.refund[string(addr)], amount)
-}
-
-func (self *State) AddBalance(addr []byte, amount *big.Int) {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- stateObject.AddBalance(amount)
- }
-}
-
-func (self *State) GetNonce(addr []byte) uint64 {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- return stateObject.Nonce
- }
-
- return 0
-}
-
-func (self *State) SetNonce(addr []byte, nonce uint64) {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- stateObject.Nonce = nonce
- }
-}
-
-func (self *State) GetCode(addr []byte) []byte {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- return stateObject.Code
- }
-
- return nil
-}
-
-func (self *State) GetState(a, b []byte) []byte {
- stateObject := self.GetStateObject(a)
- if stateObject != nil {
- return stateObject.GetState(b).Bytes()
- }
-
- return nil
-}
-
-func (self *State) SetState(addr, key []byte, value interface{}) {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- stateObject.SetState(key, ethutil.NewValue(value))
- }
-}
-
-func (self *State) Delete(addr []byte) bool {
- stateObject := self.GetStateObject(addr)
- if stateObject != nil {
- stateObject.MarkForDeletion()
-
- return true
- }
-
- return false
-}
-
-//
-// Setting, updating & deleting state object methods
-//
-
-// Update the given state object and apply it to state trie
-func (self *State) UpdateStateObject(stateObject *StateObject) {
- addr := stateObject.Address()
-
- if len(stateObject.CodeHash()) > 0 {
- ethutil.Config.Db.Put(stateObject.CodeHash(), stateObject.Code)
- }
-
- self.Trie.Update(string(addr), string(stateObject.RlpEncode()))
-}
-
-// Delete the given state object and delete it from the state trie
-func (self *State) DeleteStateObject(stateObject *StateObject) {
- self.Trie.Delete(string(stateObject.Address()))
-
- delete(self.stateObjects, string(stateObject.Address()))
-}
-
-// Retrieve a state object given my the address. Nil if not found
-func (self *State) GetStateObject(addr []byte) *StateObject {
- addr = ethutil.Address(addr)
-
- stateObject := self.stateObjects[string(addr)]
- if stateObject != nil {
- return stateObject
- }
-
- data := self.Trie.Get(string(addr))
- if len(data) == 0 {
- return nil
- }
-
- stateObject = NewStateObjectFromBytes(addr, []byte(data))
- self.SetStateObject(stateObject)
-
- return stateObject
-}
-
-func (self *State) SetStateObject(object *StateObject) {
- self.stateObjects[string(object.address)] = object
-}
-
-// Retrieve a state object or create a new state object if nil
-func (self *State) GetOrNewStateObject(addr []byte) *StateObject {
- stateObject := self.GetStateObject(addr)
- if stateObject == nil {
- stateObject = self.NewStateObject(addr)
- }
-
- return stateObject
-}
-
-// Create a state object whether it exist in the trie or not
-func (self *State) NewStateObject(addr []byte) *StateObject {
- addr = ethutil.Address(addr)
-
- statelogger.Debugf("(+) %x\n", addr)
-
- stateObject := NewStateObject(addr)
- self.stateObjects[string(addr)] = stateObject
-
- return stateObject
-}
-
-// Deprecated
-func (self *State) GetAccount(addr []byte) *StateObject {
- return self.GetOrNewStateObject(addr)
-}
-
-//
-// Setting, copying of the state methods
-//
-
-func (s *State) Cmp(other *State) bool {
- return s.Trie.Cmp(other.Trie)
-}
-
-func (self *State) Copy() *State {
- if self.Trie != nil {
- state := New(self.Trie.Copy())
- for k, stateObject := range self.stateObjects {
- state.stateObjects[k] = stateObject.Copy()
- }
-
- for addr, refund := range self.refund {
- state.refund[addr] = refund
- }
-
- logs := make(Logs, len(self.logs))
- copy(logs, self.logs)
- state.logs = logs
-
- return state
- }
-
- return nil
-}
-
-func (self *State) Set(state *State) {
- if state == nil {
- panic("Tried setting 'state' to nil through 'Set'")
- }
-
- self.Trie = state.Trie
- self.stateObjects = state.stateObjects
- self.refund = state.refund
- self.logs = state.logs
-}
-
-func (s *State) Root() interface{} {
- return s.Trie.Root
-}
-
-// Resets the trie and all siblings
-func (s *State) Reset() {
- s.Trie.Undo()
-
- // Reset all nested states
- for _, stateObject := range s.stateObjects {
- if stateObject.State == nil {
- continue
- }
-
- //stateObject.state.Reset()
- stateObject.Reset()
- }
-
- s.Empty()
-}
-
-// Syncs the trie and all siblings
-func (s *State) Sync() {
- // Sync all nested states
- for _, stateObject := range s.stateObjects {
- if stateObject.State == nil {
- continue
- }
-
- stateObject.State.Sync()
- }
-
- s.Trie.Sync()
-
- s.Empty()
-}
-
-func (self *State) Empty() {
- self.stateObjects = make(map[string]*StateObject)
- self.refund = make(map[string]*big.Int)
-}
-
-func (self *State) Update() {
- var deleted bool
-
- // Refund any gas that's left
- for addr, amount := range self.refund {
- self.GetStateObject([]byte(addr)).AddBalance(amount)
- }
-
- for _, stateObject := range self.stateObjects {
- if stateObject.remove {
- self.DeleteStateObject(stateObject)
- deleted = true
- } else {
- stateObject.Sync()
-
- self.UpdateStateObject(stateObject)
- }
- }
-
- // FIXME trie delete is broken
- if deleted {
- valid, t2 := ethtrie.ParanoiaCheck(self.Trie)
- if !valid {
- statelogger.Infof("Warn: PARANOIA: Different state root during copy %x vs %x\n", self.Trie.Root, t2.Root)
-
- self.Trie = t2
- }
- }
-}
-
-func (self *State) Manifest() *Manifest {
- return self.manifest
-}
-
-// Debug stuff
-func (self *State) CreateOutputForDiff() {
- for _, stateObject := range self.stateObjects {
- stateObject.CreateOutputForDiff()
- }
-}
diff --git a/ethstate/state_object.go b/ethstate/state_object.go
deleted file mode 100644
index d28a2b80d..000000000
--- a/ethstate/state_object.go
+++ /dev/null
@@ -1,339 +0,0 @@
-package ethstate
-
-import (
- "fmt"
- "math/big"
-
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethtrie"
- "github.com/ethereum/go-ethereum/ethutil"
-)
-
-type Code []byte
-
-func (self Code) String() string {
- return string(self) //strings.Join(Disassemble(self), " ")
-}
-
-type Storage map[string]*ethutil.Value
-
-func (self Storage) Copy() Storage {
- cpy := make(Storage)
- for key, value := range self {
- // XXX Do we need a 'value' copy or is this sufficient?
- cpy[key] = value
- }
-
- return cpy
-}
-
-type StateObject struct {
- // Address of the object
- address []byte
- // Shared attributes
- balance *big.Int
- codeHash []byte
- Nonce uint64
- // Contract related attributes
- State *State
- Code Code
- InitCode Code
-
- storage Storage
-
- // Total gas pool is the total amount of gas currently
- // left if this object is the coinbase. Gas is directly
- // purchased of the coinbase.
- gasPool *big.Int
-
- // Mark for deletion
- // When an object is marked for deletion it will be delete from the trie
- // during the "update" phase of the state transition
- remove bool
-}
-
-func (self *StateObject) Reset() {
- self.storage = make(Storage)
- self.State.Reset()
-}
-
-func NewStateObject(addr []byte) *StateObject {
- // This to ensure that it has 20 bytes (and not 0 bytes), thus left or right pad doesn't matter.
- address := ethutil.Address(addr)
-
- object := &StateObject{address: address, balance: new(big.Int), gasPool: new(big.Int)}
- object.State = New(ethtrie.New(ethutil.Config.Db, ""))
- object.storage = make(Storage)
- object.gasPool = new(big.Int)
-
- return object
-}
-
-func NewContract(address []byte, balance *big.Int, root []byte) *StateObject {
- contract := NewStateObject(address)
- contract.balance = balance
- contract.State = New(ethtrie.New(ethutil.Config.Db, string(root)))
-
- return contract
-}
-
-func NewStateObjectFromBytes(address, data []byte) *StateObject {
- object := &StateObject{address: address}
- object.RlpDecode(data)
-
- return object
-}
-
-func (self *StateObject) MarkForDeletion() {
- self.remove = true
- statelogger.DebugDetailf("%x: #%d %v (deletion)\n", self.Address(), self.Nonce, self.balance)
-}
-
-func (c *StateObject) GetAddr(addr []byte) *ethutil.Value {
- return ethutil.NewValueFromBytes([]byte(c.State.Trie.Get(string(addr))))
-}
-
-func (c *StateObject) SetAddr(addr []byte, value interface{}) {
- c.State.Trie.Update(string(addr), string(ethutil.NewValue(value).Encode()))
-}
-
-func (self *StateObject) GetStorage(key *big.Int) *ethutil.Value {
- return self.GetState(key.Bytes())
-}
-func (self *StateObject) SetStorage(key *big.Int, value *ethutil.Value) {
- self.SetState(key.Bytes(), value)
-}
-
-func (self *StateObject) Storage() map[string]*ethutil.Value {
- return self.storage
-}
-
-func (self *StateObject) GetState(k []byte) *ethutil.Value {
- key := ethutil.LeftPadBytes(k, 32)
-
- value := self.storage[string(key)]
- if value == nil {
- value = self.GetAddr(key)
-
- if !value.IsNil() {
- self.storage[string(key)] = value
- }
- }
-
- return value
-}
-
-func (self *StateObject) SetState(k []byte, value *ethutil.Value) {
- key := ethutil.LeftPadBytes(k, 32)
- self.storage[string(key)] = value.Copy()
-}
-
-// Iterate over each storage address and yield callback
-func (self *StateObject) EachStorage(cb ethtrie.EachCallback) {
- // First loop over the uncommit/cached values in storage
- for key, value := range self.storage {
- // XXX Most iterators Fns as it stands require encoded values
- encoded := ethutil.NewValue(value.Encode())
- cb(key, encoded)
- }
-
- it := self.State.Trie.NewIterator()
- it.Each(func(key string, value *ethutil.Value) {
- // If it's cached don't call the callback.
- if self.storage[key] == nil {
- cb(key, value)
- }
- })
-}
-
-func (self *StateObject) Sync() {
- for key, value := range self.storage {
- if value.Len() == 0 { // value.BigInt().Cmp(ethutil.Big0) == 0 {
- //data := self.getStorage([]byte(key))
- //fmt.Printf("deleting %x %x 0x%x\n", self.Address(), []byte(key), data)
- self.State.Trie.Delete(string(key))
- continue
- }
-
- self.SetAddr([]byte(key), value)
- }
-
- valid, t2 := ethtrie.ParanoiaCheck(self.State.Trie)
- if !valid {
- statelogger.Infof("Warn: PARANOIA: Different state storage root during copy %x vs %x\n", self.State.Trie.Root, t2.Root)
-
- self.State.Trie = t2
- }
-}
-
-func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
- if int64(len(c.Code)-1) < pc.Int64() {
- return ethutil.NewValue(0)
- }
-
- return ethutil.NewValueFromBytes([]byte{c.Code[pc.Int64()]})
-}
-
-func (c *StateObject) AddBalance(amount *big.Int) {
- c.SetBalance(new(big.Int).Add(c.balance, amount))
-
- statelogger.Debugf("%x: #%d %v (+ %v)\n", c.Address(), c.Nonce, c.balance, amount)
-}
-func (c *StateObject) AddAmount(amount *big.Int) { c.AddBalance(amount) }
-
-func (c *StateObject) SubBalance(amount *big.Int) {
- c.SetBalance(new(big.Int).Sub(c.balance, amount))
-
- statelogger.Debugf("%x: #%d %v (- %v)\n", c.Address(), c.Nonce, c.balance, amount)
-}
-func (c *StateObject) SubAmount(amount *big.Int) { c.SubBalance(amount) }
-
-func (c *StateObject) SetBalance(amount *big.Int) {
- c.balance = amount
-}
-
-func (self *StateObject) Balance() *big.Int { return self.balance }
-
-//
-// Gas setters and getters
-//
-
-// Return the gas back to the origin. Used by the Virtual machine or Closures
-func (c *StateObject) ReturnGas(gas, price *big.Int) {}
-func (c *StateObject) ConvertGas(gas, price *big.Int) error {
- total := new(big.Int).Mul(gas, price)
- if total.Cmp(c.balance) > 0 {
- return fmt.Errorf("insufficient amount: %v, %v", c.balance, total)
- }
-
- c.SubAmount(total)
-
- return nil
-}
-
-func (self *StateObject) SetGasPool(gasLimit *big.Int) {
- self.gasPool = new(big.Int).Set(gasLimit)
-
- statelogger.DebugDetailf("%x: fuel (+ %v)", self.Address(), self.gasPool)
-}
-
-func (self *StateObject) BuyGas(gas, price *big.Int) error {
- if self.gasPool.Cmp(gas) < 0 {
- return GasLimitError(self.gasPool, gas)
- }
-
- rGas := new(big.Int).Set(gas)
- rGas.Mul(rGas, price)
-
- self.AddAmount(rGas)
-
- return nil
-}
-
-func (self *StateObject) RefundGas(gas, price *big.Int) {
- self.gasPool.Add(self.gasPool, gas)
-
- rGas := new(big.Int).Set(gas)
- rGas.Mul(rGas, price)
-
- self.balance.Sub(self.balance, rGas)
-}
-
-func (self *StateObject) Copy() *StateObject {
- stateObject := NewStateObject(self.Address())
- stateObject.balance.Set(self.balance)
- stateObject.codeHash = ethutil.CopyBytes(self.codeHash)
- stateObject.Nonce = self.Nonce
- if self.State != nil {
- stateObject.State = self.State.Copy()
- }
- stateObject.Code = ethutil.CopyBytes(self.Code)
- stateObject.InitCode = ethutil.CopyBytes(self.InitCode)
- stateObject.storage = self.storage.Copy()
- stateObject.gasPool.Set(self.gasPool)
- stateObject.remove = self.remove
-
- return stateObject
-}
-
-func (self *StateObject) Set(stateObject *StateObject) {
- *self = *stateObject
-}
-
-//
-// Attribute accessors
-//
-
-func (c *StateObject) N() *big.Int {
- return big.NewInt(int64(c.Nonce))
-}
-
-// Returns the address of the contract/account
-func (c *StateObject) Address() []byte {
- return c.address
-}
-
-// Returns the initialization Code
-func (c *StateObject) Init() Code {
- return c.InitCode
-}
-
-// To satisfy ClosureRef
-func (self *StateObject) Object() *StateObject {
- return self
-}
-
-// Debug stuff
-func (self *StateObject) CreateOutputForDiff() {
- fmt.Printf("%x %x %x %x\n", self.Address(), self.State.Root(), self.balance.Bytes(), self.Nonce)
- self.EachStorage(func(addr string, value *ethutil.Value) {
- fmt.Printf("%x %x\n", addr, value.Bytes())
- })
-}
-
-//
-// Encoding
-//
-
-// State object encoding methods
-func (c *StateObject) RlpEncode() []byte {
- var root interface{}
- if c.State != nil {
- root = c.State.Trie.Root
- } else {
- root = ""
- }
-
- return ethutil.Encode([]interface{}{c.Nonce, c.balance, root, c.CodeHash()})
-}
-
-func (c *StateObject) CodeHash() ethutil.Bytes {
- var codeHash []byte
- if len(c.Code) > 0 {
- codeHash = crypto.Sha3(c.Code)
- }
-
- return codeHash
-}
-
-func (c *StateObject) RlpDecode(data []byte) {
- decoder := ethutil.NewValueFromBytes(data)
-
- c.Nonce = decoder.Get(0).Uint()
- c.balance = decoder.Get(1).BigInt()
- c.State = New(ethtrie.New(ethutil.Config.Db, decoder.Get(2).Interface()))
- c.storage = make(map[string]*ethutil.Value)
- c.gasPool = new(big.Int)
-
- c.codeHash = decoder.Get(3).Bytes()
-
- c.Code, _ = ethutil.Config.Db.Get(c.codeHash)
-}
-
-// Storage change object. Used by the manifest for notifying changes to
-// the sub channels.
-type StorageState struct {
- StateAddress []byte
- Address []byte
- Value *big.Int
-}
diff --git a/ethstate/state_test.go b/ethstate/state_test.go
deleted file mode 100644
index 2454fce84..000000000
--- a/ethstate/state_test.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package ethstate
-
-import (
- "testing"
-
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/ethtrie"
- "github.com/ethereum/go-ethereum/ethutil"
-)
-
-var ZeroHash256 = make([]byte, 32)
-
-func TestSnapshot(t *testing.T) {
- db, _ := ethdb.NewMemDatabase()
- ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "")
- ethutil.Config.Db = db
-
- state := New(ethtrie.New(db, ""))
-
- stateObject := state.GetOrNewStateObject([]byte("aa"))
-
- stateObject.SetStorage(ethutil.Big("0"), ethutil.NewValue(42))
-
- snapshot := state.Copy()
-
- stateObject = state.GetStateObject([]byte("aa"))
- stateObject.SetStorage(ethutil.Big("0"), ethutil.NewValue(43))
-
- state.Set(snapshot)
-
- stateObject = state.GetStateObject([]byte("aa"))
- res := stateObject.GetStorage(ethutil.Big("0"))
- if !res.Cmp(ethutil.NewValue(42)) {
- t.Error("Expected storage 0 to be 42", res)
- }
-}