diff --git a/core/block_processor.go b/core/block_processor.go index fd4009037..b12f88c47 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -81,7 +81,8 @@ func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, stated _, gas, err := ApplyMessage(NewEnv(statedb, self.bc, tx, block), tx, cb) if err != nil && (IsNonceErr(err) || state.IsGasLimitErr(err) || IsInvalidTxErr(err)) { // If the account is managed, remove the invalid nonce. - self.bc.TxState().RemoveNonce(tx.From(), tx.Nonce()) + from, _ := tx.From() + self.bc.TxState().RemoveNonce(from, tx.Nonce()) return nil, nil, err } diff --git a/core/state_transition.go b/core/state_transition.go index 575bdf026..ef822e86c 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -44,9 +44,10 @@ type StateTransition struct { env vm.Environment } +// Message represents a message sent to a contract. type Message interface { - From() common.Address - To() common.Address + From() (common.Address, error) + To() *common.Address GasPrice() *big.Int Gas() *big.Int