mirror of
https://github.com/luxfi/coreth.git
synced 2026-10-30 17:00:51 +00:00
- Replace github.com/luxfi/geth/metrics with github.com/luxfi/metrics - Replace github.com/luxfi/geth/crypto with github.com/luxfi/crypto - Keep github.com/luxfi/geth/log due to API incompatibility with luxfi/log v0.1.1 - Update eth-allowed-packages.txt to reflect new imports - Update go.mod dependencies This change externalizes metrics and crypto packages to use the shared luxfi implementations across all projects. The log package remains from geth due to API differences that would require more extensive refactoring. Sync with latest ava-labs/coreth semantics and test patterns.
177 lines
4.5 KiB
Go
177 lines
4.5 KiB
Go
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package ethapi
|
|
|
|
import (
|
|
"context"
|
|
"math/big"
|
|
"testing"
|
|
|
|
"github.com/luxfi/coreth/params"
|
|
"github.com/luxfi/coreth/plugin/evm/upgrade/lp176"
|
|
"github.com/luxfi/geth/common"
|
|
"github.com/luxfi/geth/common/hexutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type testSuggestPriceOptionsBackend struct {
|
|
Backend // embed the interface to avoid implementing unused methods
|
|
|
|
estimateBaseFee *big.Int
|
|
suggestGasTipCap *big.Int
|
|
|
|
cfg PriceOptionConfig
|
|
}
|
|
|
|
func (b *testSuggestPriceOptionsBackend) EstimateBaseFee(context.Context) (*big.Int, error) {
|
|
return b.estimateBaseFee, nil
|
|
}
|
|
|
|
func (b *testSuggestPriceOptionsBackend) SuggestGasTipCap(context.Context) (*big.Int, error) {
|
|
return b.suggestGasTipCap, nil
|
|
}
|
|
|
|
func (b *testSuggestPriceOptionsBackend) PriceOptionsConfig() PriceOptionConfig {
|
|
return b.cfg
|
|
}
|
|
|
|
func TestSuggestPriceOptions(t *testing.T) {
|
|
testCfg := PriceOptionConfig{
|
|
SlowFeePercentage: 95,
|
|
FastFeePercentage: 105,
|
|
MaxTip: 20 * params.GWei,
|
|
}
|
|
slowFeeNumerator := testCfg.SlowFeePercentage
|
|
fastFeeNumerator := testCfg.FastFeePercentage
|
|
maxNormalGasTip := testCfg.MaxTip
|
|
|
|
tests := []struct {
|
|
name string
|
|
estimateBaseFee *big.Int
|
|
suggestGasTipCap *big.Int
|
|
cfg PriceOptionConfig
|
|
want *PriceOptions
|
|
}{
|
|
{
|
|
name: "nil_base_fee",
|
|
estimateBaseFee: nil,
|
|
suggestGasTipCap: common.Big1,
|
|
want: nil,
|
|
},
|
|
{
|
|
name: "nil_tip_cap",
|
|
estimateBaseFee: common.Big1,
|
|
suggestGasTipCap: nil,
|
|
want: nil,
|
|
},
|
|
{
|
|
name: "minimum_values",
|
|
estimateBaseFee: big.NewInt(lp176.MinGasPrice),
|
|
suggestGasTipCap: bigMinGasTip,
|
|
cfg: testCfg,
|
|
want: &PriceOptions{
|
|
Slow: newPrice(
|
|
minGasTip,
|
|
2*lp176.MinGasPrice+minGasTip,
|
|
),
|
|
Normal: newPrice(
|
|
minGasTip,
|
|
2*lp176.MinGasPrice+minGasTip,
|
|
),
|
|
Fast: newPrice(
|
|
minGasTip,
|
|
2*lp176.MinGasPrice+(fastFeeNumerator*minGasTip/feeDenominator),
|
|
),
|
|
},
|
|
},
|
|
{
|
|
name: "maximum_values_1_slow_2_fast",
|
|
estimateBaseFee: big.NewInt(100 * params.GWei),
|
|
suggestGasTipCap: new(big.Int).SetUint64(maxNormalGasTip),
|
|
cfg: PriceOptionConfig{
|
|
SlowFeePercentage: 100,
|
|
FastFeePercentage: 200,
|
|
MaxTip: 20 * params.GWei,
|
|
},
|
|
want: &PriceOptions{
|
|
Slow: newPrice(
|
|
20*params.GWei,
|
|
220*params.GWei,
|
|
),
|
|
Normal: newPrice(
|
|
20*params.GWei,
|
|
220*params.GWei,
|
|
),
|
|
Fast: newPrice(
|
|
40*params.GWei,
|
|
240*params.GWei,
|
|
),
|
|
},
|
|
},
|
|
{
|
|
name: "maximum_value",
|
|
cfg: testCfg,
|
|
estimateBaseFee: big.NewInt(100 * params.GWei),
|
|
suggestGasTipCap: new(big.Int).SetUint64(maxNormalGasTip),
|
|
want: &PriceOptions{
|
|
Slow: newPrice(
|
|
(slowFeeNumerator*maxNormalGasTip)/feeDenominator,
|
|
2*100*params.GWei+(slowFeeNumerator*maxNormalGasTip)/feeDenominator,
|
|
),
|
|
Normal: newPrice(
|
|
maxNormalGasTip,
|
|
2*100*params.GWei+maxNormalGasTip,
|
|
),
|
|
Fast: newPrice(
|
|
(fastFeeNumerator*maxNormalGasTip)/feeDenominator,
|
|
2*100*params.GWei+(fastFeeNumerator*maxNormalGasTip)/feeDenominator,
|
|
),
|
|
},
|
|
},
|
|
{
|
|
name: "double_maximum_values",
|
|
estimateBaseFee: big.NewInt(100 * params.GWei),
|
|
suggestGasTipCap: big.NewInt(2 * int64(maxNormalGasTip)),
|
|
cfg: testCfg,
|
|
want: &PriceOptions{
|
|
Slow: newPrice(
|
|
(slowFeeNumerator*maxNormalGasTip)/feeDenominator,
|
|
2*100*params.GWei+(slowFeeNumerator*maxNormalGasTip)/feeDenominator,
|
|
),
|
|
Normal: newPrice(
|
|
maxNormalGasTip,
|
|
2*100*params.GWei+maxNormalGasTip,
|
|
),
|
|
Fast: newPrice(
|
|
(fastFeeNumerator*2*maxNormalGasTip)/feeDenominator,
|
|
2*100*params.GWei+(fastFeeNumerator*2*maxNormalGasTip)/feeDenominator,
|
|
),
|
|
},
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
backend := &testSuggestPriceOptionsBackend{
|
|
estimateBaseFee: test.estimateBaseFee,
|
|
suggestGasTipCap: test.suggestGasTipCap,
|
|
cfg: test.cfg,
|
|
}
|
|
api := NewEthereumAPI(backend)
|
|
|
|
got, err := api.SuggestPriceOptions(context.Background())
|
|
require.NoError(err)
|
|
require.Equal(test.want, got)
|
|
})
|
|
}
|
|
}
|
|
|
|
func newPrice(gasTip, gasFee uint64) *Price {
|
|
return &Price{
|
|
GasTip: (*hexutil.Big)(new(big.Int).SetUint64(gasTip)),
|
|
GasFee: (*hexutil.Big)(new(big.Int).SetUint64(gasFee)),
|
|
}
|
|
}
|