gas

package
v1.7.2-beta0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 7, 2022 License: MIT Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ArbGasInfoAddress is the address of the "Precompiled contract that exists in every Arbitrum chain."
	// https://github.com/OffchainLabs/nitro/blob/f7645453cfc77bf3e3644ea1ac031eff629df325/contracts/src/precompiles/ArbGasInfo.sol
	ArbGasInfoAddress = "0x000000000000000000000000000000000000006C"
	// ArbGasInfo_getPricesInArbGas is the a hex encoded call to:
	// `function getPricesInArbGas() external view returns (uint256, uint256, uint256);`
	ArbGasInfo_getPricesInArbGas = "02199f34"
)
View Source
const LegacyTxType = TxType(0x0)

Variables

View Source
var (
	ErrBumpGasExceedsLimit = errors.New("gas bump exceeds limit")
	ErrBump                = errors.New("gas bump failed")
)
View Source
var ErrMissingBlock = errors.New("missing block")
View Source
var (
	ErrNoSuitableTransactions = errors.New("no suitable transactions")
)
View Source
var MaxStartTime = 10 * time.Second

MaxStartTime is the maximum amount of time we are allowed to spend trying to fill initial data on start. This must be capped because it can block the application from starting.

Functions

func BumpLegacyGasPriceOnly

func BumpLegacyGasPriceOnly(cfg Config, lggr logger.SugaredLogger, currentGasPrice, originalGasPrice *big.Int, originalGasLimit uint64, maxGasPriceWei *big.Int) (gasPrice *big.Int, chainSpecificGasLimit uint64, err error)

BumpLegacyGasPriceOnly will increase the price and apply multiplier to the gas limit

func HexToInt64

func HexToInt64(input interface{}) int64

HexToInt64 performs the inverse of Int64ToHex Returns 0 on invalid input

func Int64ToHex

func Int64ToHex(n int64) string

Int64ToHex converts an int64 into go-ethereum's hex representation

func IsBumpErr

func IsBumpErr(err error) bool

Types

type ArbConfig added in v1.8.1

type ArbConfig interface {
	EvmGasLimitMax() uint64
}

type Block

type Block struct {
	Number        int64
	Hash          common.Hash
	ParentHash    common.Hash
	BaseFeePerGas *big.Int
	Timestamp     time.Time
	Transactions  []Transaction
}

Block represents an ethereum block This type is only used for the block history estimator, and can be expensive to unmarshal. Don't add unnecessary fields here.

func (Block) MarshalJSON

func (b Block) MarshalJSON() ([]byte, error)

MarshalJSON implements json marshalling for Block

func (*Block) UnmarshalJSON

func (b *Block) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals to a Block

type BlockHistoryEstimator

type BlockHistoryEstimator struct {
	utils.StartStopOnce
	// contains filtered or unexported fields
}

func (*BlockHistoryEstimator) BumpDynamicFee

func (b *BlockHistoryEstimator) BumpDynamicFee(originalFee DynamicFee, originalGasLimit uint64, maxGasPriceWei *big.Int) (bumped DynamicFee, chainSpecificGasLimit uint64, err error)

func (*BlockHistoryEstimator) BumpLegacyGas

func (b *BlockHistoryEstimator) BumpLegacyGas(originalGasPrice *big.Int, gasLimit uint64, maxGasPriceWei *big.Int) (bumpedGasPrice *big.Int, chainSpecificGasLimit uint64, err error)

func (*BlockHistoryEstimator) Close

func (b *BlockHistoryEstimator) Close() error

func (*BlockHistoryEstimator) EffectiveGasPrice

func (b *BlockHistoryEstimator) EffectiveGasPrice(block Block, tx Transaction) *big.Int

func (*BlockHistoryEstimator) EffectiveTipCap

func (b *BlockHistoryEstimator) EffectiveTipCap(block Block, tx Transaction) *big.Int

func (*BlockHistoryEstimator) FetchBlocks

func (b *BlockHistoryEstimator) FetchBlocks(ctx context.Context, head *evmtypes.Head) error

FetchBlocks fetches block history leading up to the given head.

func (*BlockHistoryEstimator) FetchBlocksAndRecalculate

func (b *BlockHistoryEstimator) FetchBlocksAndRecalculate(ctx context.Context, head *evmtypes.Head)

FetchBlocksAndRecalculate fetches block history leading up to head and recalculates gas price.

func (*BlockHistoryEstimator) GetDynamicFee

func (b *BlockHistoryEstimator) GetDynamicFee(gasLimit uint64, maxGasPriceWei *big.Int) (fee DynamicFee, chainSpecificGasLimit uint64, err error)

func (*BlockHistoryEstimator) GetLegacyGas

func (b *BlockHistoryEstimator) GetLegacyGas(_ []byte, gasLimit uint64, maxGasPriceWei *big.Int, _ ...Opt) (gasPrice *big.Int, chainSpecificGasLimit uint64, err error)

func (*BlockHistoryEstimator) OnNewLongestChain

func (b *BlockHistoryEstimator) OnNewLongestChain(ctx context.Context, head *evmtypes.Head)

OnNewLongestChain recalculates and sets global gas price if a sampled new head comes in and we are not currently fetching

func (*BlockHistoryEstimator) Recalculate

func (b *BlockHistoryEstimator) Recalculate(head *evmtypes.Head)

Recalculate adds the given heads to the history and recalculates gas price.

func (*BlockHistoryEstimator) RollingBlockHistory

func (b *BlockHistoryEstimator) RollingBlockHistory() []Block

func (*BlockHistoryEstimator) Start

Start starts BlockHistoryEstimator service. The provided context can be used to terminate Start sequence.

type Config

type Config interface {
	BlockHistoryEstimatorBatchSize() uint32
	BlockHistoryEstimatorBlockDelay() uint16
	BlockHistoryEstimatorBlockHistorySize() uint16
	BlockHistoryEstimatorTransactionPercentile() uint16
	BlockHistoryEstimatorEIP1559FeeCapBufferBlocks() uint16
	ChainType() config.ChainType
	EvmEIP1559DynamicFees() bool
	EvmFinalityDepth() uint32
	EvmGasBumpPercent() uint16
	EvmGasBumpThreshold() uint64
	EvmGasBumpWei() *big.Int
	EvmGasFeeCapDefault() *big.Int
	EvmGasLimitMax() uint64
	EvmGasLimitMultiplier() float32
	EvmGasPriceDefault() *big.Int
	EvmGasTipCapDefault() *big.Int
	EvmGasTipCapMinimum() *big.Int
	EvmMaxGasPriceWei() *big.Int
	EvmMinGasPriceWei() *big.Int
	GasEstimatorMode() string
}

Config defines an interface for configuration in the gas package

type DynamicFee

type DynamicFee struct {
	FeeCap *big.Int
	TipCap *big.Int
}

DynamicFee encompasses both FeeCap and TipCap for EIP1559 transactions

func BumpDynamicFeeOnly

func BumpDynamicFeeOnly(config Config, lggr logger.SugaredLogger, currentTipCap *big.Int, currentBaseFee *big.Int, originalFee DynamicFee, originalGasLimit uint64, maxGasPriceWei *big.Int) (bumped DynamicFee, chainSpecificGasLimit uint64, err error)

BumpDynamicFeeOnly bumps the tip cap and max gas price if necessary

type Estimator

type Estimator interface {
	OnNewLongestChain(context.Context, *evmtypes.Head)
	Start(context.Context) error
	Close() error
	// Calculates initial gas fee for non-EIP1559 transaction
	// maxGasPriceWei parameter is the highest possible gas fee cap that the function will return
	GetLegacyGas(calldata []byte, gasLimit uint64, maxGasPriceWei *big.Int, opts ...Opt) (gasPrice *big.Int, chainSpecificGasLimit uint64, err error)
	// Increases gas price and/or limit for non-EIP1559 transactions
	// if the bumped gas fee is greater than maxGasPriceWei, the method returns an error
	BumpLegacyGas(originalGasPrice *big.Int, gasLimit uint64, maxGasPriceWei *big.Int) (bumpedGasPrice *big.Int, chainSpecificGasLimit uint64, err error)
	// Calculates initial gas fee for gas for EIP1559 transactions
	// maxGasPriceWei parameter is the highest possible gas fee cap that the function will return
	GetDynamicFee(gasLimit uint64, maxGasPriceWei *big.Int) (fee DynamicFee, chainSpecificGasLimit uint64, err error)
	// Increases gas price and/or limit for non-EIP1559 transactions
	// if the bumped gas fee or tip caps are greater than maxGasPriceWei, the method returns an error
	BumpDynamicFee(original DynamicFee, gasLimit uint64, maxGasPriceWei *big.Int) (bumped DynamicFee, chainSpecificGasLimit uint64, err error)
}

Estimator provides an interface for estimating gas price and limit

func NewArbitrumEstimator added in v1.8.1

func NewArbitrumEstimator(lggr logger.Logger, cfg ArbConfig, rpcClient rpcClient, ethClient ethClient) Estimator

func NewBlockHistoryEstimator

func NewBlockHistoryEstimator(lggr logger.Logger, ethClient evmclient.Client, cfg Config, chainID big.Int) Estimator

NewBlockHistoryEstimator returns a new BlockHistoryEstimator that listens for new heads and updates the base gas price dynamically based on the configured percentile of gas prices in that block

func NewEstimator

func NewEstimator(lggr logger.Logger, ethClient evmclient.Client, cfg Config) Estimator

NewEstimator returns the estimator for a given config

func NewFixedPriceEstimator

func NewFixedPriceEstimator(cfg Config, lggr logger.Logger) Estimator

NewFixedPriceEstimator returns a new "FixedPrice" estimator which will always use the config default values for gas prices and limits

func NewL2SuggestedPriceEstimator added in v1.8.1

func NewL2SuggestedPriceEstimator(lggr logger.Logger, client rpcClient) Estimator

NewL2SuggestedPriceEstimator returns a new Estimator which uses the L2 suggested gas price.

type Opt

type Opt int

Opt is an option for a gas estimator

const (
	// OptForceRefetch forces the estimator to bust a cache if necessary
	OptForceRefetch Opt = iota
)

type Transaction

type Transaction struct {
	GasPrice             *big.Int
	GasLimit             uint64
	MaxFeePerGas         *big.Int
	MaxPriorityFeePerGas *big.Int
	Type                 TxType
	Hash                 common.Hash
}

Transaction represents an ethereum transaction Use our own type because geth's type has validation failures on e.g. zero gas used, which can occur on other chains. This type is only used for the block history estimator, and can be expensive to unmarshal. Don't add unnecessary fields here.

func (*Transaction) UnmarshalJSON

func (t *Transaction) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals a Transaction

type TxType

type TxType uint8

func (*TxType) UnmarshalJSON

func (txt *TxType) UnmarshalJSON(data []byte) error

NOTE: Need to roll our own unmarshaller since geth's hexutil.Uint64 does not handle double zeroes e.g. 0x00

Directories

Path Synopsis
cmd
arbgas
arbgas takes a single URL argument and prints the result of three GetLegacyGas calls to the Arbitrum gas estimator.
arbgas takes a single URL argument and prints the result of three GetLegacyGas calls to the Arbitrum gas estimator.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL