diff options
author | Ethan Buchman <ethan@coinculture.info> | 2014-11-29 08:39:20 +0800 |
---|---|---|
committer | Ethan Buchman <ethan@coinculture.info> | 2014-11-29 08:42:05 +0800 |
commit | 7c24cd790d39b67ee16ad7f1b1a805fcb131dc8a (patch) | |
tree | 9b9e6e49fcd855884b6718350252fe7461ba60d2 | |
parent | 8cf9ed0ea588e97f2baf0f834248727e8fbca18f (diff) | |
download | dexon-7c24cd790d39b67ee16ad7f1b1a805fcb131dc8a.tar.gz dexon-7c24cd790d39b67ee16ad7f1b1a805fcb131dc8a.tar.zst dexon-7c24cd790d39b67ee16ad7f1b1a805fcb131dc8a.zip |
fix panic on bad sender
-rw-r--r-- | chain/transaction_pool.go | 6 | ||||
-rw-r--r-- | chain/types/transaction.go | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/chain/transaction_pool.go b/chain/transaction_pool.go index 119712ba8..ae96b0251 100644 --- a/chain/transaction_pool.go +++ b/chain/transaction_pool.go @@ -116,7 +116,11 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { // Get the sender //sender := pool.Ethereum.BlockManager().procState.GetAccount(tx.Sender()) - sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender()) + senderAddr := tx.Sender() + if senderAddr == nil { + return fmt.Errorf("Invalid sender") + } + sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(senderAddr) totAmount := new(big.Int).Set(tx.Value) // Make sure there's enough in the sender's account. Having insufficient diff --git a/chain/types/transaction.go b/chain/types/transaction.go index 626a7e5ce..5599512f6 100644 --- a/chain/types/transaction.go +++ b/chain/types/transaction.go @@ -116,7 +116,7 @@ func (tx *Transaction) Sender() []byte { // Validate the returned key. // Return nil if public key isn't in full format - if len(pubkey) != 0 && pubkey[0] != 4 { + if len(pubkey) == 0 || pubkey[0] != 4 { return nil } |