Moved handling of nonces to the managed state

pull/667/head
obscuren 10 years ago
parent 6e2f78ebdd
commit 204ac81188
  1. 4
      core/state/managed_state.go
  2. 9
      core/state/managed_state_test.go
  3. 2
      eth/backend.go

@ -62,7 +62,7 @@ func (ms *ManagedState) NewNonce(addr common.Address) uint64 {
} }
} }
account.nonces = append(account.nonces, true) account.nonces = append(account.nonces, true)
return uint64(len(account.nonces)) + account.nstart return uint64(len(account.nonces)-1) + account.nstart
} }
// GetNonce returns the canonical nonce for the managed or unmanged account // GetNonce returns the canonical nonce for the managed or unmanged account
@ -109,5 +109,5 @@ func (ms *ManagedState) getAccount(addr common.Address) *account {
} }
func newAccount(so *StateObject) *account { func newAccount(so *StateObject) *account {
return &account{so, so.nonce - 1, nil} return &account{so, so.nonce, nil}
} }

@ -4,12 +4,15 @@ import (
"testing" "testing"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethdb"
) )
var addr = common.BytesToAddress([]byte("test")) var addr = common.BytesToAddress([]byte("test"))
func create() (*ManagedState, *account) { func create() (*ManagedState, *account) {
ms := ManageState(&StateDB{stateObjects: make(map[string]*StateObject)}) db, _ := ethdb.NewMemDatabase()
statedb := New(common.Hash{}, db)
ms := ManageState(statedb)
so := &StateObject{address: addr, nonce: 100} so := &StateObject{address: addr, nonce: 100}
ms.StateDB.stateObjects[addr.Str()] = so ms.StateDB.stateObjects[addr.Str()] = so
ms.accounts[addr.Str()] = newAccount(so) ms.accounts[addr.Str()] = newAccount(so)
@ -95,13 +98,13 @@ func TestSetNonce(t *testing.T) {
ms.SetNonce(addr, 10) ms.SetNonce(addr, 10)
if ms.GetNonce(addr) != 10 { if ms.GetNonce(addr) != 10 {
t.Errorf("Expected nonce of 10, got", ms.GetNonce(addr)) t.Error("Expected nonce of 10, got", ms.GetNonce(addr))
} }
addr[0] = 1 addr[0] = 1
ms.StateDB.SetNonce(addr, 1) ms.StateDB.SetNonce(addr, 1)
if ms.GetNonce(addr) != 1 { if ms.GetNonce(addr) != 1 {
t.Errorf("Expected nonce of 1, got", ms.GetNonce(addr)) t.Error("Expected nonce of 1, got", ms.GetNonce(addr))
} }
} }

@ -449,7 +449,7 @@ func (self *Ethereum) syncAccounts(tx *types.Transaction) {
if self.accountManager.HasAccount(from.Bytes()) { if self.accountManager.HasAccount(from.Bytes()) {
if self.chainManager.TxState().GetNonce(from) < tx.Nonce() { if self.chainManager.TxState().GetNonce(from) < tx.Nonce() {
self.chainManager.TxState().SetNonce(from, tx.Nonce()+1) self.chainManager.TxState().SetNonce(from, tx.Nonce())
} }
} }
} }

Loading…
Cancel
Save