params

package
v2.1.8+incompatible Latest Latest
Warning

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

Go to latest
Published: Nov 7, 2020 License: GPL-3.0 Imports: 3 Imported by: 68

Documentation

Index

Constants

View Source
const (
	// These are the multipliers for ether denominations.
	// Example: To get the wei value of an amount in 'douglas', use
	//
	//    new(big.Int).Mul(value, big.NewInt(params.Douglas))
	//
	Win      = 1
	Ada      = 1e3
	Babbage  = 1e6
	Shannon  = 1e9
	Szabo    = 1e12
	Finney   = 1e15
	Wan      = 1e18
	Einstein = 1e21
	Douglas  = 1e42
)
View Source
const (
	// BloomBitsBlocks is the number of blocks a single bloom bit section vector
	// contains.
	BloomBitsBlocks uint64 = 4096

	WanTcpPort = 17717
	WanUdpPort = 17717
)
View Source
const (
	MaximumExtraDataSize  uint64 = 97    // 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.
	SstoreSetGas          uint64 = 20000 // Once per SLOAD operation.
	LogDataGas            uint64 = 8     // Per byte in a LOG* operation's data.
	CallStipend           uint64 = 2300  // Free gas given at beginning of call.

	Sha3Gas          uint64 = 30    // Once per SHA3 operation.
	Sha3WordGas      uint64 = 6     // Once per word of the SHA3 operation's data.
	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.
	JumpdestGas      uint64 = 1     // Refunded gas, once per SSTORE operation if the zeroness changes to zero.
	EpochDuration    uint64 = 30000 // Duration between proof-of-work epochs.
	CallGas          uint64 = 40    // Once per CALL operation & message call transaction.
	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.
	SuicideRefundGas uint64 = 24000 // Refunded following a suicide 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.
	TxDataNonZeroGas 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.

	MaxCodeSize = 24576 // Maximum bytecode to permit for a contract

	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
	ModExpQuadCoeffDiv      uint64 = 20     // Divisor for the quadratic particle of the big int modular exponentiation
	Bn256AddGas             uint64 = 500    // Gas needed for an elliptic curve addition
	Bn256ScalarMulGas       uint64 = 40000  // Gas needed for an elliptic curve scalar multiplication
	Bn256PairingBaseGas     uint64 = 100000 // Base price for an elliptic curve pairing check
	Bn256PairingPerPointGas uint64 = 80000  // Per-point price for an elliptic curve pairing check
	Bn256AddGasV2           uint64 = 50     // Gas needed for an elliptic curve addition
	Bn256ScalarMulGasV2     uint64 = 100
	RequiredGasPerMixPub    uint64 = 4000 // ring signature mix difficulty gas
	GetOTAMixSetMaxSize     uint64 = 20   // Max number of mix ota set size from once getting
	GasForSolEnhance        uint64 = 100
	S256AddGas              uint64 = 50 // Gas needed for an elliptic curve addition
	S256ScalarMulGas        uint64 = 100
	//SlsStgOnePerByteGas		uint64 = 20      // per byte gas for SlsStgOnePerByteGas
	SlsStgTwoPerByteGas uint64 = 20 // per byte gas for SlsStgOnePerByteGas

)
View Source
const (
	VersionMajor = 2  // Major version component of the current release
	VersionMinor = 1  // Minor version component of the current release
	VersionPatch = 8  // Patch version component of the current release
	VersionMeta  = "" // Version metadata to append to the version string
)
View Source
const InternalPow2PosUpgradeBlockNumber = 200
View Source
const MainnetPow2PosUpgradeBlockNumber = 4046000
View Source
const TestnetPow2PosUpgradeBlockNumber = 3560000

Variables

View Source
var (
	MainnetGenesisHash = common.HexToHash("0x0376899c001618fc7d5ab4f31cfd7f57ca3a896ccc1581a57d8f129ecf40b840") // Mainnet genesis hash to enforce below configs on
	TestnetGenesisHash = common.HexToHash("0xa37b811609a9d1e898fb49b3901728023e5e72e18e58643d9a7a82db483bfeb0") // Testnet genesis hash to enforce below configs on
	PlutoGenesisHash   = common.HexToHash("0x4ff7e18e5842c540f49d827e67894c39783ef1e0494ea52f569db0bcf63786e6") // Pluto genesis hash to enforce below configs on

	InternalGenesisHash = common.HexToHash("0xb1dc31a86510003c23b9ddee0e194775807262529b8dafa6dc23d9315364d2b3")
)
View Source
var (
	// MainnetChainConfig is the chain parameters to run a node on the main network.
	MainnetChainConfig = &ChainConfig{
		ChainId: big.NewInt(1),

		ByzantiumBlock: big.NewInt(0),
		Ethash:         new(EthashConfig),
		PosFirstBlock:  big.NewInt(MainnetPow2PosUpgradeBlockNumber),
		IsPosActive:    false,
		Pluto: &PlutoConfig{
			Period: 10,
			Epoch:  100,
		},
	}

	WanchainChainConfig = &ChainConfig{
		ChainId: big.NewInt(1),

		ByzantiumBlock: big.NewInt(0),
		Ethash:         new(EthashConfig),
		PosFirstBlock:  big.NewInt(MainnetPow2PosUpgradeBlockNumber),
		IsPosActive:    false,
		Pluto: &PlutoConfig{
			Period: 10,
			Epoch:  100,
		},
	}

	// TestnetChainConfig contains the chain parameters to run a node on the Ropsten test network.
	TestnetChainConfig = &ChainConfig{
		ChainId: big.NewInt(3),

		ByzantiumBlock: big.NewInt(0),

		Ethash:        new(EthashConfig),
		PosFirstBlock: big.NewInt(TestnetPow2PosUpgradeBlockNumber),
		IsPosActive:   false,
		Pluto: &PlutoConfig{
			Period: 10,
			Epoch:  100,
		},
	}

	// RinkebyChainConfig contains the chain parameters to run a node on the Rinkeby test network.
	InternalChainConfig = &ChainConfig{
		ChainId: big.NewInt(4),

		ByzantiumBlock: big.NewInt(0),

		Ethash:        new(EthashConfig),
		PosFirstBlock: big.NewInt(InternalPow2PosUpgradeBlockNumber),
		IsPosActive:   false,
		Pluto: &PlutoConfig{
			Period: 10,
			Epoch:  100,
		},
	}
	// PlutoChainConfig contains the chain parameters to run a node on the Pluto test network.
	PlutoChainConfig = &ChainConfig{
		ChainId: big.NewInt(6),

		ByzantiumBlock: big.NewInt(0),
		PosFirstBlock:  big.NewInt(1),
		IsPosActive:    true,

		Pluto: &PlutoConfig{
			Period: 10,
			Epoch:  100,
		},
	}

	// AllProtocolChanges contains every protocol change (EIPs)
	// introduced and accepted by the Ethereum core developers.
	//
	// This configuration is intentionally not using keyed fields.
	// This configuration must *always* have all forks enabled, which
	// means that all fields must be set at all times. This forces
	// anyone adding flags to the config to also have to set these
	// fields.
	AllProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), big.NewInt(100), false, new(EthashConfig), nil, nil}

	TestChainConfig = &ChainConfig{
		ChainId:        big.NewInt(1),
		ByzantiumBlock: big.NewInt(0),
		Ethash:         new(EthashConfig),
		PosFirstBlock:  big.NewInt(TestnetPow2PosUpgradeBlockNumber),
		IsPosActive:    false,
	}

	TestRules = TestChainConfig.Rules(new(big.Int))
)
View Source
var (
	TestnetChainId = TestnetChainConfig.ChainId.Int64()
	MainnetChainId = WanchainChainConfig.ChainId.Int64()
)
View Source
var (
	// GasTableHomestead contain the gas prices for
	// the homestead phase.
	GasTableHomestead = GasTable{
		ExtcodeSize: 20,
		ExtcodeCopy: 20,
		Balance:     20,
		SLoad:       50,
		Calls:       40,
		Suicide:     0,
		ExpByte:     10,
	}

	// GasTableHomestead contain the gas re-prices for
	// the homestead phase.
	GasTableEIP150 = GasTable{
		ExtcodeSize: 700,
		ExtcodeCopy: 700,
		Balance:     400,
		SLoad:       200,
		Calls:       700,
		Suicide:     5000,
		ExpByte:     10,

		CreateBySuicide: 25000,
	}

	GasTableEIP158 = GasTable{
		ExtcodeSize: 700,
		ExtcodeCopy: 700,
		Balance:     400,
		SLoad:       200,
		Calls:       700,
		Suicide:     5000,
		ExpByte:     50,

		CreateBySuicide: 25000,
	}
)
View Source
var (
	GasLimitBoundDivisor    = big.NewInt(1024) // The bound divisor of the gas limit, used in update calculations.
	GasLimitBoundDivisorNew = big.NewInt(300)  // The bound divisor of the gas limit, used in update calculations.
	MinGasLimit             = big.NewInt(5000) // Minimum the gas limit may ever be.
	MaxGasLimit             = big.NewInt(105000000)
	GenesisGasLimit         = big.NewInt(4712388)                // Gas limit of the Genesis block.
	NewTargeGasLimit        = big.NewInt(10000000)               // Gas limit raise to 1000w
	TargetGasLimit          = new(big.Int).Set(NewTargeGasLimit) // The artificial target
	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.
	WanGasTimesFactor       = big.NewInt(10)
)
View Source
var DiscoveryV5Bootnodes = []string{
	"enode://dfa95c2be31b3541895df452678355ef4b38988863959fe56d1a217cd9fdeee27024cb13688cab56373ac597968aa2faf0da8cd87f4238366ddb41f03fc78884@118.190.33.68:17717",
	"enode://9e41c167954d33f5f5b7740a0f6a03b90ddab423cfd4e1fc6c844feff32e3a5d82e76c20d1823915676b58505efb6d33ea1fa6f7e6e22812b1d7ae7a90874881@118.190.33.102:17717",
}

DiscoveryV5Bootnodes are the enode URLs of the P2P bootstrap nodes for the experimental RLPx v5 topic-discovery network.

View Source
var InternalBootnodes = []string{

	"enode://7bf5d346d0806827fa94fd7fe09af915c0f9cbb92c73e154c8d9b2318a6af6d7d379b72b3242beb8f409f64777ba7c7a236cb14d41b6846bd2888e6c8f1e8189@192.168.1.2:9000",
}
View Source
var InternalV5Bootnodes = []string{
	"enode://81ffab14284d29f9a87737780717719666af814d78057ec4b6799b9d275c41e8041887c733a95fba13ae9fba4fb3026d5f53993143b83ab6648cae3b1e5e9c35@18.236.236.189:17717",
}
View Source
var MainnetBootnodes = []string{

	"enode://9a0539d2777c33532b3450b88343266637daa93776126b580bfdabc2d7a566a553be68079e14a37d3803e5bdb65055c3ac9342b03f1939c4fb2e413ecbc102b1@52.24.132.78:17717",
	"enode://11c018f57c1c4dbb89f57832936dacf5f7ad677b33b86fbb9fe268d3c97126a625661e06e894896613edf5167e9e77867f9c0be8620e150ac6f2b92e5c0efc3d@52.41.157.63:17717",
	"enode://8980a56b1c1580080d2c1e96c9bbb2a9a50528cf18cbff82cc73bee1c8f3821fc65b098ac910a1a567153fd4cb7478b727f6ab0dd726afdbeec1f6b94cac4cd7@54.245.68.228:17717",
	"enode://0b324af8b1489202f09a48f582df6c42319041f1367d8d8d4363caa105b040b8ba73561e41691e40bfcd41e849b89b077beb38dfa188517e4e67b33dd115e4a4@35.162.114.208:17717",
	"enode://fc182f486efadf112cbb4a3e552e1f3f25811fa863352ee6b9ae3f1d9855b4018af47d55ea747d808a12159e9bbd7e7c74726cd8bc3dfe2dbb2b0a1d07a31578@54.148.77.52:17717",
	"enode://fdbdf600ed6eb35d177d0f971360ead71f21d20b31c8924d8d61fabf07fb720b60bb3d5ced5d85a30fce8815479c520a9cc9dcbf5416fff366ba24c37cb1b980@34.218.127.55:17717",
}

MainnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the main Ethereum network.

View Source
var PlutoBootnodes = []string{
	"enode://81ffab14284d29f9a87737780717719666af814d78057ec4b6799b9d275c41e8041887c733a95fba13ae9fba4fb3026d5f53993143b83ab6648cae3b1e5e9c35@18.236.236.189:17717",
	"enode://ca5496aa6eda6403f4ac41e7841d1ae6d963a321afcb8c59c0f2935f837bd2300ff258ab94bf4db375257f29898e5d0ea5903c28a0e9a41a4aba4e100b4b2ed0@34.212.171.224:17717",
	"enode://86989aacffbc22640dee74864ac0f17fb4987ab0b6792a6fd14801557e7f7ff6447d77945d64463d5e6e0bed5ac257c842d9631abe8e68110e1aa9233ad4e3a1@54.184.26.209:27717",
}

PlutoBootnodes are the enode URLs of the P2P bootstrap nodes running on the Pluto test network.

View Source
var PlutoV5ootnodes = []string{
	"enode://81ffab14284d29f9a87737780717719666af814d78057ec4b6799b9d275c41e8041887c733a95fba13ae9fba4fb3026d5f53993143b83ab6648cae3b1e5e9c35@18.236.236.189:17717?discport=17718",
}
View Source
var TestnetBootnodes = []string{

	"enode://e5fcbadaaa482b50c5538b8ffb6527522c98c11635bfd5d780f9a36dd96e79c08c83620e74b2b6335f9dd5a2e08b2d5d82874415925a1858e0e3fdfcebccdae1@54.203.165.174:17717",
}

TestnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the

View Source
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

func IsNoStaking

func IsNoStaking() bool

func IsPosActive

func IsPosActive() bool

func SetNoStaking

func SetNoStaking()

func SetPosActive

func SetPosActive(active bool)

func VersionWithCommit

func VersionWithCommit(gitCommit string) string

Types

type ChainConfig

type ChainConfig struct {
	ChainId *big.Int `json:"chainId"` // Chain id identifies the current chain and is used for replay protection

	ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty"` // Byzantium switch block (nil = no fork, 0 = already on byzantium)
	PosFirstBlock  *big.Int `json:"posFirstBlock,omitempty"`
	IsPosActive    bool     `json:"isPosActive,omitempty"`

	// Various consensus engines
	Ethash *EthashConfig `json:"ethash,omitempty"`
	Clique *CliqueConfig `json:"clique,omitempty"`
	Pluto  *PlutoConfig  `json:"pluto,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) CheckCompatible

func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64) *ConfigCompatError

CheckCompatible checks whether scheduled fork transitions have been imported with a mismatching chain configuration.

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) IsPosBlockNumber

func (c *ChainConfig) IsPosBlockNumber(n *big.Int) bool

func (*ChainConfig) Rules

func (c *ChainConfig) Rules(num *big.Int) Rules

func (*ChainConfig) SetPosActive

func (c *ChainConfig) SetPosActive()

func (*ChainConfig) String

func (c *ChainConfig) String() string

String implements the fmt.Stringer interface.

type CliqueConfig

type CliqueConfig struct {
	Period uint64 `json:"period"` // Number of seconds between blocks to enforce
	Epoch  uint64 `json:"epoch"`  // Epoch length to reset votes and checkpoint
}

CliqueConfig is the consensus engine configs for proof-of-authority based sealing.

func (*CliqueConfig) String

func (c *CliqueConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type ConfigCompatError

type ConfigCompatError struct {
	What string
	// block numbers of the stored and new configurations
	StoredConfig, NewConfig *big.Int
	// the block number to which the local chain must be rewound to correct the error
	RewindTo 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 EthashConfig

type EthashConfig struct{}

EthashConfig is the consensus engine configs for proof-of-work based sealing.

func (*EthashConfig) String

func (c *EthashConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type GasTable

type GasTable struct {
	ExtcodeSize uint64
	ExtcodeCopy uint64
	Balance     uint64
	SLoad       uint64
	Calls       uint64
	Suicide     uint64

	ExpByte uint64

	// 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 uint64
}

type PlutoConfig

type PlutoConfig struct {
	Period uint64 `json:"period"` // Number of seconds between blocks to enforce
	Epoch  uint64 `json:"epoch"`  // Epoch length to reset votes and checkpoint
}

PlutoConfig is the consensus engine configs for proof-of-authority based sealing.

func (*PlutoConfig) String

func (c *PlutoConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type Rules

type Rules struct {
	ChainId *big.Int
}

Rules wraps ChainConfig and is merely syntatic 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.

Jump to

Keyboard shortcuts

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