Documentation ¶
Index ¶
- Constants
- Variables
- func IsForkTransition(fork *uint64, parent *uint64, current uint64) bool
- func VersionWithCommit(gitCommit, gitDate string) string
- type AvalancheContext
- type AvalancheRules
- type ChainConfig
- func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError
- func (c *ChainConfig) CheckConfigForkOrder() error
- func (c *ChainConfig) CheckPrecompilesCompatible(precompileUpgrades []PrecompileUpgrade, time uint64) *ConfigCompatError
- func (c *ChainConfig) Description() string
- func (c *ChainConfig) EnabledStatefulPrecompiles(blockTimestamp uint64) Precompiles
- func (c *ChainConfig) GetActivatingPrecompileConfigs(address common.Address, from *uint64, to uint64, upgrades []PrecompileUpgrade) []precompileconfig.Config
- func (c *ChainConfig) IsBerlin(num *big.Int) bool
- func (c *ChainConfig) IsByzantium(num *big.Int) bool
- func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool
- func (c *ChainConfig) IsConstantinople(num *big.Int) bool
- func (c *ChainConfig) IsDAOFork(num *big.Int) bool
- func (c *ChainConfig) IsEIP150(num *big.Int) bool
- func (c *ChainConfig) IsEIP155(num *big.Int) bool
- func (c *ChainConfig) IsEIP158(num *big.Int) bool
- func (c *ChainConfig) IsHomestead(num *big.Int) bool
- func (c *ChainConfig) IsIstanbul(num *big.Int) bool
- func (c *ChainConfig) IsLondon(num *big.Int) bool
- func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool
- func (c *ChainConfig) IsPetersburg(num *big.Int) bool
- func (c *ChainConfig) IsPrecompileEnabled(address common.Address, timestamp uint64) bool
- func (c *ChainConfig) IsShanghai(num *big.Int, time uint64) bool
- func (c *ChainConfig) IsVerkle(num *big.Int, time uint64) bool
- func (c ChainConfig) MarshalJSON() ([]byte, error)
- func (c *ChainConfig) Rules(blockNum *big.Int, timestamp uint64) Rules
- func (c *ChainConfig) SetEthUpgrades()
- func (c *ChainConfig) ToWithUpgradesJSON() *ChainConfigWithUpgradesJSON
- func (c *ChainConfig) UnmarshalJSON(data []byte) error
- func (c *ChainConfig) Verify() error
- type ChainConfigWithUpgradesJSON
- type ConfigCompatError
- type EthRules
- type NetworkUpgrades
- func (n *NetworkUpgrades) CheckNetworkUpgradesCompatible(newcfg *NetworkUpgrades, time uint64) *ConfigCompatError
- func (n *NetworkUpgrades) Description() string
- func (n *NetworkUpgrades) Equal(other *NetworkUpgrades) bool
- func (n *NetworkUpgrades) GetAvalancheRules(timestamp uint64) AvalancheRules
- func (n *NetworkUpgrades) IsApricotPhase1(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhase2(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhase3(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhase4(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhase5(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhase6(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhasePost6(time uint64) bool
- func (n *NetworkUpgrades) IsApricotPhasePre6(time uint64) bool
- func (n *NetworkUpgrades) IsBanff(time uint64) bool
- func (n *NetworkUpgrades) IsCortina(time uint64) bool
- func (n *NetworkUpgrades) IsDurango(time uint64) bool
- func (n *NetworkUpgrades) IsEtna(time uint64) bool
- type PrecompileUpgrade
- type Precompiles
- type Rules
- type UpgradeConfig
Constants ¶
const ( // MinGasPrice is the number of nAVAX required per gas unit for a // transaction to be valid, measured in wei LaunchMinGasPrice int64 = 470 * GWei ApricotPhase1MinGasPrice int64 = 225 * GWei AvalancheAtomicTxFee = units.MilliAvax ApricotPhase1GasLimit uint64 = 8_000_000 CortinaGasLimit uint64 = 15_000_000 ApricotPhase3MinBaseFee int64 = 75 * GWei ApricotPhase3MaxBaseFee int64 = 225 * GWei ApricotPhase3InitialBaseFee int64 = 225 * GWei ApricotPhase3TargetGas uint64 = 10_000_000 ApricotPhase4MinBaseFee int64 = 25 * GWei ApricotPhase4MaxBaseFee int64 = 1_000 * GWei ApricotPhase4BaseFeeChangeDenominator uint64 = 12 ApricotPhase5TargetGas uint64 = 15_000_000 ApricotPhase5BaseFeeChangeDenominator uint64 = 36 EtnaMinBaseFee int64 = GWei DynamicFeeExtraDataSize = 80 RollupWindow uint64 = 10 // The base cost to charge per atomic transaction. Added in Apricot Phase 5. AtomicTxBaseCost uint64 = 10_000 )
Minimum Gas Price
const ( Wei = 1 GWei = 1e9 Ether = 1e18 )
These are the multipliers for ether denominations. Example: To get the wei value of an amount in 'gwei', use
new(big.Int).Mul(value, big.NewInt(params.GWei))
const ( // BloomBitsBlocks is the number of blocks a single bloom bit section vector // contains on the server side. BloomBitsBlocks uint64 = 4096 // BloomBitsBlocksClient is the number of blocks a single bloom bit section vector // contains on the light client side BloomBitsBlocksClient uint64 = 32768 // BloomConfirms is the number of confirmation blocks before a bloom section is // considered probably final and its rotated bits are calculated. BloomConfirms = 256 // CHTFrequency is the block frequency for creating CHTs CHTFrequency = 32768 // BloomTrieFrequency is the block frequency for creating BloomTrie on both // server/client sides. BloomTrieFrequency = 32768 // HelperTrieConfirmations is the number of confirmations before a client is expected // to have the given HelperTrie available. HelperTrieConfirmations = 2048 // HelperTrieProcessConfirmations is the number of confirmations before a HelperTrie // is generated HelperTrieProcessConfirmations = 256 // CheckpointFrequency is the block frequency for creating checkpoint CheckpointFrequency = 32768 // CheckpointProcessConfirmations is the number before a checkpoint is generated CheckpointProcessConfirmations = 256 // FullImmutabilityThreshold is the number of blocks after which a chain segment is // considered immutable (i.e. soft finality). It is used by the downloader as a // hard limit against deep ancestors, by the blockchain against deep reorgs, by // the freezer as the cutoff threshold and by clique as the snapshot trust limit. FullImmutabilityThreshold = 90000 // LightImmutabilityThreshold is the number of blocks after which a header chain // segment is considered immutable for light client(i.e. soft finality). It is used by // the downloader as a hard limit against deep ancestors, by the blockchain against deep // reorgs, by the light pruner as the pruning validity guarantee. LightImmutabilityThreshold = 30000 )
const ( GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations. MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be. MaxGasLimit uint64 = 0x7fffffffffffffff // Maximum the gas limit (2^63-1). GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block. // Note: MaximumExtraDataSize has been reduced to 32 in Geth, but is kept the same in Coreth for // backwards compatibility. MaximumExtraDataSize uint64 = 64 // Maximum size extra data may be after Genesis. ExpByteGas uint64 = 10 // Times ceil(log256(exponent)) for the EXP instruction. SloadGas uint64 = 50 // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. CallValueTransferGas uint64 = 9000 // Paid for CALL when the value transfer is non-zero. CallNewAccountGas uint64 = 25000 // Paid for CALL when the destination address didn't exist prior. TxGas uint64 = 21000 // Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions. TxGasContractCreation uint64 = 53000 // Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions. TxDataZeroGas uint64 = 4 // Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions. QuadCoeffDiv uint64 = 512 // Divisor for the quadratic particle of the memory cost equation. LogDataGas uint64 = 8 // Per byte in a LOG* operation's data. CallStipend uint64 = 2300 // Free gas given at beginning of call. Keccak256Gas uint64 = 30 // Once per KECCAK256 operation. Keccak256WordGas uint64 = 6 // Once per word of the KECCAK256 operation's data. InitCodeWordGas uint64 = 2 // Once per word of the init code when creating a contract. SstoreSetGas uint64 = 20000 // Once per SSTORE operation. SstoreResetGas uint64 = 5000 // Once per SSTORE operation if the zeroness changes from zero. SstoreClearGas uint64 = 5000 // Once per SSTORE operation if the zeroness doesn't change. SstoreRefundGas uint64 = 15000 // Once per SSTORE operation if the zeroness changes to zero. NetSstoreNoopGas uint64 = 200 // Once per SSTORE operation if the value doesn't change. NetSstoreInitGas uint64 = 20000 // Once per SSTORE operation from clean zero. NetSstoreCleanGas uint64 = 5000 // Once per SSTORE operation from clean non-zero. NetSstoreDirtyGas uint64 = 200 // Once per SSTORE operation from dirty. NetSstoreClearRefund uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot NetSstoreResetRefund uint64 = 4800 // Once per SSTORE operation for resetting to the original non-zero value NetSstoreResetClearRefund uint64 = 19800 // Once per SSTORE operation for resetting to the original zero value SstoreSentryGasEIP2200 uint64 = 2300 // Minimum gas required to be present for an SSTORE call, not consumed SstoreSetGasEIP2200 uint64 = 20000 // Once per SSTORE operation from clean zero to non-zero SstoreResetGasEIP2200 uint64 = 5000 // Once per SSTORE operation from clean non-zero to something else SstoreClearsScheduleRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot ColdAccountAccessCostEIP2929 = uint64(2600) // COLD_ACCOUNT_ACCESS_COST ColdSloadCostEIP2929 = uint64(2100) // COLD_SLOAD_COST WarmStorageReadCostEIP2929 = uint64(100) // WARM_STORAGE_READ_COST // In EIP-2200: SstoreResetGas was 5000. // In EIP-2929: SstoreResetGas was changed to '5000 - COLD_SLOAD_COST'. // In EIP-3529: SSTORE_CLEARS_SCHEDULE is defined as SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST // Which becomes: 5000 - 2100 + 1900 = 4800 SstoreClearsScheduleRefundEIP3529 uint64 = SstoreResetGasEIP2200 - ColdSloadCostEIP2929 + TxAccessListStorageKeyGas JumpdestGas uint64 = 1 // Once per JUMPDEST operation. EpochDuration uint64 = 30000 // Duration between proof-of-work epochs. CreateDataGas uint64 = 200 // CallCreateDepth uint64 = 1024 // Maximum depth of call/create stack. ExpGas uint64 = 10 // Once per EXP instruction LogGas uint64 = 375 // Per LOG* operation. CopyGas uint64 = 3 // StackLimit uint64 = 1024 // Maximum size of VM stack allowed. TierStepGas uint64 = 0 // Once per operation, for a selection of them. LogTopicGas uint64 = 375 // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas. CreateGas uint64 = 32000 // Once per CREATE operation & contract-creation transaction. Create2Gas uint64 = 32000 // Once per CREATE2 operation SelfdestructRefundGas uint64 = 24000 // Refunded following a selfdestruct operation. MemoryGas uint64 = 3 // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL. TxDataNonZeroGasFrontier uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions. TxDataNonZeroGasEIP2028 uint64 = 16 // Per byte of non zero data attached to a transaction after EIP 2028 (part in Istanbul) TxAccessListAddressGas uint64 = 2400 // Per address specified in EIP 2930 access list TxAccessListStorageKeyGas uint64 = 1900 // Per storage key specified in EIP 2930 access list // These have been changed during the course of the chain CallGasFrontier uint64 = 40 // Once per CALL operation & message call transaction. CallGasEIP150 uint64 = 700 // Static portion of gas for CALL-derivates after EIP 150 (Tangerine) BalanceGasFrontier uint64 = 20 // The cost of a BALANCE operation BalanceGasEIP150 uint64 = 400 // The cost of a BALANCE operation after Tangerine BalanceGasEIP1884 uint64 = 700 // The cost of a BALANCE operation after EIP 1884 (part of Istanbul) ExtcodeSizeGasFrontier uint64 = 20 // Cost of EXTCODESIZE before EIP 150 (Tangerine) ExtcodeSizeGasEIP150 uint64 = 700 // Cost of EXTCODESIZE after EIP 150 (Tangerine) SloadGasFrontier uint64 = 50 SloadGasEIP150 uint64 = 200 SloadGasEIP1884 uint64 = 800 // Cost of SLOAD after EIP 1884 (part of Istanbul) SloadGasEIP2200 uint64 = 800 // Cost of SLOAD after EIP 2200 (part of Istanbul) ExtcodeHashGasConstantinople uint64 = 400 // Cost of EXTCODEHASH (introduced in Constantinople) ExtcodeHashGasEIP1884 uint64 = 700 // Cost of EXTCODEHASH after EIP 1884 (part in Istanbul) SelfdestructGasEIP150 uint64 = 5000 // Cost of SELFDESTRUCT post EIP 150 (Tangerine) // EXP has a dynamic portion depending on the size of the exponent ExpByteFrontier uint64 = 10 // was set to 10 in Frontier ExpByteEIP158 uint64 = 50 // was raised to 50 during Eip158 (Spurious Dragon) // Extcodecopy has a dynamic AND a static cost. This represents only the // static portion of the gas. It was changed during EIP 150 (Tangerine) ExtcodeCopyBaseFrontier uint64 = 20 ExtcodeCopyBaseEIP150 uint64 = 700 // CreateBySelfdestructGas is used when the refunded account is one that does // not exist. This logic is similar to call. // Introduced in Tangerine Whistle (Eip 150) CreateBySelfdestructGas uint64 = 25000 MaxCodeSize = 24576 // Maximum bytecode to permit for a contract MaxInitCodeSize = 2 * MaxCodeSize // Maximum initcode to permit in a creation transaction and create instructions EcrecoverGas uint64 = 3000 // Elliptic curve sender recovery gas price Sha256BaseGas uint64 = 60 // Base price for a SHA256 operation Sha256PerWordGas uint64 = 12 // Per-word price for a SHA256 operation Ripemd160BaseGas uint64 = 600 // Base price for a RIPEMD160 operation Ripemd160PerWordGas uint64 = 120 // Per-word price for a RIPEMD160 operation IdentityBaseGas uint64 = 15 // Base price for a data copy operation IdentityPerWordGas uint64 = 3 // Per-work price for a data copy operation Bn256AddGasByzantium uint64 = 500 // Byzantium gas needed for an elliptic curve addition Bn256AddGasIstanbul uint64 = 150 // Gas needed for an elliptic curve addition Bn256ScalarMulGasByzantium uint64 = 40000 // Byzantium gas needed for an elliptic curve scalar multiplication Bn256ScalarMulGasIstanbul uint64 = 6000 // Gas needed for an elliptic curve scalar multiplication Bn256PairingBaseGasByzantium uint64 = 100000 // Byzantium base price for an elliptic curve pairing check Bn256PairingBaseGasIstanbul uint64 = 45000 // Base price for an elliptic curve pairing check Bn256PairingPerPointGasByzantium uint64 = 80000 // Byzantium per-point price for an elliptic curve pairing check Bn256PairingPerPointGasIstanbul uint64 = 34000 // Per-point price for an elliptic curve pairing check Bls12381G1AddGas uint64 = 600 // Price for BLS12-381 elliptic curve G1 point addition Bls12381G1MulGas uint64 = 12000 // Price for BLS12-381 elliptic curve G1 point scalar multiplication Bls12381G2AddGas uint64 = 4500 // Price for BLS12-381 elliptic curve G2 point addition Bls12381G2MulGas uint64 = 55000 // Price for BLS12-381 elliptic curve G2 point scalar multiplication Bls12381PairingBaseGas uint64 = 115000 // Base gas price for BLS12-381 elliptic curve pairing check Bls12381PairingPerPairGas uint64 = 23000 // Per-point pair gas price for BLS12-381 elliptic curve pairing check Bls12381MapG1Gas uint64 = 5500 // Gas price for BLS12-381 mapping field element to G1 operation Bls12381MapG2Gas uint64 = 110000 // Gas price for BLS12-381 mapping field element to G2 operation // The Refund Quotient is the cap on how much of the used gas can be refunded. Before EIP-3529, // up to half the consumed gas could be refunded. Redefined as 1/5th in EIP-3529 RefundQuotient uint64 = 2 RefundQuotientEIP3529 uint64 = 5 BlobTxBytesPerFieldElement = 32 // Size in bytes of a field element BlobTxFieldElementsPerBlob = 4096 // Number of field elements stored in a single data blob BlobTxBlobGasPerBlob = 1 << 17 // Gas consumption of a single data blob (== blob byte size) BlobTxMinBlobGasprice = 1 // Minimum gas price for data blobs BlobTxBlobGaspriceUpdateFraction = 3338477 // Controls the maximum rate of change for blob gas price BlobTxPointEvaluationPrecompileGas = 50000 // Gas price for the point evaluation precompile. BlobTxTargetBlobGasPerBlock = 3 * BlobTxBlobGasPerBlob // Target consumable blob gas for data blobs per block (for 1559-like pricing) MaxBlobGasPerBlock = 6 * BlobTxBlobGasPerBlob // Maximum consumable blob gas for data blobs per block )
const ( // Avalanche Stateful Precompile Params // Gas price for native asset balance lookup. Based on the cost of an SLOAD operation since native // asset balances are kept in state storage. AssetBalanceApricot uint64 = 2100 // Gas price for native asset call. This gas price reflects the additional work done for the native // asset transfer itself, which is a write to state storage. The cost of creating a new account and // normal value transfer is assessed separately from this cost. AssetCallApricot uint64 = 20000 )
const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 13 // Minor version component of the current release VersionPatch = 14 // Patch version component of the current release VersionMeta = "stable" // Version metadata to append to the version string )
Variables ¶
var ( // AvalancheMainnetChainID ... AvalancheMainnetChainID = big.NewInt(43114) // AvalancheFujiChainID ... AvalancheFujiChainID = big.NewInt(43113) // AvalancheLocalChainID ... AvalancheLocalChainID = big.NewInt(43112) )
Avalanche ChainIDs
var ( TestChainConfig = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: utils.NewUint64(0), BanffBlockTimestamp: utils.NewUint64(0), CortinaBlockTimestamp: utils.NewUint64(0), DurangoBlockTimestamp: utils.NewUint64(0), EtnaTimestamp: utils.NewUint64(0), }, } TestLaunchConfig = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: nil, ApricotPhase2BlockTimestamp: nil, ApricotPhase3BlockTimestamp: nil, ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhase1Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: nil, ApricotPhase3BlockTimestamp: nil, ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhase2Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: nil, ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhase3Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhase4Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhase5Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhasePre6Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhase6Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestApricotPhasePost6Config = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: utils.NewUint64(0), BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestBanffChainConfig = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: utils.NewUint64(0), BanffBlockTimestamp: utils.NewUint64(0), CortinaBlockTimestamp: nil, DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestCortinaChainConfig = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: utils.NewUint64(0), BanffBlockTimestamp: utils.NewUint64(0), CortinaBlockTimestamp: utils.NewUint64(0), DurangoBlockTimestamp: nil, EtnaTimestamp: nil, }, } TestDurangoChainConfig = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), ShanghaiTime: utils.NewUint64(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: utils.NewUint64(0), BanffBlockTimestamp: utils.NewUint64(0), CortinaBlockTimestamp: utils.NewUint64(0), DurangoBlockTimestamp: utils.NewUint64(0), EtnaTimestamp: nil, }, } TestEtnaChainConfig = &ChainConfig{ AvalancheContext: AvalancheContext{utils.TestSnowContext()}, ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), ShanghaiTime: utils.NewUint64(0), CancunTime: utils.NewUint64(0), NetworkUpgrades: NetworkUpgrades{ ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: utils.NewUint64(0), ApricotPhase4BlockTimestamp: utils.NewUint64(0), ApricotPhase5BlockTimestamp: utils.NewUint64(0), ApricotPhasePre6BlockTimestamp: utils.NewUint64(0), ApricotPhase6BlockTimestamp: utils.NewUint64(0), ApricotPhasePost6BlockTimestamp: utils.NewUint64(0), BanffBlockTimestamp: utils.NewUint64(0), CortinaBlockTimestamp: utils.NewUint64(0), DurangoBlockTimestamp: utils.NewUint64(0), EtnaTimestamp: utils.NewUint64(0), }, } TestRules = TestChainConfig.Rules(new(big.Int), 0) )
var ( DifficultyBoundDivisor = big.NewInt(2048) // The bound divisor of the difficulty, used in the update calculations. GenesisDifficulty = big.NewInt(131072) // Difficulty of the Genesis block. MinimumDifficulty = big.NewInt(131072) // The minimum that the difficulty may ever be. DurationLimit = big.NewInt(13) // The decision boundary on the blocktime duration used to determine whether difficulty should go up or not. // BeaconRootsStorageAddress is the address where historical beacon roots are stored as per EIP-4788 BeaconRootsStorageAddress = common.HexToAddress("0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02") // SystemAddress is where the system-transaction is sent from as per EIP-4788 SystemAddress common.Address = common.HexToAddress("0xfffffffffffffffffffffffffffffffffffffffe") )
var AtomicGasLimit *big.Int = big.NewInt(100_000)
The atomic gas limit specifies the maximum amount of gas that can be consumed by the atomic transactions included in a block and is enforced as of ApricotPhase5. Prior to ApricotPhase5, a block included a single atomic transaction. As of ApricotPhase5, each block can include a set of atomic transactions where the cumulative atomic gas consumed is capped by the atomic gas limit, similar to the block gas limit.
This value must always remain <= MaxUint64.
var Bls12381MultiExpDiscountTable = [128]uint64{} /* 128 elements not displayed */
Gas discount table for BLS12-381 G1 and G2 multi exponentiation operations
var Version = func() string { return fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch) }()
Version holds the textual version string.
var VersionWithMeta = func() string { v := Version if VersionMeta != "" { v += "-" + VersionMeta } return v }()
VersionWithMeta holds the textual version string including the metadata.
Functions ¶
func IsForkTransition ¶ added in v0.13.8
IsForkTransition returns true if [fork] activates during the transition from [parent] to [current]. Taking [parent] as a pointer allows for us to pass nil when checking forks that activate during genesis. Note: this works for both block number and timestamp activated forks.
func VersionWithCommit ¶ added in v0.2.9
Types ¶
type AvalancheContext ¶ added in v0.11.1
AvalancheContext provides Avalanche specific context directly into the EVM.
type AvalancheRules ¶ added in v0.13.3
type ChainConfig ¶ added in v0.2.9
type ChainConfig struct { ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead) DAOForkBlock *big.Int `json:"daoForkBlock,omitempty"` // TheDAO hard-fork switch block (nil = no fork) DAOForkSupport bool `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150Block *big.Int `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork) EIP155Block *big.Int `json:"eip155Block,omitempty"` // EIP155 HF block EIP158Block *big.Int `json:"eip158Block,omitempty"` // EIP158 HF block ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty"` // Byzantium switch block (nil = no fork, 0 = already on byzantium) ConstantinopleBlock *big.Int `json:"constantinopleBlock,omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated) PetersburgBlock *big.Int `json:"petersburgBlock,omitempty"` // Petersburg switch block (nil = same as Constantinople) IstanbulBlock *big.Int `json:"istanbulBlock,omitempty"` // Istanbul switch block (nil = no fork, 0 = already on istanbul) MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated) BerlinBlock *big.Int `json:"berlinBlock,omitempty"` // Berlin switch block (nil = no fork, 0 = already on berlin) LondonBlock *big.Int `json:"londonBlock,omitempty"` // London switch block (nil = no fork, 0 = already on london) ShanghaiTime *uint64 `json:"shanghaiTime,omitempty"` // Shanghai switch time (nil = no fork, 0 = already on shanghai) CancunTime *uint64 `json:"cancunTime,omitempty"` // Cancun switch time (nil = no fork, 0 = already activated) VerkleTime *uint64 `json:"verkleTime,omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle) NetworkUpgrades // Config for timestamps that enable network upgrades. Skip encoding/decoding directly into ChainConfig. AvalancheContext `json:"-"` // Avalanche specific context set during VM initialization. Not serialized. UpgradeConfig `json:"-"` // Config specified in upgradeBytes (avalanche network upgrades or enable/disabling precompiles). Skip encoding/decoding directly into ChainConfig. }
ChainConfig is the core config which determines the blockchain settings.
ChainConfig is stored in the database on a per block basis. This means that any network, identified by its genesis block, can have its own set of configuration options.
func GetChainConfig ¶ added in v0.13.8
func GetChainConfig(agoUpgrade upgrade.Config, chainID *big.Int) *ChainConfig
func (*ChainConfig) CheckCompatible ¶ added in v0.2.9
func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError
CheckCompatible checks whether scheduled fork transitions have been imported with a mismatching chain configuration.
func (*ChainConfig) CheckConfigForkOrder ¶ added in v0.3.1
func (c *ChainConfig) CheckConfigForkOrder() error
CheckConfigForkOrder checks that we don't "skip" any forks, geth isn't pluggable enough to guarantee that forks can be implemented in a different order than on official networks
func (*ChainConfig) CheckPrecompilesCompatible ¶ added in v0.12.10
func (c *ChainConfig) CheckPrecompilesCompatible(precompileUpgrades []PrecompileUpgrade, time uint64) *ConfigCompatError
CheckPrecompilesCompatible checks if [precompileUpgrades] are compatible with [c] at [headTimestamp]. Returns a ConfigCompatError if upgrades already activated at [headTimestamp] are missing from [precompileUpgrades]. Upgrades not already activated may be modified or absent from [precompileUpgrades]. Returns nil if [precompileUpgrades] is compatible with [c]. Assumes given timestamp is the last accepted block timestamp. This ensures that as long as the node has not accepted a block with a different rule set it will allow a new upgrade to be applied as long as it activates after the last accepted block.
func (*ChainConfig) Description ¶ added in v0.12.3
func (c *ChainConfig) Description() string
Description returns a human-readable description of ChainConfig.
func (*ChainConfig) EnabledStatefulPrecompiles ¶ added in v0.12.10
func (c *ChainConfig) EnabledStatefulPrecompiles(blockTimestamp uint64) Precompiles
EnabledStatefulPrecompiles returns current stateful precompile configs that are enabled at [blockTimestamp].
func (*ChainConfig) GetActivatingPrecompileConfigs ¶ added in v0.12.10
func (c *ChainConfig) GetActivatingPrecompileConfigs(address common.Address, from *uint64, to uint64, upgrades []PrecompileUpgrade) []precompileconfig.Config
GetActivatingPrecompileConfigs returns all precompile upgrades configured to activate during the state transition from a block with timestamp [from] to a block with timestamp [to].
func (*ChainConfig) IsBerlin ¶ added in v0.14.0
func (c *ChainConfig) IsBerlin(num *big.Int) bool
IsBerlin returns whether num is either equal to the Berlin fork block or greater.
func (*ChainConfig) IsByzantium ¶ added in v0.2.9
func (c *ChainConfig) IsByzantium(num *big.Int) bool
IsByzantium returns whether num is either equal to the Byzantium fork block or greater.
func (*ChainConfig) IsCancun ¶ added in v0.12.5
func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool
IsCancun returns whether num is either equal to the Cancun fork time or greater.
func (*ChainConfig) IsConstantinople ¶ added in v0.2.9
func (c *ChainConfig) IsConstantinople(num *big.Int) bool
IsConstantinople returns whether num is either equal to the Constantinople fork block or greater.
func (*ChainConfig) IsDAOFork ¶ added in v0.2.9
func (c *ChainConfig) IsDAOFork(num *big.Int) bool
IsDAOFork returns whether num is either equal to the DAO fork block or greater.
func (*ChainConfig) IsEIP150 ¶ added in v0.2.9
func (c *ChainConfig) IsEIP150(num *big.Int) bool
IsEIP150 returns whether num is either equal to the EIP150 fork block or greater.
func (*ChainConfig) IsEIP155 ¶ added in v0.2.9
func (c *ChainConfig) IsEIP155(num *big.Int) bool
IsEIP155 returns whether num is either equal to the EIP155 fork block or greater.
func (*ChainConfig) IsEIP158 ¶ added in v0.2.9
func (c *ChainConfig) IsEIP158(num *big.Int) bool
IsEIP158 returns whether num is either equal to the EIP158 fork block or greater.
func (*ChainConfig) IsHomestead ¶ added in v0.2.9
func (c *ChainConfig) IsHomestead(num *big.Int) bool
IsHomestead returns whether num is either equal to the homestead block or greater.
func (*ChainConfig) IsIstanbul ¶ added in v0.2.9
func (c *ChainConfig) IsIstanbul(num *big.Int) bool
IsIstanbul returns whether num is either equal to the Istanbul fork block or greater.
func (*ChainConfig) IsLondon ¶ added in v0.14.0
func (c *ChainConfig) IsLondon(num *big.Int) bool
IsLondon returns whether num is either equal to the London fork block or greater.
func (*ChainConfig) IsMuirGlacier ¶ added in v0.3.1
func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool
IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater.
func (*ChainConfig) IsPetersburg ¶ added in v0.2.9
func (c *ChainConfig) IsPetersburg(num *big.Int) bool
IsPetersburg returns whether num is either - equal to or greater than the PetersburgBlock fork block, - OR is nil, and Constantinople is active
func (*ChainConfig) IsPrecompileEnabled ¶ added in v0.12.10
func (c *ChainConfig) IsPrecompileEnabled(address common.Address, timestamp uint64) bool
IsPrecompileEnabled returns whether precompile with [address] is enabled at [timestamp].
func (*ChainConfig) IsShanghai ¶ added in v0.14.0
func (c *ChainConfig) IsShanghai(num *big.Int, time uint64) bool
IsShanghai returns whether time is either equal to the Shanghai fork time or greater.
func (*ChainConfig) IsVerkle ¶ added in v0.13.4
func (c *ChainConfig) IsVerkle(num *big.Int, time uint64) bool
IsVerkle returns whether num is either equal to the Verkle fork time or greater.
func (ChainConfig) MarshalJSON ¶ added in v0.13.2
func (c ChainConfig) MarshalJSON() ([]byte, error)
MarshalJSON returns the JSON encoding of c. This is a custom marshaler to handle the Precompiles field.
func (*ChainConfig) Rules ¶ added in v0.2.9
func (c *ChainConfig) Rules(blockNum *big.Int, timestamp uint64) Rules
Rules returns the Avalanche modified rules to support Avalanche network upgrades
func (*ChainConfig) SetEthUpgrades ¶ added in v0.13.8
func (c *ChainConfig) SetEthUpgrades()
SetEthUpgrades enables Etheruem network upgrades using the same time as the Avalanche network upgrade that enables them.
TODO: Prior to Cancun, Avalanche upgrades are referenced inline in the code in place of their Ethereum counterparts. The original Ethereum names should be restored for maintainability.
func (*ChainConfig) ToWithUpgradesJSON ¶ added in v0.13.2
func (c *ChainConfig) ToWithUpgradesJSON() *ChainConfigWithUpgradesJSON
ToWithUpgradesJSON converts the ChainConfig to ChainConfigWithUpgradesJSON with upgrades explicitly displayed. ChainConfig does not include upgrades in its JSON output. This is a workaround for showing upgrades in the JSON output.
func (*ChainConfig) UnmarshalJSON ¶ added in v0.13.2
func (c *ChainConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON parses the JSON-encoded data and stores the result in the object pointed to by c. This is a custom unmarshaler to handle the Precompiles field. Precompiles was presented as an inline object in the JSON. This custom unmarshaler ensures backwards compatibility with the old format.
func (*ChainConfig) Verify ¶ added in v0.12.10
func (c *ChainConfig) Verify() error
Verify verifies chain config and returns error
type ChainConfigWithUpgradesJSON ¶ added in v0.13.2
type ChainConfigWithUpgradesJSON struct { ChainConfig UpgradeConfig UpgradeConfig `json:"upgrades,omitempty"` }
func (ChainConfigWithUpgradesJSON) MarshalJSON ¶ added in v0.13.2
func (cu ChainConfigWithUpgradesJSON) MarshalJSON() ([]byte, error)
MarshalJSON implements json.Marshaler. This is a workaround for the fact that the embedded ChainConfig struct has a MarshalJSON method, which prevents the default JSON marshalling from working for UpgradeConfig. TODO: consider removing this method by allowing external tag for the embedded ChainConfig struct.
func (*ChainConfigWithUpgradesJSON) UnmarshalJSON ¶ added in v0.13.2
func (cu *ChainConfigWithUpgradesJSON) UnmarshalJSON(input []byte) error
type ConfigCompatError ¶ added in v0.2.9
type ConfigCompatError struct { What string // block numbers of the stored and new configurations if block based forking StoredBlock, NewBlock *big.Int // timestamps of the stored and new configurations if time based forking StoredTime, NewTime *uint64 // the block number to which the local chain must be rewound to correct the error RewindToBlock uint64 // the timestamp to which the local chain must be rewound to correct the error RewindToTime uint64 }
ConfigCompatError is raised if the locally-stored blockchain is initialised with a ChainConfig that would alter the past.
func (*ConfigCompatError) Error ¶ added in v0.2.9
func (err *ConfigCompatError) Error() string
type NetworkUpgrades ¶ added in v0.13.8
type NetworkUpgrades struct { ApricotPhase1BlockTimestamp *uint64 `json:"apricotPhase1BlockTimestamp,omitempty"` // Apricot Phase 1 Block Timestamp (nil = no fork, 0 = already activated) // Apricot Phase 2 Block Timestamp (nil = no fork, 0 = already activated) // Apricot Phase 2 includes a modified version of the Berlin Hard Fork from Ethereum ApricotPhase2BlockTimestamp *uint64 `json:"apricotPhase2BlockTimestamp,omitempty"` // Apricot Phase 3 introduces dynamic fees and a modified version of the London Hard Fork from Ethereum (nil = no fork, 0 = already activated) ApricotPhase3BlockTimestamp *uint64 `json:"apricotPhase3BlockTimestamp,omitempty"` // Apricot Phase 4 introduces the notion of a block fee to the dynamic fee algorithm (nil = no fork, 0 = already activated) ApricotPhase4BlockTimestamp *uint64 `json:"apricotPhase4BlockTimestamp,omitempty"` // Apricot Phase 5 introduces a batch of atomic transactions with a maximum atomic gas limit per block. (nil = no fork, 0 = already activated) ApricotPhase5BlockTimestamp *uint64 `json:"apricotPhase5BlockTimestamp,omitempty"` // Apricot Phase Pre-6 deprecates the NativeAssetCall precompile (soft). (nil = no fork, 0 = already activated) ApricotPhasePre6BlockTimestamp *uint64 `json:"apricotPhasePre6BlockTimestamp,omitempty"` // Apricot Phase 6 deprecates the NativeAssetBalance and NativeAssetCall precompiles. (nil = no fork, 0 = already activated) ApricotPhase6BlockTimestamp *uint64 `json:"apricotPhase6BlockTimestamp,omitempty"` // Apricot Phase Post-6 deprecates the NativeAssetCall precompile (soft). (nil = no fork, 0 = already activated) ApricotPhasePost6BlockTimestamp *uint64 `json:"apricotPhasePost6BlockTimestamp,omitempty"` // Banff restricts import/export transactions to AVAX. (nil = no fork, 0 = already activated) BanffBlockTimestamp *uint64 `json:"banffBlockTimestamp,omitempty"` // Cortina increases the block gas limit to 15M. (nil = no fork, 0 = already activated) CortinaBlockTimestamp *uint64 `json:"cortinaBlockTimestamp,omitempty"` // Durango activates the Shanghai Execution Spec Upgrade from Ethereum (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md#included-eips) // and Avalanche Warp Messaging. (nil = no fork, 0 = already activated) // Note: EIP-4895 is excluded since withdrawals are not relevant to the Avalanche C-Chain or Subnets running the EVM. DurangoBlockTimestamp *uint64 `json:"durangoBlockTimestamp,omitempty"` // Etna activates Cancun from Ethereum (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md#included-eips) // and reduces the min base fee. (nil = no fork, 0 = already activated) // Note: EIP-4844 BlobTxs are not enabled in the mempool and blocks are not // allowed to contain them. For details see https://github.com/avalanche-foundation/ACPs/pull/131 EtnaTimestamp *uint64 `json:"etnaTimestamp,omitempty"` }
func (*NetworkUpgrades) CheckNetworkUpgradesCompatible ¶ added in v0.13.8
func (n *NetworkUpgrades) CheckNetworkUpgradesCompatible(newcfg *NetworkUpgrades, time uint64) *ConfigCompatError
func (*NetworkUpgrades) Description ¶ added in v0.13.8
func (n *NetworkUpgrades) Description() string
func (*NetworkUpgrades) Equal ¶ added in v0.13.8
func (n *NetworkUpgrades) Equal(other *NetworkUpgrades) bool
func (*NetworkUpgrades) GetAvalancheRules ¶ added in v0.13.8
func (n *NetworkUpgrades) GetAvalancheRules(timestamp uint64) AvalancheRules
func (*NetworkUpgrades) IsApricotPhase1 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhase1(time uint64) bool
IsApricotPhase1 returns whether time represents a block with a timestamp after the Apricot Phase 1 upgrade time.
func (*NetworkUpgrades) IsApricotPhase2 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhase2(time uint64) bool
IsApricotPhase2 returns whether time represents a block with a timestamp after the Apricot Phase 2 upgrade time.
func (*NetworkUpgrades) IsApricotPhase3 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhase3(time uint64) bool
IsApricotPhase3 returns whether time represents a block with a timestamp after the Apricot Phase 3 upgrade time.
func (*NetworkUpgrades) IsApricotPhase4 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhase4(time uint64) bool
IsApricotPhase4 returns whether time represents a block with a timestamp after the Apricot Phase 4 upgrade time.
func (*NetworkUpgrades) IsApricotPhase5 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhase5(time uint64) bool
IsApricotPhase5 returns whether time represents a block with a timestamp after the Apricot Phase 5 upgrade time.
func (*NetworkUpgrades) IsApricotPhase6 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhase6(time uint64) bool
IsApricotPhase6 returns whether time represents a block with a timestamp after the Apricot Phase 6 upgrade time.
func (*NetworkUpgrades) IsApricotPhasePost6 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhasePost6(time uint64) bool
IsApricotPhasePost6 returns whether time represents a block with a timestamp after the Apricot Phase 6 Post upgrade time.
func (*NetworkUpgrades) IsApricotPhasePre6 ¶ added in v0.13.8
func (n *NetworkUpgrades) IsApricotPhasePre6(time uint64) bool
IsApricotPhasePre6 returns whether time represents a block with a timestamp after the Apricot Phase Pre 6 upgrade time.
func (*NetworkUpgrades) IsBanff ¶ added in v0.13.8
func (n *NetworkUpgrades) IsBanff(time uint64) bool
IsBanff returns whether time represents a block with a timestamp after the Banff upgrade time.
func (*NetworkUpgrades) IsCortina ¶ added in v0.13.8
func (n *NetworkUpgrades) IsCortina(time uint64) bool
IsCortina returns whether time represents a block with a timestamp after the Cortina upgrade time.
type PrecompileUpgrade ¶ added in v0.12.10
type PrecompileUpgrade struct {
precompileconfig.Config
}
PrecompileUpgrade is a helper struct embedded in UpgradeConfig. It is used to unmarshal the json into the correct precompile config type based on the key. Keys are defined in each precompile module, and registered in precompile/registry/registry.go.
func (*PrecompileUpgrade) MarshalJSON ¶ added in v0.12.10
func (u *PrecompileUpgrade) MarshalJSON() ([]byte, error)
MarshalJSON marshal the precompile config into json based on the precompile key. Ex: {"feeManagerConfig": {...}} where "feeManagerConfig" is the key
func (*PrecompileUpgrade) UnmarshalJSON ¶ added in v0.12.10
func (u *PrecompileUpgrade) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals the json into the correct precompile config type based on the key. Keys are defined in each precompile module, and registered in precompile/registry/registry.go. Ex: {"feeManagerConfig": {...}} where "feeManagerConfig" is the key
type Precompiles ¶ added in v0.12.10
type Precompiles map[string]precompileconfig.Config
func (*Precompiles) UnmarshalJSON ¶ added in v0.12.10
func (ccp *Precompiles) UnmarshalJSON(data []byte) error
UnmarshalJSON parses the JSON-encoded data into the ChainConfigPrecompiles. ChainConfigPrecompiles is a map of precompile module keys to their configuration.
type Rules ¶ added in v0.2.9
type Rules struct { ChainID *big.Int // Rules for Ethereum releases EthRules // Rules for Avalanche releases AvalancheRules // ActivePrecompiles maps addresses to stateful precompiled contracts that are enabled // for this rule set. // Note: none of these addresses should conflict with the address space used by // any existing precompiles. ActivePrecompiles map[common.Address]precompileconfig.Config // Predicaters maps addresses to stateful precompile Predicaters // that are enabled for this rule set. Predicaters map[common.Address]precompileconfig.Predicater // AccepterPrecompiles map addresses to stateful precompile accepter functions // that are enabled for this rule set. AccepterPrecompiles map[common.Address]precompileconfig.Accepter }
Rules wraps ChainConfig and is merely syntactic sugar or can be used for functions that do not have or require information about the block.
Rules is a one time interface meaning that it shouldn't be used in between transition phases.
func (*Rules) IsPrecompileEnabled ¶ added in v0.12.10
IsPrecompileEnabled returns true if the precompile at [addr] is enabled for this rule set.
func (*Rules) PredicaterExists ¶ added in v0.12.10
func (*Rules) PredicatersExist ¶ added in v0.12.10
type UpgradeConfig ¶ added in v0.12.10
type UpgradeConfig struct { // Config for enabling and disabling precompiles as network upgrades. PrecompileUpgrades []PrecompileUpgrade `json:"precompileUpgrades,omitempty"` }
UpgradeConfig includes the following configs that may be specified in upgradeBytes: - Timestamps that enable avalanche network upgrades, - Enabling or disabling precompiles as network upgrades.