aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-04-09 05:30:07 +0800
committerobscuren <geffobscura@gmail.com>2015-04-09 05:30:07 +0800
commit204ac81188e43900835c6aa5bad6b3e48f3a16d0 (patch)
tree80b54ac93a0d42ffe595b852fa6c565d3f0d088e
parent6e2f78ebdd4c8d0d150327400a16d67cb65fc482 (diff)
downloaddexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.tar
dexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.tar.gz
dexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.tar.bz2
dexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.tar.lz
dexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.tar.xz
dexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.tar.zst
dexon-204ac81188e43900835c6aa5bad6b3e48f3a16d0.zip
Moved handling of nonces to the managed state
-rw-r--r--core/state/managed_state.go4
-rw-r--r--core/state/managed_state_test.go9
-rw-r--r--eth/backend.go2
3 files changed, 9 insertions, 6 deletions
diff --git a/core/state/managed_state.go b/core/state/managed_state.go
index ddf337af3..9d2fc48e7 100644
--- a/core/state/managed_state.go
+++ b/core/state/managed_state.go
@@ -62,7 +62,7 @@ func (ms *ManagedState) NewNonce(addr common.Address) uint64 {
}
}
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
@@ -109,5 +109,5 @@ func (ms *ManagedState) getAccount(addr common.Address) *account {
}
func newAccount(so *StateObject) *account {
- return &account{so, so.nonce - 1, nil}
+ return &account{so, so.nonce, nil}
}
diff --git a/core/state/managed_state_test.go b/core/state/managed_state_test.go
index 766231d21..c7ef2b323 100644
--- a/core/state/managed_state_test.go
+++ b/core/state/managed_state_test.go
@@ -4,12 +4,15 @@ import (
"testing"
"github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/ethdb"
)
var addr = common.BytesToAddress([]byte("test"))
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}
ms.StateDB.stateObjects[addr.Str()] = so
ms.accounts[addr.Str()] = newAccount(so)
@@ -95,13 +98,13 @@ func TestSetNonce(t *testing.T) {
ms.SetNonce(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
ms.StateDB.SetNonce(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))
}
}
diff --git a/eth/backend.go b/eth/backend.go
index 327a5c7f8..c7a5b233f 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -449,7 +449,7 @@ func (self *Ethereum) syncAccounts(tx *types.Transaction) {
if self.accountManager.HasAccount(from.Bytes()) {
if self.chainManager.TxState().GetNonce(from) < tx.Nonce() {
- self.chainManager.TxState().SetNonce(from, tx.Nonce()+1)
+ self.chainManager.TxState().SetNonce(from, tx.Nonce())
}
}
}