Skip to content

Commit

Permalink
fix(zetaclient): tolerate priorityFee > gasFee (#2955)
Browse files Browse the repository at this point in the history
* Fix priority fees edge case

* Address PR comments

* add some context comment

* comment

---------

Co-authored-by: Dmitry S <[email protected]>
  • Loading branch information
lumtis and swift1337 authored Oct 3, 2024
1 parent 1ed1015 commit 49d641b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
11 changes: 10 additions & 1 deletion zetaclient/chains/evm/signer/gas.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,16 @@ func gasFromCCTX(cctx *types.CrossChainTx, logger zerolog.Logger) (Gas, error) {
case err != nil:
return Gas{}, errors.Wrap(err, "unable to parse priorityFee")
case gasPrice.Cmp(priorityFee) == -1:
return Gas{}, fmt.Errorf("gasPrice (%d) is less than priorityFee (%d)", gasPrice.Int64(), priorityFee.Int64())
logger.Warn().
Str("cctx.initial_priority_fee", priorityFee.String()).
Str("cctx.forced_priority_fee", gasPrice.String()).
Msg("gasPrice is less than priorityFee, setting priorityFee = gasPrice")

// this should in theory never happen, but this reported bug might be a cause: https://github.com/zeta-chain/node/issues/2954
// in this case we lower the priorityFee to the gasPrice to ensure the transaction is valid
// the only potential issue is the transaction might not cover the baseFee
// the gas stability pool mechanism help to mitigate this issue
priorityFee = big.NewInt(0).Set(gasPrice)
}

return Gas{
Expand Down
13 changes: 10 additions & 3 deletions zetaclient/chains/evm/signer/gas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,16 @@ func TestGasFromCCTX(t *testing.T) {
errorContains: "unable to parse priorityFee: big.Int is negative",
},
{
name: "gasPrice is less than priorityFee",
cctx: makeCCTX(123_000, gwei(4).String(), gwei(5).String()),
errorContains: "gasPrice (4000000000) is less than priorityFee (5000000000)",
name: "gasPrice is less than priorityFee",
cctx: makeCCTX(123_000, gwei(4).String(), gwei(5).String()),
assert: func(t *testing.T, g Gas) {
assert.False(t, g.isLegacy())
assertGasEquals(t, Gas{
Limit: 123_000,
Price: gwei(4),
PriorityFee: gwei(4),
}, g)
},
},
{
name: "gasPrice is invalid",
Expand Down

0 comments on commit 49d641b

Please sign in to comment.