aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
diff options
context:
space:
mode:
Diffstat (limited to 'ethchain')
-rw-r--r--ethchain/state_manager.go24
-rw-r--r--ethchain/transaction_pool.go3
2 files changed, 9 insertions, 18 deletions
diff --git a/ethchain/state_manager.go b/ethchain/state_manager.go
index b8a893d15..fb5753ab3 100644
--- a/ethchain/state_manager.go
+++ b/ethchain/state_manager.go
@@ -50,6 +50,10 @@ type StateManager struct {
// Comparative state it used for comparing and validating end
// results
compState *State
+ // Transiently state. The trans state isn't ever saved, validated and
+ // it could be used for setting account nonces without effecting
+ // the main states.
+ transState *State
manifest *Manifest
}
@@ -65,6 +69,8 @@ func NewStateManager(ethereum EthManager) *StateManager {
manifest: NewManifest(),
}
sm.procState = ethereum.BlockChain().CurrentBlock.State()
+ sm.transState = sm.procState.Copy()
+
return sm
}
@@ -72,22 +78,8 @@ func (sm *StateManager) ProcState() *State {
return sm.procState
}
-// Watches any given address and puts it in the address state store
-func (sm *StateManager) WatchAddr(addr []byte) *CachedStateObject {
- //XXX account := sm.bc.CurrentBlock.state.GetAccount(addr)
- account := sm.procState.GetAccount(addr)
-
- return sm.stateObjectCache.Add(addr, account)
-}
-
-func (sm *StateManager) GetAddrState(addr []byte) *CachedStateObject {
- account := sm.stateObjectCache.Get(addr)
- if account == nil {
- a := sm.procState.GetAccount(addr)
- account = &CachedStateObject{Nonce: a.Nonce, Object: a}
- }
-
- return account
+func (sm *StateManager) TransState() *State {
+ return sm.transState
}
func (sm *StateManager) BlockChain() *BlockChain {
diff --git a/ethchain/transaction_pool.go b/ethchain/transaction_pool.go
index 72836d6cb..56deae0c6 100644
--- a/ethchain/transaction_pool.go
+++ b/ethchain/transaction_pool.go
@@ -148,8 +148,7 @@ func (pool *TxPool) ValidateTransaction(tx *Transaction) error {
}
// Get the sender
- accountState := pool.Ethereum.StateManager().GetAddrState(tx.Sender())
- sender := accountState.Object
+ sender := pool.Ethereum.StateManager().procState.GetAccount(tx.Sender())
totAmount := new(big.Int).Add(tx.Value, new(big.Int).Mul(TxFee, TxFeeRat))
// Make sure there's enough in the sender's account. Having insufficient