Cleaned up
Removed the unneeded address watch mechanism. State manager's transient state should now take care of this.
This commit is contained in:
parent
d709815106
commit
e8fb965ccb
@ -25,24 +25,16 @@ type EthManager interface {
|
|||||||
type StateManager struct {
|
type StateManager struct {
|
||||||
// Mutex for locking the block processor. Blocks can only be handled one at a time
|
// Mutex for locking the block processor. Blocks can only be handled one at a time
|
||||||
mutex sync.Mutex
|
mutex sync.Mutex
|
||||||
|
|
||||||
// Canonical block chain
|
// Canonical block chain
|
||||||
bc *BlockChain
|
bc *BlockChain
|
||||||
// States for addresses. You can watch any address
|
|
||||||
// at any given time
|
|
||||||
stateObjectCache *StateObjectCache
|
|
||||||
|
|
||||||
// Stack for processing contracts
|
// Stack for processing contracts
|
||||||
stack *Stack
|
stack *Stack
|
||||||
// non-persistent key/value memory storage
|
// non-persistent key/value memory storage
|
||||||
mem map[string]*big.Int
|
mem map[string]*big.Int
|
||||||
|
// Proof of work used for validating
|
||||||
Pow PoW
|
Pow PoW
|
||||||
|
// The ethereum manager interface
|
||||||
Ethereum EthManager
|
Ethereum EthManager
|
||||||
|
|
||||||
SecondaryBlockProcessor BlockProcessor
|
|
||||||
|
|
||||||
// The managed states
|
// The managed states
|
||||||
// Processor state. Anything processed will be applied to this
|
// Processor state. Anything processed will be applied to this
|
||||||
// state
|
// state
|
||||||
@ -54,19 +46,18 @@ type StateManager struct {
|
|||||||
// it could be used for setting account nonces without effecting
|
// it could be used for setting account nonces without effecting
|
||||||
// the main states.
|
// the main states.
|
||||||
transState *State
|
transState *State
|
||||||
|
// Manifest for keeping changes regarding state objects. See `notify`
|
||||||
manifest *Manifest
|
manifest *Manifest
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStateManager(ethereum EthManager) *StateManager {
|
func NewStateManager(ethereum EthManager) *StateManager {
|
||||||
sm := &StateManager{
|
sm := &StateManager{
|
||||||
stack: NewStack(),
|
stack: NewStack(),
|
||||||
mem: make(map[string]*big.Int),
|
mem: make(map[string]*big.Int),
|
||||||
Pow: &EasyPow{},
|
Pow: &EasyPow{},
|
||||||
Ethereum: ethereum,
|
Ethereum: ethereum,
|
||||||
stateObjectCache: NewStateObjectCache(),
|
bc: ethereum.BlockChain(),
|
||||||
bc: ethereum.BlockChain(),
|
manifest: NewManifest(),
|
||||||
manifest: NewManifest(),
|
|
||||||
}
|
}
|
||||||
sm.procState = ethereum.BlockChain().CurrentBlock.State()
|
sm.procState = ethereum.BlockChain().CurrentBlock.State()
|
||||||
sm.transState = sm.procState.Copy()
|
sm.transState = sm.procState.Copy()
|
||||||
@ -193,12 +184,6 @@ func (sm *StateManager) ProcessBlock(block *Block, dontReact bool) error {
|
|||||||
// Add the block to the chain
|
// Add the block to the chain
|
||||||
sm.bc.Add(block)
|
sm.bc.Add(block)
|
||||||
|
|
||||||
// If there's a block processor present, pass in the block for further
|
|
||||||
// processing
|
|
||||||
if sm.SecondaryBlockProcessor != nil {
|
|
||||||
sm.SecondaryBlockProcessor.ProcessBlock(block)
|
|
||||||
}
|
|
||||||
|
|
||||||
ethutil.Config.Log.Infof("[STATE] Added block #%d (%x)\n", block.BlockInfo().Number, block.Hash())
|
ethutil.Config.Log.Infof("[STATE] Added block #%d (%x)\n", block.BlockInfo().Number, block.Hash())
|
||||||
if dontReact == false {
|
if dontReact == false {
|
||||||
sm.Ethereum.Reactor().Post("newBlock", block)
|
sm.Ethereum.Reactor().Post("newBlock", block)
|
||||||
|
@ -160,33 +160,8 @@ func (c *StateObject) RlpDecode(data []byte) {
|
|||||||
c.script = decoder.Get(3).Bytes()
|
c.script = decoder.Get(3).Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
// The cached state and state object cache are helpers which will give you somewhat
|
// Storage change object. Used by the manifest for notifying changes to
|
||||||
// control over the nonce. When creating new transactions you're interested in the 'next'
|
// the sub channels.
|
||||||
// nonce rather than the current nonce. This to avoid creating invalid-nonce transactions.
|
|
||||||
type StateObjectCache struct {
|
|
||||||
cachedObjects map[string]*CachedStateObject
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewStateObjectCache() *StateObjectCache {
|
|
||||||
return &StateObjectCache{cachedObjects: make(map[string]*CachedStateObject)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *StateObjectCache) Add(addr []byte, object *StateObject) *CachedStateObject {
|
|
||||||
state := &CachedStateObject{Nonce: object.Nonce, Object: object}
|
|
||||||
s.cachedObjects[string(addr)] = state
|
|
||||||
|
|
||||||
return state
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *StateObjectCache) Get(addr []byte) *CachedStateObject {
|
|
||||||
return s.cachedObjects[string(addr)]
|
|
||||||
}
|
|
||||||
|
|
||||||
type CachedStateObject struct {
|
|
||||||
Nonce uint64
|
|
||||||
Object *StateObject
|
|
||||||
}
|
|
||||||
|
|
||||||
type StorageState struct {
|
type StorageState struct {
|
||||||
StateAddress []byte
|
StateAddress []byte
|
||||||
Address []byte
|
Address []byte
|
||||||
|
Loading…
Reference in New Issue
Block a user