Jelajahi Sumber

Moved handling of nonces to the managed state

obscuren 10 tahun lalu
induk
melakukan
204ac81188
3 mengubah file dengan 9 tambahan dan 6 penghapusan
  1. 2 2
      core/state/managed_state.go
  2. 6 3
      core/state/managed_state_test.go
  3. 1 1
      eth/backend.go

+ 2 - 2
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}
 }

+ 6 - 3
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))
 	}
 }

+ 1 - 1
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())
 		}
 	}
 }