Documentation ¶
Index ¶
- Constants
- Variables
- type ChainConfig
- func (c *ChainConfig) GasTable(num *big.Int) GasTable
- 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) Rules(num *big.Int) Rules
- func (c *ChainConfig) String() string
- type GasTable
- type Rules
Constants ¶
const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 5 // Minor version component of the current release VersionPatch = 5 // Patch version component of the current release VersionMeta = "unstable" // Version metadata to append to the version string )
Variables ¶
var ( TestChainConfig = &ChainConfig{big.NewInt(1), new(big.Int), new(big.Int), true, new(big.Int), common.Hash{}, new(big.Int), new(big.Int)} TestRules = TestChainConfig.Rules(new(big.Int)) )
var ( // GasTableHomestead contain the gas prices for // the homestead phase. GasTableHomestead = GasTable{ ExtcodeSize: big.NewInt(20), ExtcodeCopy: big.NewInt(20), Balance: big.NewInt(20), SLoad: big.NewInt(50), Calls: big.NewInt(40), Suicide: big.NewInt(0), ExpByte: big.NewInt(10), CreateBySuicide: nil, } // GasTableHomestead contain the gas re-prices for // the homestead phase. // // TODO rename to GasTableEIP150 GasTableHomesteadGasRepriceFork = GasTable{ ExtcodeSize: big.NewInt(700), ExtcodeCopy: big.NewInt(700), Balance: big.NewInt(400), SLoad: big.NewInt(200), Calls: big.NewInt(700), Suicide: big.NewInt(5000), ExpByte: big.NewInt(10), CreateBySuicide: big.NewInt(25000), } GasTableEIP158 = GasTable{ ExtcodeSize: big.NewInt(700), ExtcodeCopy: big.NewInt(700), Balance: big.NewInt(400), SLoad: big.NewInt(200), Calls: big.NewInt(700), Suicide: big.NewInt(5000), ExpByte: big.NewInt(50), CreateBySuicide: big.NewInt(25000), } )
var ( MaximumExtraDataSize = big.NewInt(32) // Maximum size extra data may be after Genesis. ExpByteGas = big.NewInt(10) // Times ceil(log256(exponent)) for the EXP instruction. SloadGas = big.NewInt(50) // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. CallValueTransferGas = big.NewInt(9000) // Paid for CALL when the value transfer is non-zero. CallNewAccountGas = big.NewInt(25000) // Paid for CALL when the destination address didn't exist prior. TxGas = big.NewInt(21000) // Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions. TxGasContractCreation = big.NewInt(53000) // Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions. TxDataZeroGas = big.NewInt(4) // Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions. DifficultyBoundDivisor = big.NewInt(2048) // The bound divisor of the difficulty, used in the update calculations. QuadCoeffDiv = big.NewInt(512) // Divisor for the quadratic particle of the memory cost equation. GenesisDifficulty = big.NewInt(131072) // Difficulty of the Genesis block. DurationLimit = big.NewInt(13) // The decision boundary on the blocktime duration used to determine whether difficulty should go up or not. SstoreSetGas = big.NewInt(20000) // Once per SLOAD operation. LogDataGas = big.NewInt(8) // Per byte in a LOG* operation's data. CallStipend = big.NewInt(2300) // Free gas given at beginning of call. EcrecoverGas = big.NewInt(3000) // Sha256WordGas = big.NewInt(12) // MinGasLimit = big.NewInt(5000) // Minimum the gas limit may ever be. GenesisGasLimit = big.NewInt(4712388) // Gas limit of the Genesis block. TargetGasLimit = new(big.Int).Set(GenesisGasLimit) // The artificial target Sha3Gas = big.NewInt(30) // Once per SHA3 operation. Sha256Gas = big.NewInt(60) // IdentityWordGas = big.NewInt(3) // Sha3WordGas = big.NewInt(6) // Once per word of the SHA3 operation's data. SstoreResetGas = big.NewInt(5000) // Once per SSTORE operation if the zeroness changes from zero. SstoreClearGas = big.NewInt(5000) // Once per SSTORE operation if the zeroness doesn't change. SstoreRefundGas = big.NewInt(15000) // Once per SSTORE operation if the zeroness changes to zero. JumpdestGas = big.NewInt(1) // Refunded gas, once per SSTORE operation if the zeroness changes to zero. IdentityGas = big.NewInt(15) // GasLimitBoundDivisor = big.NewInt(1024) // The bound divisor of the gas limit, used in update calculations. EpochDuration = big.NewInt(30000) // Duration between proof-of-work epochs. CallGas = big.NewInt(40) // Once per CALL operation & message call transaction. CreateDataGas = big.NewInt(200) // Ripemd160Gas = big.NewInt(600) // Ripemd160WordGas = big.NewInt(120) // MinimumDifficulty = big.NewInt(131072) // The minimum that the difficulty may ever be. CallCreateDepth = big.NewInt(1024) // Maximum depth of call/create stack. ExpGas = big.NewInt(10) // Once per EXP instuction. LogGas = big.NewInt(375) // Per LOG* operation. CopyGas = big.NewInt(3) // StackLimit = big.NewInt(1024) // Maximum size of VM stack allowed. TierStepGas = big.NewInt(0) // Once per operation, for a selection of them. LogTopicGas = big.NewInt(375) // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas. CreateGas = big.NewInt(32000) // Once per CREATE operation & contract-creation transaction. SuicideRefundGas = big.NewInt(24000) // Refunded following a suicide operation. MemoryGas = big.NewInt(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. TxDataNonZeroGas = big.NewInt(68) // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions. MaxCodeSize = 24576 )
var ( TestNetGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") // Testnet genesis hash to enforce below configs on MainNetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") // Mainnet genesis hash to enforce below configs on TestNetHomesteadBlock = big.NewInt(0) // Testnet homestead block MainNetHomesteadBlock = big.NewInt(1150000) // Mainnet homestead block TestNetHomesteadGasRepriceBlock = big.NewInt(0) // Testnet gas reprice block MainNetHomesteadGasRepriceBlock = big.NewInt(2463000) // Mainnet gas reprice block TestNetHomesteadGasRepriceHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") // Testnet gas reprice block hash (used by fast sync) MainNetHomesteadGasRepriceHash = common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0") // Mainnet gas reprice block hash (used by fast sync) TestNetSpuriousDragon = big.NewInt(10) MainNetSpuriousDragon = big.NewInt(2675000) TestNetChainID = big.NewInt(3) // Test net default chain ID MainNetChainID = big.NewInt(1) // main net default chain ID )
var DAODrainList []common.Address
DAODrainList is the list of accounts whose full balances will be moved into a refund contract at the beginning of the dao-fork block.
var DAOForkBlockExtra = common.FromHex("0x64616f2d686172642d666f726b")
DAOForkBlockExtra is the block header extra-data field to set for the DAO fork point and a number of consecutive blocks to allow fast/light syncers to correctly pick the side they want ("dao-hard-fork").
var DAOForkExtraRange = big.NewInt(10)
DAOForkExtraRange is the number of consecutive blocks from the DAO fork point to override the extra-data in to prevent no-fork attacks.
var DAORefundContract = common.HexToAddress("0xbf4ed7b27f1d666546e30d74d50d173d20bca754")
DAORefundContract is the address of the refund contract to send DAO balances to.
var DiscoveryV5Bootnodes = []*discv5.Node{ discv5.MustParseNode("enode://0cc5f5ffb5d9098c8b8c62325f3797f56509bff942704687b6530992ac706e2cb946b90a34f1f19548cd3c7baccbcaea354531e5983c7d1bc0dee16ce4b6440b@40.118.3.223:30305"), discv5.MustParseNode("enode://1c7a64d76c0334b0418c004af2f67c50e36a3be60b5e4790bdac0439d21603469a85fad36f2473c9a80eb043ae60936df905fa28f1ff614c3e5dc34f15dcd2dc@40.118.3.223:30308"), discv5.MustParseNode("enode://85c85d7143ae8bb96924f2b54f1b3e70d8c4d367af305325d30a61385a432f247d2c75c45c6b4a60335060d072d7f5b35dd1d4c45f76941f62a4f83b6e75daaf@40.118.3.223:30309"), }
DiscoveryV5Bootnodes are the enode URLs of the P2P bootstrap nodes for the experimental RLPx v5 topic-discovery network.
var MainNetDAOForkBlock = big.NewInt(1920000)
MainNetDAOForkBlock is the block number where the DAO hard-fork commences on the Ethereum main network.
var MainnetBootnodes = []*discover.Node{ discover.MustParseNode("enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303"), discover.MustParseNode("enode://de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786@54.94.239.50:30303"), discover.MustParseNode("enode://1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082@52.74.57.123:30303"), discover.MustParseNode("enode://979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9@5.1.83.226:30303"), }
MainnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the main Ethereum network.
var MainnetChainConfig = &ChainConfig{ ChainId: MainNetChainID, HomesteadBlock: MainNetHomesteadBlock, DAOForkBlock: MainNetDAOForkBlock, DAOForkSupport: true, EIP150Block: MainNetHomesteadGasRepriceBlock, EIP150Hash: MainNetHomesteadGasRepriceHash, EIP155Block: MainNetSpuriousDragon, EIP158Block: MainNetSpuriousDragon, }
MainnetChainConfig is the chain parameters to run a node on the main network.
var TestNetDAOForkBlock *big.Int
TestNetDAOForkBlock is the block number where the DAO hard-fork commences on the Ethereum test network. It's enforced nil since it was decided not to do a testnet transition.
var TestnetBootnodes = []*discover.Node{ discover.MustParseNode("enode://e4533109cc9bd7604e4ff6c095f7a1d807e15b38e9bfeb05d3b7c423ba86af0a9e89abbf40bd9dde4250fef114cd09270fa4e224cbeef8b7bf05a51e8260d6b8@94.242.229.4:40404"), discover.MustParseNode("enode://8c336ee6f03e99613ad21274f269479bf4413fb294d697ef15ab897598afb931f56beb8e97af530aee20ce2bcba5776f4a312bc168545de4d43736992c814592@94.242.229.203:30303"), }
TestnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the Morden test network.
var TestnetChainConfig = &ChainConfig{ ChainId: big.NewInt(3), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: true, EIP150Block: big.NewInt(0), EIP150Hash: common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"), EIP155Block: big.NewInt(10), EIP158Block: big.NewInt(10), }
TestnetChainConfig is the chain parameters to run a node on the test network.
var Version = func() string { v := fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch) if VersionMeta != "" { v += "-" + VersionMeta } return v }()
Version holds the textual version string.
Functions ¶
This section is empty.
Types ¶
type ChainConfig ¶
type ChainConfig struct { ChainId *big.Int `json:"chainId"` // Chain id identifies the current chain and is used for replay protection HomesteadBlock *big.Int `json:"homesteadBlock"` // Homestead switch block (nil = no fork, 0 = already homestead) DAOForkBlock *big.Int `json:"daoForkBlock"` // TheDAO hard-fork switch block (nil = no fork) DAOForkSupport bool `json:"daoForkSupport"` // 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"` // EIP150 HF block (nil = no fork) EIP150Hash common.Hash `json:"eip150Hash"` // EIP150 HF hash (fast sync aid) EIP155Block *big.Int `json:"eip155Block"` // EIP155 HF block EIP158Block *big.Int `json:"eip158Block"` // EIP158 HF block }
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) GasTable ¶
func (c *ChainConfig) GasTable(num *big.Int) GasTable
GasTable returns the gas table corresponding to the current phase (homestead or homestead reprice).
The returned GasTable's fields shouldn't, under any circumstances, be changed.
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) String ¶
func (c *ChainConfig) String() string
String implements the Stringer interface.
type GasTable ¶
type GasTable struct { ExtcodeSize *big.Int ExtcodeCopy *big.Int Balance *big.Int SLoad *big.Int Calls *big.Int Suicide *big.Int ExpByte *big.Int // CreateBySuicide occurs when the // refunded account is one that does // not exist. This logic is similar // to call. May be left nil. Nil means // not charged. CreateBySuicide *big.Int }