Documentation ¶
Index ¶
- Constants
- Variables
- func VersionWithCommit(gitCommit, gitDate string) string
- type ChainConfig
- func (c *ChainConfig) AllocationDenominator(time uint64) *big.Int
- func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError
- func (c *ChainConfig) CheckConfigForkOrder() error
- func (c *ChainConfig) CheckConfigurePrecompiles(parentTimestamp *uint64, blockContext precompile.BlockContext, ...)
- func (c *ChainConfig) Description() string
- func (c *ChainConfig) GovernanceAddress(time uint64) common.Address
- func (c *ChainConfig) GovernanceAllocation(time uint64) *big.Int
- func (c *ChainConfig) IsApricotPhase1(time uint64) bool
- func (c *ChainConfig) IsApricotPhase2(time uint64) bool
- func (c *ChainConfig) IsApricotPhase3(time uint64) bool
- func (c *ChainConfig) IsApricotPhase4(time uint64) bool
- func (c *ChainConfig) IsApricotPhase5(time uint64) bool
- func (c *ChainConfig) IsApricotPhase6(time uint64) bool
- func (c *ChainConfig) IsApricotPhasePost6(time uint64) bool
- func (c *ChainConfig) IsApricotPhasePre6(time uint64) bool
- func (c *ChainConfig) IsBanff(time uint64) bool
- func (c *ChainConfig) IsByzantium(num *big.Int) bool
- func (c *ChainConfig) IsCancun(time uint64) bool
- func (c *ChainConfig) IsConstantinople(num *big.Int) bool
- func (c *ChainConfig) IsCortina(time uint64) bool
- func (c *ChainConfig) IsDAOFork(num *big.Int) bool
- func (c *ChainConfig) IsDUpgrade(time uint64) 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) IsMuirGlacier(num *big.Int) bool
- func (c *ChainConfig) IsPetersburg(num *big.Int) bool
- func (c *ChainConfig) LpAddress(time uint64) common.Address
- func (c *ChainConfig) LpAllocation(time uint64) *big.Int
- func (c *ChainConfig) MaxOrionAllocation(time uint64) *big.Int
- func (c *ChainConfig) OdysseyRules(blockNum *big.Int, timestamp uint64) Rules
- func (c *ChainConfig) OrionAllocation(time uint64) *big.Int
- func (c *ChainConfig) OrionNodesGetter(time uint64) OrionNodesGetter
- func (c *ChainConfig) PriorityFeeOrionAllocation(time uint64) *big.Int
- type ConfigCompatError
- type OdysseyContext
- type OrionNodesGetter
- type Rules
Constants ¶
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 ( // MinGasPrice is the number of nDIONE required per gas unit for a // transaction to be valid, measured in wei LaunchMinGasPrice int64 = 2_380_952_380_952_38 ApricotPhase1MinGasPrice int64 = 2_380_952_380_952_38 OdysseyAtomicTxFee = 5 * units.Dione ApricotPhase1GasLimit uint64 = 8_000_000 CortinaGasLimit uint64 = 15_000_000 ApricotPhase3ExtraDataSize uint64 = 80 ApricotPhase3MinBaseFee int64 = 2_380_952_380_952_38 ApricotPhase3MaxBaseFee int64 = 7_142_857_142_857_14 ApricotPhase3InitialBaseFee int64 = 2_380_952_380_952_38 ApricotPhase3TargetGas uint64 = 10_000_000 ApricotPhase4MinBaseFee int64 = 2_380_952_380_952_38 ApricotPhase4MaxBaseFee int64 = 7_142_857_142_857_14 ApricotPhase4BaseFeeChangeDenominator uint64 = 12 ApricotPhase5TargetGas uint64 = 15_000_000 ApricotPhase5BaseFeeChangeDenominator uint64 = 36 LpAddressDefault string = "0x0000000000000000000000000000000000000001" GovernanceAddressDefault string = "0x0000000000000000000000000000000000000002" LpAddressMainnet string = "0xD72C3d7957950197EcAa68d41E2E6803b61874E3" GovernanceAddressMannet string = "0xD21A82BB789dCa05271711902F9E7FDDE158Bfd7" // The base cost to charge per atomic transaction. Added in Apricot Phase 5. AtomicTxBaseCost uint64 = 21_000 )
Minimum Gas Price
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 BlobTxDataGasPerBlob = 1 << 17 // Gas consumption of a single data blob (== blob byte size) BlobTxMinDataGasprice = 1 // Minimum gas price for data blobs BlobTxDataGaspriceUpdateFraction = 2225652 // Controls the maximum rate of change for data gas price // Odyssey 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 = 12 // Minor version component of the current release VersionPatch = 0 // Patch version component of the current release VersionMeta = "stable" // Version metadata to append to the version string )
const (
MaxCodeHashesPerRequest = 5
)
Constants for message sizes
Variables ¶
var ( // OdysseyMainnetChainID ... OdysseyMainnetChainID = big.NewInt(153153) // OdysseyTestnetChainID ... OdysseyTestnetChainID = big.NewInt(131313) // OdysseyLocalChainID ... OdysseyLocalChainID = big.NewInt(131312) )
Odyssey ChainIDs
var ( // OdysseyMainnetChainConfig is the configuration for Odyssey Main Network OdysseyMainnetChainConfig = &ChainConfig{ ChainID: OdysseyMainnetChainID, HomesteadBlock: big.NewInt(0), DAOForkBlock: big.NewInt(0), DAOForkSupport: true, 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), 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), DUpgradeBlockTimestamp: utils.NewUint64(0), } // OdysseyTestnetChainConfig is the configuration for the Testnet Test Network OdysseyTestnetChainConfig = &ChainConfig{ ChainID: OdysseyTestnetChainID, HomesteadBlock: big.NewInt(0), DAOForkBlock: big.NewInt(0), DAOForkSupport: true, 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), 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), DUpgradeBlockTimestamp: utils.NewUint64(0), } // OdysseyLocalChainConfig is the configuration for the Odyssey Local Network OdysseyLocalChainConfig = &ChainConfig{ ChainID: OdysseyLocalChainID, HomesteadBlock: big.NewInt(0), DAOForkBlock: big.NewInt(0), DAOForkSupport: true, 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), 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), DUpgradeBlockTimestamp: utils.NewUint64(0), } TestChainConfig = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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), DUpgradeBlockTimestamp: utils.NewUint64(0), } TestLaunchConfig = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), ApricotPhase1BlockTimestamp: nil, ApricotPhase2BlockTimestamp: nil, ApricotPhase3BlockTimestamp: nil, ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DUpgradeBlockTimestamp: nil, } TestApricotPhase1Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: nil, ApricotPhase3BlockTimestamp: nil, ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DUpgradeBlockTimestamp: nil, } TestApricotPhase2Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), ApricotPhase1BlockTimestamp: utils.NewUint64(0), ApricotPhase2BlockTimestamp: utils.NewUint64(0), ApricotPhase3BlockTimestamp: nil, ApricotPhase4BlockTimestamp: nil, ApricotPhase5BlockTimestamp: nil, ApricotPhasePre6BlockTimestamp: nil, ApricotPhase6BlockTimestamp: nil, ApricotPhasePost6BlockTimestamp: nil, BanffBlockTimestamp: nil, CortinaBlockTimestamp: nil, DUpgradeBlockTimestamp: nil, } TestApricotPhase3Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestApricotPhase4Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestApricotPhase5Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestApricotPhasePre6Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestApricotPhase6Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestApricotPhasePost6Config = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestBanffChainConfig = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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, DUpgradeBlockTimestamp: nil, } TestCortinaChainConfig = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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), DUpgradeBlockTimestamp: nil, } TestDUpgradeChainConfig = &ChainConfig{ OdysseyContext: OdysseyContext{common.Hash{1}}, 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), 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), } TestRules = TestChainConfig.OdysseyRules(new(big.Int), 0) )
var ( // 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. AtomicGasLimit *big.Int = big.NewInt(100_000) LpAllocation *big.Int = big.NewInt(25_000) // 25% GovernanceAllocation *big.Int = big.NewInt(50_000) // 50% OrionAllocation *big.Int = big.NewInt(5_000) // 5% MaxOrionAllocation *big.Int = big.NewInt(25_000) // 25% PriorityFeeOrionAllocation *big.Int = big.NewInt(5_000) // 5% AllocationDenominator *big.Int = big.NewInt(100_000) // 100% OrionGetter = NewOrionGetter(orionContractAddress, orionLastUpdateTimestampSlot, orionNodesSlot) )
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. )
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 VersionWithCommit ¶
Types ¶
type ChainConfig ¶
type ChainConfig struct { OdysseyContext `json:"-"` // Odyssey specific context set during VM initialization. Not serialized. 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) // Odyssey Network Upgrades 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 DIONE. (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"` // DUpgrade activates the Shanghai upgrade from Ethereum. (nil = no fork, 0 = already activated) DUpgradeBlockTimestamp *uint64 `json:"dUpgradeBlockTimestamp,omitempty"` // Cancun activates the Cancun upgrade from Ethereum. (nil = no fork, 0 = already activated) CancunTime *uint64 `json:"cancunTime,omitempty"` }
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 (*ChainConfig) AllocationDenominator ¶
func (c *ChainConfig) AllocationDenominator(time uint64) *big.Int
func (*ChainConfig) CheckCompatible ¶
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 ¶
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) CheckConfigurePrecompiles ¶
func (c *ChainConfig) CheckConfigurePrecompiles(parentTimestamp *uint64, blockContext precompile.BlockContext, statedb precompile.StateDB)
CheckConfigurePrecompiles checks if any of the precompiles specified in the chain config are enabled by the block transition from [parentTimestamp] to the timestamp set in [blockContext]. If this is the case, it calls [Configure] to apply the necessary state transitions for the upgrade. This function is called: - within genesis setup to configure the starting state for precompiles enabled at genesis, - during block processing to update the state before processing the given block.
func (*ChainConfig) Description ¶
func (c *ChainConfig) Description() string
Description returns a human-readable description of ChainConfig.
func (*ChainConfig) GovernanceAddress ¶
func (c *ChainConfig) GovernanceAddress(time uint64) common.Address
func (*ChainConfig) GovernanceAllocation ¶
func (c *ChainConfig) GovernanceAllocation(time uint64) *big.Int
func (*ChainConfig) IsApricotPhase1 ¶
func (c *ChainConfig) IsApricotPhase1(time uint64) bool
IsApricotPhase1 returns whether time represents a block with a timestamp after the Apricot Phase 1 upgrade time.
func (*ChainConfig) IsApricotPhase2 ¶
func (c *ChainConfig) IsApricotPhase2(time uint64) bool
IsApricotPhase2 returns whether time represents a block with a timestamp after the Apricot Phase 2 upgrade time.
func (*ChainConfig) IsApricotPhase3 ¶
func (c *ChainConfig) IsApricotPhase3(time uint64) bool
IsApricotPhase3 returns whether time represents a block with a timestamp after the Apricot Phase 3 upgrade time.
func (*ChainConfig) IsApricotPhase4 ¶
func (c *ChainConfig) IsApricotPhase4(time uint64) bool
IsApricotPhase4 returns whether time represents a block with a timestamp after the Apricot Phase 4 upgrade time.
func (*ChainConfig) IsApricotPhase5 ¶
func (c *ChainConfig) IsApricotPhase5(time uint64) bool
IsApricotPhase5 returns whether time represents a block with a timestamp after the Apricot Phase 5 upgrade time.
func (*ChainConfig) IsApricotPhase6 ¶
func (c *ChainConfig) IsApricotPhase6(time uint64) bool
IsApricotPhase6 returns whether time represents a block with a timestamp after the Apricot Phase 6 upgrade time.
func (*ChainConfig) IsApricotPhasePost6 ¶
func (c *ChainConfig) IsApricotPhasePost6(time uint64) bool
IsApricotPhasePost6 returns whether time represents a block with a timestamp after the Apricot Phase 6 Post upgrade time.
func (*ChainConfig) IsApricotPhasePre6 ¶
func (c *ChainConfig) IsApricotPhasePre6(time uint64) bool
IsApricotPhasePre6 returns whether time represents a block with a timestamp after the Apricot Phase Pre 6 upgrade time.
func (*ChainConfig) IsBanff ¶
func (c *ChainConfig) IsBanff(time uint64) bool
IsBanff returns whether time represents a block with a timestamp after the Banff upgrade time.
func (*ChainConfig) IsByzantium ¶
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 ¶
func (c *ChainConfig) IsCancun(time uint64) bool
IsCancun returns whether time represents a block with a timestamp after the Cancun upgrade time.
func (*ChainConfig) IsConstantinople ¶
func (c *ChainConfig) IsConstantinople(num *big.Int) bool
IsConstantinople returns whether num is either equal to the Constantinople fork block or greater.
func (*ChainConfig) IsCortina ¶
func (c *ChainConfig) IsCortina(time uint64) bool
IsCortina returns whether time represents a block with a timestamp after the Cortina upgrade time.
func (*ChainConfig) IsDAOFork ¶
func (c *ChainConfig) IsDAOFork(num *big.Int) bool
IsDAOFork returns whether num is either equal to the DAO fork block or greater.
func (*ChainConfig) IsDUpgrade ¶
func (c *ChainConfig) IsDUpgrade(time uint64) bool
IsDUpgrade returns whether time represents a block with a timestamp after the DUpgrade upgrade time.
func (*ChainConfig) IsEIP150 ¶
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 ¶
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 ¶
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 ¶
func (c *ChainConfig) IsHomestead(num *big.Int) bool
IsHomestead returns whether num is either equal to the homestead block or greater.
func (*ChainConfig) IsIstanbul ¶
func (c *ChainConfig) IsIstanbul(num *big.Int) bool
IsIstanbul returns whether num is either equal to the Istanbul fork block or greater.
func (*ChainConfig) IsMuirGlacier ¶
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 ¶
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) LpAllocation ¶
func (c *ChainConfig) LpAllocation(time uint64) *big.Int
func (*ChainConfig) MaxOrionAllocation ¶
func (c *ChainConfig) MaxOrionAllocation(time uint64) *big.Int
func (*ChainConfig) OdysseyRules ¶
func (c *ChainConfig) OdysseyRules(blockNum *big.Int, timestamp uint64) Rules
OdysseyRules returns the Odyssey modified rules to support Odyssey network upgrades
func (*ChainConfig) OrionAllocation ¶
func (c *ChainConfig) OrionAllocation(time uint64) *big.Int
func (*ChainConfig) OrionNodesGetter ¶
func (c *ChainConfig) OrionNodesGetter(time uint64) OrionNodesGetter
func (*ChainConfig) PriorityFeeOrionAllocation ¶
func (c *ChainConfig) PriorityFeeOrionAllocation(time uint64) *big.Int
type ConfigCompatError ¶
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 ¶
func (err *ConfigCompatError) Error() string
type OdysseyContext ¶
OdysseyContext provides Odyssey specific context directly into the DELTA.
type OrionNodesGetter ¶
type OrionNodesGetter interface { GetLastUpdateTimestamp(stateGetter) uint64 GetNodesList(stateGetter) []ids.NodeID }
func NewOrionGetter ¶
func NewOrionGetter(contract common.Address, lastUpdateSlot, orionsListSlot common.Hash) OrionNodesGetter
type Rules ¶
type Rules struct { ChainID *big.Int IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool IsCancun bool // Rules for Odyssey releases IsApricotPhase1, IsApricotPhase2, IsApricotPhase3, IsApricotPhase4, IsApricotPhase5 bool IsApricotPhasePre6, IsApricotPhase6, IsApricotPhasePost6 bool IsBanff bool IsCortina bool IsDUpgrade bool LpAllocation, GovernanceAllocation, AllocationDenominator *big.Int OrionAllocation, MaxOrionAllocation *big.Int PriorityFeeOrionAllocation *big.Int LpAddress, GovernanceAddress common.Address OrionNodes OrionNodesGetter // Precompiles 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. Precompiles map[common.Address]precompile.StatefulPrecompiledContract }
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.