forked from cerc-io/plugeth
Merge pull request #3454 from karalabe/allow-zeroprice-tx
core: allow zero priced transactions from inexistent accounts too
This commit is contained in:
commit
7b623aab9d
@ -37,15 +37,14 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// Transaction Pool Errors
|
// Transaction Pool Errors
|
||||||
ErrInvalidSender = errors.New("Invalid sender")
|
ErrInvalidSender = errors.New("Invalid sender")
|
||||||
ErrNonce = errors.New("Nonce too low")
|
ErrNonce = errors.New("Nonce too low")
|
||||||
ErrCheap = errors.New("Gas price too low for acceptance")
|
ErrCheap = errors.New("Gas price too low for acceptance")
|
||||||
ErrBalance = errors.New("Insufficient balance")
|
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")
|
||||||
ErrInsufficientFunds = errors.New("Insufficient funds for gas * price + value")
|
ErrIntrinsicGas = errors.New("Intrinsic gas too low")
|
||||||
ErrIntrinsicGas = errors.New("Intrinsic gas too low")
|
ErrGasLimit = errors.New("Exceeds block gas limit")
|
||||||
ErrGasLimit = errors.New("Exceeds block gas limit")
|
ErrNegativeValue = errors.New("Negative value")
|
||||||
ErrNegativeValue = errors.New("Negative value")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -287,13 +286,6 @@ func (pool *TxPool) validateTx(tx *types.Transaction) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return ErrInvalidSender
|
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
|
// Last but not least check for nonce errors
|
||||||
if currentState.GetNonce(from) > tx.Nonce() {
|
if currentState.GetNonce(from) > tx.Nonce() {
|
||||||
return ErrNonce
|
return ErrNonce
|
||||||
|
@ -129,10 +129,6 @@ func TestInvalidTransactions(t *testing.T) {
|
|||||||
pool, key := setupTxPool()
|
pool, key := setupTxPool()
|
||||||
|
|
||||||
tx := transaction(0, big.NewInt(100), key)
|
tx := transaction(0, big.NewInt(100), key)
|
||||||
if err := pool.Add(tx); err != ErrNonExistentAccount {
|
|
||||||
t.Error("expected", ErrNonExistentAccount)
|
|
||||||
}
|
|
||||||
|
|
||||||
from, _ := deriveSender(tx)
|
from, _ := deriveSender(tx)
|
||||||
currentState, _ := pool.currentState()
|
currentState, _ := pool.currentState()
|
||||||
currentState.AddBalance(from, big.NewInt(1))
|
currentState.AddBalance(from, big.NewInt(1))
|
||||||
|
@ -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 {
|
if from, err = types.Sender(pool.signer, tx); err != nil {
|
||||||
return core.ErrInvalidSender
|
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
|
// Last but not least check for nonce errors
|
||||||
|
currentState := pool.currentState()
|
||||||
if n, err := currentState.GetNonce(ctx, from); err == nil {
|
if n, err := currentState.GetNonce(ctx, from); err == nil {
|
||||||
if n > tx.Nonce() {
|
if n > tx.Nonce() {
|
||||||
return core.ErrNonce
|
return core.ErrNonce
|
||||||
|
Loading…
Reference in New Issue
Block a user