Moved handling of nonces to the managed state
This commit is contained in:
parent
6e2f78ebdd
commit
204ac81188
@ -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…
Reference in New Issue
Block a user