core, light: allow zero cost txs from inexistent accounts too

This commit is contained in:
Péter Szilágyi 2016-12-16 13:19:02 +02:00
parent 38827dd9ca
commit c44830ebf3
No known key found for this signature in database
GPG Key ID: 119A76381CCB7DD2
3 changed files with 9 additions and 32 deletions

View File

@ -41,7 +41,6 @@ var (
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")
@ -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

View File

@ -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))

View File

@ -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