From c44830ebf316bf22104d01aa114d2b6d765d7a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 16 Dec 2016 13:19:02 +0200 Subject: [PATCH] core, light: allow zero cost txs from inexistent accounts too --- core/tx_pool.go | 24 ++++++++---------------- core/tx_pool_test.go | 4 ---- light/txpool.go | 13 +------------ 3 files changed, 9 insertions(+), 32 deletions(-) diff --git a/core/tx_pool.go b/core/tx_pool.go index 65e076df9c..c5421fa021 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -37,15 +37,14 @@ import ( var ( // Transaction Pool Errors - ErrInvalidSender = errors.New("Invalid sender") - ErrNonce = errors.New("Nonce too low") - ErrCheap = errors.New("Gas price too low for acceptance") - ErrBalance = errors.New("Insufficient balance") - ErrNonExistentAccount = errors.New("Account does not exist or account balance too low") - ErrInsufficientFunds = errors.New("Insufficient funds for gas * price + value") - ErrIntrinsicGas = errors.New("Intrinsic gas too low") - ErrGasLimit = errors.New("Exceeds block gas limit") - ErrNegativeValue = errors.New("Negative value") + ErrInvalidSender = errors.New("Invalid sender") + ErrNonce = errors.New("Nonce too low") + ErrCheap = errors.New("Gas price too low for acceptance") + ErrBalance = errors.New("Insufficient balance") + ErrInsufficientFunds = errors.New("Insufficient funds for gas * price + value") + ErrIntrinsicGas = errors.New("Intrinsic gas too low") + ErrGasLimit = errors.New("Exceeds block gas limit") + ErrNegativeValue = errors.New("Negative value") ) var ( @@ -287,13 +286,6 @@ func (pool *TxPool) validateTx(tx *types.Transaction) error { if err != nil { return ErrInvalidSender } - - // Make sure the account exist. Non existent accounts - // haven't got funds and well therefor never pass. - if !currentState.Exist(from) { - return ErrNonExistentAccount - } - // Last but not least check for nonce errors if currentState.GetNonce(from) > tx.Nonce() { return ErrNonce diff --git a/core/tx_pool_test.go b/core/tx_pool_test.go index 3e516735b3..f5fcac19f5 100644 --- a/core/tx_pool_test.go +++ b/core/tx_pool_test.go @@ -129,10 +129,6 @@ func TestInvalidTransactions(t *testing.T) { pool, key := setupTxPool() tx := transaction(0, big.NewInt(100), key) - if err := pool.Add(tx); err != ErrNonExistentAccount { - t.Error("expected", ErrNonExistentAccount) - } - from, _ := deriveSender(tx) currentState, _ := pool.currentState() currentState.AddBalance(from, big.NewInt(1)) diff --git a/light/txpool.go b/light/txpool.go index 4a06d317d8..d0781593b0 100644 --- a/light/txpool.go +++ b/light/txpool.go @@ -346,19 +346,8 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error if from, err = types.Sender(pool.signer, tx); err != nil { return core.ErrInvalidSender } - - // Make sure the account exist. Non existent accounts - // haven't got funds and well therefor never pass. - currentState := pool.currentState() - if h, err := currentState.HasAccount(ctx, from); err == nil { - if !h { - return core.ErrNonExistentAccount - } - } else { - return err - } - // Last but not least check for nonce errors + currentState := pool.currentState() if n, err := currentState.GetNonce(ctx, from); err == nil { if n > tx.Nonce() { return core.ErrNonce