forked from cerc-io/plugeth
core: added CheckNonce() to Message interface
This commit is contained in:
parent
2b94d7fc7f
commit
00787fe781
@ -203,7 +203,8 @@ type callmsg struct {
|
||||
|
||||
func (m callmsg) From() (common.Address, error) { return m.from.Address(), nil }
|
||||
func (m callmsg) FromFrontier() (common.Address, error) { return m.from.Address(), nil }
|
||||
func (m callmsg) Nonce() uint64 { return m.from.Nonce() }
|
||||
func (m callmsg) Nonce() uint64 { return 0 }
|
||||
func (m callmsg) CheckNonce() bool { return false }
|
||||
func (m callmsg) To() *common.Address { return m.to }
|
||||
func (m callmsg) GasPrice() *big.Int { return m.gasPrice }
|
||||
func (m callmsg) Gas() *big.Int { return m.gasLimit }
|
||||
|
@ -128,7 +128,10 @@ func (m callmsg) FromFrontier() (common.Address, error) {
|
||||
return m.from.Address(), nil
|
||||
}
|
||||
func (m callmsg) Nonce() uint64 {
|
||||
return m.from.Nonce()
|
||||
return 0
|
||||
}
|
||||
func (m callmsg) CheckNonce() bool {
|
||||
return false
|
||||
}
|
||||
func (m callmsg) To() *common.Address {
|
||||
return m.to
|
||||
|
@ -71,6 +71,7 @@ type Message interface {
|
||||
Value() *big.Int
|
||||
|
||||
Nonce() uint64
|
||||
CheckNonce() bool
|
||||
Data() []byte
|
||||
}
|
||||
|
||||
@ -208,8 +209,10 @@ func (self *StateTransition) preCheck() (err error) {
|
||||
}
|
||||
|
||||
// Make sure this transaction's nonce is correct
|
||||
if n := self.state.GetNonce(sender.Address()); n != msg.Nonce() {
|
||||
return NonceError(msg.Nonce(), n)
|
||||
if msg.CheckNonce() {
|
||||
if n := self.state.GetNonce(sender.Address()); n != msg.Nonce() {
|
||||
return NonceError(msg.Nonce(), n)
|
||||
}
|
||||
}
|
||||
|
||||
// Pre-pay gas
|
||||
|
@ -113,6 +113,7 @@ func (tx *Transaction) Gas() *big.Int { return new(big.Int).Set(tx.data.Gas
|
||||
func (tx *Transaction) GasPrice() *big.Int { return new(big.Int).Set(tx.data.Price) }
|
||||
func (tx *Transaction) Value() *big.Int { return new(big.Int).Set(tx.data.Amount) }
|
||||
func (tx *Transaction) Nonce() uint64 { return tx.data.AccountNonce }
|
||||
func (tx *Transaction) CheckNonce() bool { return true }
|
||||
|
||||
func (tx *Transaction) To() *common.Address {
|
||||
if tx.data.Recipient == nil {
|
||||
|
@ -424,7 +424,6 @@ func (api *PrivateDebugAPI) traceBlock(block *types.Block, config *vm.Config) (b
|
||||
// callmsg is the message type used for call transations.
|
||||
type callmsg struct {
|
||||
addr common.Address
|
||||
nonce uint64
|
||||
to *common.Address
|
||||
gas, gasPrice *big.Int
|
||||
value *big.Int
|
||||
@ -434,7 +433,8 @@ type callmsg struct {
|
||||
// accessor boilerplate to implement core.Message
|
||||
func (m callmsg) From() (common.Address, error) { return m.addr, nil }
|
||||
func (m callmsg) FromFrontier() (common.Address, error) { return m.addr, nil }
|
||||
func (m callmsg) Nonce() uint64 { return m.nonce }
|
||||
func (m callmsg) Nonce() uint64 { return 0 }
|
||||
func (m callmsg) CheckNonce() bool { return false }
|
||||
func (m callmsg) To() *common.Address { return m.to }
|
||||
func (m callmsg) GasPrice() *big.Int { return m.gasPrice }
|
||||
func (m callmsg) Gas() *big.Int { return m.gas }
|
||||
|
@ -534,7 +534,6 @@ func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.A
|
||||
// callmsg is the message type used for call transations.
|
||||
type callmsg struct {
|
||||
addr common.Address
|
||||
nonce uint64
|
||||
to *common.Address
|
||||
gas, gasPrice *big.Int
|
||||
value *big.Int
|
||||
@ -544,7 +543,8 @@ type callmsg struct {
|
||||
// accessor boilerplate to implement core.Message
|
||||
func (m callmsg) From() (common.Address, error) { return m.addr, nil }
|
||||
func (m callmsg) FromFrontier() (common.Address, error) { return m.addr, nil }
|
||||
func (m callmsg) Nonce() uint64 { return m.nonce }
|
||||
func (m callmsg) Nonce() uint64 { return 0 }
|
||||
func (m callmsg) CheckNonce() bool { return false }
|
||||
func (m callmsg) To() *common.Address { return m.to }
|
||||
func (m callmsg) GasPrice() *big.Int { return m.gasPrice }
|
||||
func (m callmsg) Gas() *big.Int { return m.gas }
|
||||
|
@ -312,4 +312,5 @@ func (self Message) GasPrice() *big.Int { return self.price }
|
||||
func (self Message) Gas() *big.Int { return self.gas }
|
||||
func (self Message) Value() *big.Int { return self.value }
|
||||
func (self Message) Nonce() uint64 { return self.nonce }
|
||||
func (self Message) CheckNonce() bool { return true }
|
||||
func (self Message) Data() []byte { return self.data }
|
||||
|
Loading…
Reference in New Issue
Block a user