diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-09 22:09:28 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-09 22:09:28 +0800 |
commit | afe83af219c2146e022f6665cf30097b582d3e79 (patch) | |
tree | 74ce21d3ea64b1a433ffb723c0171a4071e42392 /ethchain/state.go | |
parent | 5a0bae1dae831818740a2f20ca308c4176f5201d (diff) | |
download | dexon-afe83af219c2146e022f6665cf30097b582d3e79.tar dexon-afe83af219c2146e022f6665cf30097b582d3e79.tar.gz dexon-afe83af219c2146e022f6665cf30097b582d3e79.tar.bz2 dexon-afe83af219c2146e022f6665cf30097b582d3e79.tar.lz dexon-afe83af219c2146e022f6665cf30097b582d3e79.tar.xz dexon-afe83af219c2146e022f6665cf30097b582d3e79.tar.zst dexon-afe83af219c2146e022f6665cf30097b582d3e79.zip |
Moved seeding and moved manifest
Diffstat (limited to 'ethchain/state.go')
-rw-r--r-- | ethchain/state.go | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/ethchain/state.go b/ethchain/state.go index 5d42c40c0..d02584d67 100644 --- a/ethchain/state.go +++ b/ethchain/state.go @@ -116,16 +116,6 @@ func (s *State) Copy() *State { return NewState(s.trie.Copy()) } -type ObjType byte - -const ( - NilTy ObjType = iota - AccountTy - ContractTy - - UnknownTy -) - // Updates any given state object func (s *State) UpdateStateObject(object *StateObject) { addr := object.Address() @@ -145,3 +135,40 @@ func (s *State) Put(key, object []byte) { func (s *State) Root() interface{} { return s.trie.Root } + +// 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 { + // XXX These will be handy in the future. Not important for now. + objectAddresses map[string]bool + storageAddresses map[string]map[string]bool + + objectChanges map[string]*StateObject + storageChanges map[string]map[string]*big.Int +} + +func NewManifest() *Manifest { + m := &Manifest{objectAddresses: make(map[string]bool), storageAddresses: make(map[string]map[string]bool)} + m.Reset() + + return m +} + +func (m *Manifest) Reset() { + m.objectChanges = make(map[string]*StateObject) + m.storageChanges = make(map[string]map[string]*big.Int) +} + +func (m *Manifest) AddObjectChange(stateObject *StateObject) { + m.objectChanges[string(stateObject.Address())] = stateObject +} + +func (m *Manifest) AddStorageChange(stateObject *StateObject, storageAddr []byte, storage *big.Int) { + if m.storageChanges[string(stateObject.Address())] == nil { + m.storageChanges[string(stateObject.Address())] = make(map[string]*big.Int) + } + + m.storageChanges[string(stateObject.Address())][string(storageAddr)] = storage +} |