mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
internal/ethapi: fix defaults for blob fields
This commit is contained in:
parent
3cc8afb703
commit
1474a8fd57
2 changed files with 29 additions and 17 deletions
|
|
@ -178,10 +178,18 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend) error {
|
|||
// setFeeDefaults fills in default fee values for unspecified tx fields.
|
||||
func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) error {
|
||||
head := b.CurrentHeader()
|
||||
// Sanity check the EIP-4844 fee parameters.
|
||||
if args.BlobFeeCap != nil && args.BlobFeeCap.ToInt().Sign() == 0 {
|
||||
return errors.New("maxFeePerBlobGas must be non-zero")
|
||||
}
|
||||
if b.ChainConfig().IsCancun(head.Number, head.Time) {
|
||||
if err := args.setCancunFeeDefaults(ctx, head, b); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if args.BlobFeeCap != nil {
|
||||
return errors.New("maxFeePerBlobGas is not valid before Cancun is active")
|
||||
}
|
||||
}
|
||||
// If both gasPrice and at least one of the EIP-1559 fee parameters are specified, error.
|
||||
if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) {
|
||||
|
|
@ -203,11 +211,6 @@ func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) erro
|
|||
return nil // No need to set anything, user already set MaxFeePerGas and MaxPriorityFeePerGas
|
||||
}
|
||||
|
||||
// Sanity check the EIP-4844 fee parameters.
|
||||
if args.BlobFeeCap != nil && args.BlobFeeCap.ToInt().Sign() == 0 {
|
||||
return errors.New("maxFeePerBlobGas must be non-zero")
|
||||
}
|
||||
|
||||
// Sanity check the non-EIP-1559 fee parameters.
|
||||
isLondon := b.ChainConfig().IsLondon(head.Number)
|
||||
if args.GasPrice != nil && !eip1559ParamsSet {
|
||||
|
|
@ -220,16 +223,13 @@ func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) erro
|
|||
|
||||
// Now attempt to fill in default value depending on whether London is active or not.
|
||||
if isLondon {
|
||||
if args.BlobFeeCap != nil {
|
||||
return errors.New("maxFeePerBlobGas is not valid before Cancun is active")
|
||||
}
|
||||
// London is active, set maxPriorityFeePerGas and maxFeePerGas.
|
||||
if err := args.setLondonFeeDefaults(ctx, head, b); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil || args.BlobFeeCap != nil {
|
||||
return errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active")
|
||||
if args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil {
|
||||
return errors.New("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active")
|
||||
}
|
||||
// London not active, set gas price.
|
||||
price, err := b.SuggestGasTipCap(ctx)
|
||||
|
|
|
|||
|
|
@ -153,14 +153,14 @@ func TestSetFeeDefaults(t *testing.T) {
|
|||
"legacy",
|
||||
&TransactionArgs{MaxFeePerGas: maxFee},
|
||||
nil,
|
||||
errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active"),
|
||||
errors.New("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active"),
|
||||
},
|
||||
{
|
||||
"dynamic fee tx pre-London, priorityFee set",
|
||||
"legacy",
|
||||
&TransactionArgs{MaxPriorityFeePerGas: fortytwo},
|
||||
nil,
|
||||
errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active"),
|
||||
errors.New("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active"),
|
||||
},
|
||||
{
|
||||
"dynamic fee tx, maxFee < priorityFee",
|
||||
|
|
@ -219,7 +219,7 @@ func TestSetFeeDefaults(t *testing.T) {
|
|||
"legacy",
|
||||
&TransactionArgs{BlobFeeCap: fortytwo},
|
||||
nil,
|
||||
errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active"),
|
||||
errors.New("maxFeePerBlobGas is not valid before Cancun is active"),
|
||||
},
|
||||
{
|
||||
"set gas price and maxFee for blob transaction",
|
||||
|
|
@ -235,6 +235,13 @@ func TestSetFeeDefaults(t *testing.T) {
|
|||
&TransactionArgs{BlobHashes: []common.Hash{}, BlobFeeCap: (*hexutil.Big)(big.NewInt(4)), MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo},
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"fill maxFeePerBlobGas when dynamic fees are set",
|
||||
"cancun",
|
||||
&TransactionArgs{BlobHashes: []common.Hash{}, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo},
|
||||
&TransactionArgs{BlobHashes: []common.Hash{}, BlobFeeCap: (*hexutil.Big)(big.NewInt(4)), MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo},
|
||||
nil,
|
||||
},
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
|
@ -244,11 +251,16 @@ func TestSetFeeDefaults(t *testing.T) {
|
|||
}
|
||||
got := test.in
|
||||
err := got.setFeeDefaults(ctx, b)
|
||||
if err != nil && err.Error() == test.err.Error() {
|
||||
// Test threw expected error.
|
||||
if err != nil {
|
||||
if test.err == nil {
|
||||
t.Fatalf("test %d (%s): unexpected error: %s", i, test.name, err)
|
||||
} else if err.Error() != test.err.Error() {
|
||||
t.Fatalf("test %d (%s): unexpected error: (got: %s, want: %s)", i, test.name, err, test.err)
|
||||
}
|
||||
// Matching error.
|
||||
continue
|
||||
} else if err != nil {
|
||||
t.Fatalf("test %d (%s): unexpected error: %s", i, test.name, err)
|
||||
} else if test.err != nil {
|
||||
t.Fatalf("test %d (%s): expected error: %s", i, test.name, test.err)
|
||||
}
|
||||
if !reflect.DeepEqual(got, test.want) {
|
||||
t.Fatalf("test %d (%s): did not fill defaults as expected: (got: %v, want: %v)", i, test.name, got, test.want)
|
||||
|
|
|
|||
Loading…
Reference in a new issue