forked from cerc-io/plugeth
core, eth/downloader: validate blobtx.To at serialization time (#27393)
This commit is contained in:
parent
495692c9db
commit
008086f935
@ -89,9 +89,6 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error {
|
|||||||
|
|
||||||
// Validate the data blobs individually too
|
// Validate the data blobs individually too
|
||||||
if tx.Type() == types.BlobTxType {
|
if tx.Type() == types.BlobTxType {
|
||||||
if tx.To() == nil {
|
|
||||||
return errors.New("contract creation attempt by blob transaction") // TODO(karalabe): Why not make the field non-nil-able
|
|
||||||
}
|
|
||||||
if len(tx.BlobHashes()) == 0 {
|
if len(tx.BlobHashes()) == 0 {
|
||||||
return errors.New("no-blob blob transaction present in block body")
|
return errors.New("no-blob blob transaction present in block body")
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ var (
|
|||||||
}),
|
}),
|
||||||
// EIP-4844 transactions.
|
// EIP-4844 transactions.
|
||||||
NewTx(&BlobTx{
|
NewTx(&BlobTx{
|
||||||
To: &to6,
|
To: to6,
|
||||||
Nonce: 6,
|
Nonce: 6,
|
||||||
Value: uint256.NewInt(6),
|
Value: uint256.NewInt(6),
|
||||||
Gas: 6,
|
Gas: 6,
|
||||||
@ -139,7 +139,7 @@ var (
|
|||||||
BlobFeeCap: uint256.NewInt(100066),
|
BlobFeeCap: uint256.NewInt(100066),
|
||||||
}),
|
}),
|
||||||
NewTx(&BlobTx{
|
NewTx(&BlobTx{
|
||||||
To: &to7,
|
To: to7,
|
||||||
Nonce: 7,
|
Nonce: 7,
|
||||||
Value: uint256.NewInt(7),
|
Value: uint256.NewInt(7),
|
||||||
Gas: 7,
|
Gas: 7,
|
||||||
|
@ -290,9 +290,10 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error {
|
|||||||
return errors.New("missing required field 'nonce' in transaction")
|
return errors.New("missing required field 'nonce' in transaction")
|
||||||
}
|
}
|
||||||
itx.Nonce = uint64(*dec.Nonce)
|
itx.Nonce = uint64(*dec.Nonce)
|
||||||
if dec.To != nil {
|
if dec.To == nil {
|
||||||
itx.To = dec.To
|
return errors.New("missing required field 'to' in transaction")
|
||||||
}
|
}
|
||||||
|
itx.To = *dec.To
|
||||||
if dec.Gas == nil {
|
if dec.Gas == nil {
|
||||||
return errors.New("missing required field 'gas' for txdata")
|
return errors.New("missing required field 'gas' for txdata")
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ type BlobTx struct {
|
|||||||
GasTipCap *uint256.Int // a.k.a. maxPriorityFeePerGas
|
GasTipCap *uint256.Int // a.k.a. maxPriorityFeePerGas
|
||||||
GasFeeCap *uint256.Int // a.k.a. maxFeePerGas
|
GasFeeCap *uint256.Int // a.k.a. maxFeePerGas
|
||||||
Gas uint64
|
Gas uint64
|
||||||
To *common.Address `rlp:"nil"` // nil means contract creation
|
To common.Address
|
||||||
Value *uint256.Int
|
Value *uint256.Int
|
||||||
Data []byte
|
Data []byte
|
||||||
AccessList AccessList
|
AccessList AccessList
|
||||||
@ -48,7 +48,7 @@ type BlobTx struct {
|
|||||||
func (tx *BlobTx) copy() TxData {
|
func (tx *BlobTx) copy() TxData {
|
||||||
cpy := &BlobTx{
|
cpy := &BlobTx{
|
||||||
Nonce: tx.Nonce,
|
Nonce: tx.Nonce,
|
||||||
To: copyAddressPtr(tx.To),
|
To: tx.To,
|
||||||
Data: common.CopyBytes(tx.Data),
|
Data: common.CopyBytes(tx.Data),
|
||||||
Gas: tx.Gas,
|
Gas: tx.Gas,
|
||||||
// These are copied below.
|
// These are copied below.
|
||||||
@ -104,7 +104,7 @@ func (tx *BlobTx) gasTipCap() *big.Int { return tx.GasTipCap.ToBig() }
|
|||||||
func (tx *BlobTx) gasPrice() *big.Int { return tx.GasFeeCap.ToBig() }
|
func (tx *BlobTx) gasPrice() *big.Int { return tx.GasFeeCap.ToBig() }
|
||||||
func (tx *BlobTx) value() *big.Int { return tx.Value.ToBig() }
|
func (tx *BlobTx) value() *big.Int { return tx.Value.ToBig() }
|
||||||
func (tx *BlobTx) nonce() uint64 { return tx.Nonce }
|
func (tx *BlobTx) nonce() uint64 { return tx.Nonce }
|
||||||
func (tx *BlobTx) to() *common.Address { return tx.To }
|
func (tx *BlobTx) to() *common.Address { tmp := tx.To; return &tmp }
|
||||||
func (tx *BlobTx) blobGas() uint64 { return params.BlobTxDataGasPerBlob * uint64(len(tx.BlobHashes)) }
|
func (tx *BlobTx) blobGas() uint64 { return params.BlobTxDataGasPerBlob * uint64(len(tx.BlobHashes)) }
|
||||||
func (tx *BlobTx) blobGasFeeCap() *big.Int { return tx.BlobFeeCap.ToBig() }
|
func (tx *BlobTx) blobGasFeeCap() *big.Int { return tx.BlobFeeCap.ToBig() }
|
||||||
func (tx *BlobTx) blobHashes() []common.Hash { return tx.BlobHashes }
|
func (tx *BlobTx) blobHashes() []common.Hash { return tx.BlobHashes }
|
||||||
|
@ -806,9 +806,6 @@ func (q *queue) DeliverBodies(id string, txLists [][]*types.Transaction, txListH
|
|||||||
|
|
||||||
// Validate the data blobs individually too
|
// Validate the data blobs individually too
|
||||||
if tx.Type() == types.BlobTxType {
|
if tx.Type() == types.BlobTxType {
|
||||||
if tx.To() == nil {
|
|
||||||
return errInvalidBody // TODO(karalabe): Why not make the field non-nil-able
|
|
||||||
}
|
|
||||||
if len(tx.BlobHashes()) == 0 {
|
if len(tx.BlobHashes()) == 0 {
|
||||||
return errInvalidBody
|
return errInvalidBody
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user