gas

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: May 8, 2024 License: Apache-2.0 Imports: 9 Imported by: 4

Documentation

Index

Constants

View Source
const (
	BurnCodeStorage1P = BurnCode(iota)
	BurnCodeReadFromState1P
	BurnCodeCallTargetNotFound
	BurnCodeGetContext
	BurnCodeGetCallerData
	BurnCodeGetAllowance
	BurnCodeGetStateAnchorInfo
	BurnCodeGetBalance
	BurnCodeGetNFTData
	BurnCodeCallContract
	BurnCodeDeployContract
	BurnCodeEmitEvent1P
	BurnCodeTransferAllowance
	BurnCodeEstimateStorageDepositCost
	BurnCodeSendL1Request

	BurnCodeUtilsHashingBlake2b
	BurnCodeUtilsHashingSha3
	BurnCodeUtilsHashingHname
	BurnCodeUtilsHexEncode
	BurnCodeUtilsHexDecode
	BurnCodeUtilsED25519ValidSig
	BurnCodeUtilsED25519AddrFromPubKey
	BurnCodeUtilsBLSValidSignature
	BurnCodeUtilsBLSAddrFromPubKey
	BurnCodeUtilsBLSAggregateBLS1P

	BurnCodeWasm1P
	BurnCodeMinimumGasPerRequest1P

	BurnCodeEVM1P
)
View Source
const (
	Coef1Send        = 200
	CoefBLSAggregate = 400
)
View Source
const FeePolicyByteSize = util.RatioByteSize + serializer.OneByte + util.RatioByteSize

GasPerToken + ValidatorFeeShare + EVMGasRatio

Variables

View Source
var DefaultEVMGasRatio = util.Ratio32{A: 1, B: 1}

<ISC gas> = <EVM Gas> * <A> / <B>

View Source
var DefaultGasPerToken = util.Ratio32{A: 100, B: 1}

By default each token pays for 100 units of gas

View Source
var ErrUnknownBurnCode = errors.New("unknown gas burn code")
View Source
var LimitsDefault = &Limits{
	MaxGasPerBlock:         1_000_000_000,
	MinGasPerRequest:       10_000,
	MaxGasPerRequest:       50_000_000,
	MaxGasExternalViewCall: 50_000_000,
}

Functions

func EVMBlockGasLimit added in v1.0.3

func EVMBlockGasLimit(gasLimits *Limits, gasRatio *util.Ratio32) uint64

EVMBlockGasLimit returns the ISC block gas limit converted to EVM gas units

func EVMCallGasLimit added in v1.0.3

func EVMCallGasLimit(gasLimits *Limits, gasRatio *util.Ratio32) uint64

EVMCallGasLimit returns the maximum gas limit accepted for an EVM tx

func EVMGasToISC added in v1.0.3

func EVMGasToISC(evmGas uint64, gasRatio *util.Ratio32) uint64

func FeeFromGasWithGasPerToken added in v1.1.0

func FeeFromGasWithGasPerToken(gasUnits uint64, gasPerToken util.Ratio32) uint64

FeeFromGasWithGasPerToken calculates the gas fee using the ISC GasPerToken price

func FeeFromGasWithGasPrice added in v1.1.0

func FeeFromGasWithGasPrice(gasUnits uint64, gasPrice *big.Int, l1BaseTokenDecimals uint32) uint64

FeeFromGasWithGasPerToken calculates the gas fee using the given gasPrice (expressed in ISC base tokens with 'full decimals').

func ISCGasBudgetToEVM added in v1.0.3

func ISCGasBudgetToEVM(iscGasBudget uint64, gasRatio *util.Ratio32) uint64

func ISCGasBurnedToEVM added in v1.0.3

func ISCGasBurnedToEVM(iscGasBurned uint64, gasRatio *util.Ratio32) uint64

Types

type BurnCode

type BurnCode uint16

func BurnCodeFromName added in v1.0.3

func BurnCodeFromName(name string) BurnCode

func (BurnCode) Cost

func (c BurnCode) Cost(p ...uint64) uint64

func (BurnCode) Name

func (c BurnCode) Name() string

type BurnCodeRecord

type BurnCodeRecord struct {
	Name string
	BurnFunction
}

type BurnFunction

type BurnFunction func(x uint64) uint64

type BurnLog

type BurnLog struct {
	Records []BurnRecord `json:"records" swagger:"required"`
}

func NewGasBurnLog

func NewGasBurnLog() *BurnLog

func (*BurnLog) Read added in v1.0.3

func (l *BurnLog) Read(r io.Reader) error

func (*BurnLog) Record

func (l *BurnLog) Record(code BurnCode, gas uint64)

func (*BurnLog) String

func (l *BurnLog) String() string

func (*BurnLog) Write added in v1.0.3

func (l *BurnLog) Write(w io.Writer) error

type BurnRecord

type BurnRecord struct {
	Code      BurnCode `json:"code" swagger:"required"`
	GasBurned uint64   `json:"gasBurned" swagger:"required"`
}

type BurnTable

type BurnTable map[BurnCode]BurnCodeRecord

type FeePolicy added in v1.0.3

type FeePolicy struct {
	// EVMGasRatio expresses the ratio at which EVM gas is converted to ISC gas
	// X = ISC gas, Y = EVM gas => ISC gas = EVM gas * A/B
	EVMGasRatio util.Ratio32 `json:"evmGasRatio" swagger:"desc(The EVM gas ratio (ISC gas = EVM gas * A/B)),required"`

	// GasPerToken specifies how many gas units are paid for each token.
	GasPerToken util.Ratio32 `json:"gasPerToken" swagger:"desc(The gas per token ratio (A/B) (gas/token)),required"`

	// ValidatorFeeShare Validator/Governor fee split: percentage of fees which goes to Validator
	// 0 mean all goes to Governor
	// >=100 all goes to Validator
	ValidatorFeeShare uint8 `json:"validatorFeeShare" swagger:"desc(The validator fee share.),required"`
}

func DefaultFeePolicy added in v1.0.3

func DefaultFeePolicy() *FeePolicy

func FeePolicyFromBytes

func FeePolicyFromBytes(data []byte) (*FeePolicy, error)

func MustFeePolicyFromBytes added in v1.0.3

func MustFeePolicyFromBytes(data []byte) *FeePolicy

func (*FeePolicy) Bytes added in v1.0.3

func (p *FeePolicy) Bytes() []byte

func (*FeePolicy) DefaultGasPriceFullDecimals added in v1.1.0

func (p *FeePolicy) DefaultGasPriceFullDecimals(l1BaseTokenDecimals uint32) *big.Int

DefaultGasPriceFullDecimals returns the default gas price to be set in EVM transactions, when using the ISC GasPerToken.

func (*FeePolicy) FeeFromGas added in v1.0.3

func (p *FeePolicy) FeeFromGas(gasUnits uint64, gasPrice *big.Int, l1BaseTokenDecimals uint32) uint64

func (*FeePolicy) FeeFromGasBurned added in v1.0.3

func (p *FeePolicy) FeeFromGasBurned(gasUnits, availableTokens uint64, gasPrice *big.Int, l1BaseTokenDecimals uint32) (sendToOwner, sendToValidator uint64)

FeeFromGasBurned calculates the how many tokens to take and where to deposit them. if gasPriceEVM == nil, the fee is calculated using the ISC GasPerToken price. Otherwise, the given gasPrice (expressed in base tokens with 'full decimals') is used instead.

func (*FeePolicy) GasBudgetFromTokens added in v1.0.3

func (p *FeePolicy) GasBudgetFromTokens(availableTokens uint64, gasPrice *big.Int, l1BaseTokenDecimals uint32) uint64

func (*FeePolicy) IsEnoughForMinimumFee added in v1.0.3

func (p *FeePolicy) IsEnoughForMinimumFee(availableTokens uint64, gasPrice *big.Int, l1BaseTokenDecimals uint32) bool

func (*FeePolicy) MinFee added in v1.0.3

func (p *FeePolicy) MinFee(gasPrice *big.Int, l1BaseTokenDecimals uint32) uint64

func (*FeePolicy) Read added in v1.0.3

func (p *FeePolicy) Read(r io.Reader) error

func (*FeePolicy) String added in v1.0.3

func (p *FeePolicy) String() string

func (*FeePolicy) Write added in v1.0.3

func (p *FeePolicy) Write(w io.Writer) error

type Limits added in v1.0.3

type Limits struct {
	MaxGasPerBlock         uint64 `json:"maxGasPerBlock" swagger:"desc(The maximum gas per block),required"`
	MinGasPerRequest       uint64 `json:"minGasPerRequest" swagger:"desc(The minimum gas per request),required"`
	MaxGasPerRequest       uint64 `json:"maxGasPerRequest" swagger:"desc(The maximum gas per request),required"`
	MaxGasExternalViewCall uint64 `json:"maxGasExternalViewCall" swagger:"desc(The maximum gas per external view call),required"`
}

func LimitsFromBytes added in v1.0.3

func LimitsFromBytes(data []byte) (*Limits, error)

func (*Limits) Bytes added in v1.0.3

func (gl *Limits) Bytes() []byte

func (*Limits) IsValid added in v1.0.3

func (gl *Limits) IsValid() bool

func (*Limits) Read added in v1.0.3

func (gl *Limits) Read(r io.Reader) error

func (*Limits) String added in v1.0.3

func (gl *Limits) String() string

func (*Limits) Write added in v1.0.3

func (gl *Limits) Write(w io.Writer) error

Jump to

Keyboard shortcuts

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