Documentation ¶
Index ¶
- Constants
- Variables
- func Bootnodes() []string
- func Candidates() []common.Address
- func ConvertNodeURL(nodeURLs []string) ([]string, error)
- func Deposit() *big.Int
- func GetDefaultValidators() []string
- func InitDefaultValidators(validators []string)
- func IsDev() bool
- func IsMainnet() bool
- func IsTestMainnet() bool
- func IsTestcase() bool
- func IsTestnet() bool
- func Proposers() []common.Address
- func ResolveUrl(url string) (string, error)
- func SetRunMode(runMode RunMode) error
- func Validators() []common.Address
- type ChainConfig
- type ConfigCompatError
- type DporConfig
- type GasTable
- type Rules
- type RunMode
Constants ¶
const ( ClientIdentifier = "cpchain" // Client identifier to advertise over the network DatabaseName = "chaindata" )
const ( Wei = 1 Ada = 1e3 Babbage = 1e6 Shannon = 1e9 Szabo = 1e12 Finney = 1e15 Cpc = 1e18 Einstein = 1e21 Douglas = 1e42 )
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))
const ( DevChainId = 41 MainnetChainId = 0x13370000 TestMainnetChainId = 42 TestnetChainId = 43 )
const ( MainnetNetworkId = 0x13370000 TestMainnetNetworkId = 0 DevNetworkId = 1 TestnetNetworkId = 2 )
const ( DefaultBlockPeriod = 1e4 // 10000 Millisecond, 10 Second TestnetBlockPeriod = 3e3 // 3000 Millisecond, 3 Second MainnetBlockPeriod = 1e4 // 10000 Millisecond, 10 Second TestMainnetBlockPeriod = 1e4 // 10000 Millisecond, 10 Second DefaultFaultyValidatorsNumber = 1 TestnetFaultyValidatorsNumber = 1 MainnetFaultyValidatorsNumber = 2 TestMainnetFaultyValidatorsNumber = 2 DefaultValidatorsNumber = DefaultFaultyValidatorsNumber*3 + 1 TestnetValidatorsNumber = TestnetFaultyValidatorsNumber*3 + 1 MainnetValidatorsNumber = MainnetFaultyValidatorsNumber*3 + 1 TestMainnetValidatorsNumber = TestMainnetFaultyValidatorsNumber*3 + 1 )
const ( DefaultDevMaxInitBlockNumber = 180 DefaultTestnetMaxInitBlockNumber = 240 DefaultMainnetMaxInitBlockNumber = 180 DefaultTestMainnetMaxInitBlockNumber = 180 )
const ( ContractCampaign = "campaign" // address of campaign contract,select rnode ContractRpt = "rpt" // address of rpt contract,Calculation the rpt of rnode ContractAdmission = "admission" // address of admission ContractRnode = "rnode" // address of rnode )
const ( RnodeVersion = 1 CampaignVersion = 1 )
some version numbers
const ( GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations. MinGasLimit uint64 = 3000000 // Minimum the gas limit may ever be. MaxGasLimit uint64 = 150000000 // Maximum gas limit of blocks. TargetGasLimit uint64 = 47000000 // The artificial target MaximumExtraDataSize uint64 = 32 // 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 // CPChain primitives CpuPowValidateGas uint64 = 200 // Gas needed for CpuPowValidate, involving hash MemPowValidateGas uint64 = 200 // Gas needed for MemPowValidate, involving hash )
const ( Cep1BlocksPerDay = 24 * 60 * 60 * 1000 / int64(MainnetBlockPeriod) Cep1BlocksY1 = 366 * Cep1BlocksPerDay // contain a leap day Cep1BlocksY2 = 365 * Cep1BlocksPerDay Cep1BlocksY3 = 365 * Cep1BlocksPerDay Cep1BlocksY4 = 365 * Cep1BlocksPerDay Cep1BlocksY5 = 366 * Cep1BlocksPerDay // contain a leap day )
const ( // BloomBitsBlocks is the number of blocks a single bloom bit section vector // contains. BloomBitsBlocks uint64 = 4096 )
const (
DefaultFailbackTimestampSampleSpace = 2 * time.Minute
)
const (
DefaultFullSyncPivot = 1024
)
DefaultFullSyncPivot is a number that full sync is triggered from it. (head - DefaultFullSyncPivot)
const (
DefaultGasLimitPerBlock = 100000000
)
const (
EnableProxyContract = false
)
EnableProxyContract is used for enable proxy contract in evm
const (
MaximumCandidateNumber = 100
)
MaximumCandidateNumber is the max number of candidates read from campaign contract
Variables ¶
var ( // cpchain Initial Gas Table GasTableCep1 = GasTable{ ExtcodeSize: 700, ExtcodeCopy: 700, Balance: 400, SLoad: 200, Calls: 700, Suicide: 5000, ExpByte: 50, CreateBySuicide: 25000, } // 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, } )
Variables containing gas prices for different ethereum phases.
var ( Cep1BlockRewardSupplyY1 = new(big.Int).Mul(big.NewInt(40002336), big.NewInt(1e+18)) Cep1BlockRewardSupplyY2 = new(big.Int).Mul(big.NewInt(29990736), big.NewInt(1e+18)) Cep1BlockRewardSupplyY3 = new(big.Int).Mul(big.NewInt(22485168), big.NewInt(1e+18)) Cep1BlockRewardSupplyY4 = new(big.Int).Mul(big.NewInt(16997904), big.NewInt(1e+18)) Cep1BlockRewardSupplyY5 = new(big.Int).Mul(big.NewInt(127438272), big.NewInt(1e+17)) // the calculation is based on 10 s a block is generated. Cep1BlockRewardY1 = new(big.Int).Div(Cep1BlockRewardSupplyY1, big.NewInt(Cep1BlocksY1)) // reward 12.65 cpc per block Cep1BlockRewardY2 = new(big.Int).Div(Cep1BlockRewardSupplyY2, big.NewInt(Cep1BlocksY2)) // reward 9.51 cpc per block Cep1BlockRewardY3 = new(big.Int).Div(Cep1BlockRewardSupplyY3, big.NewInt(Cep1BlocksY3)) // reward 7.13 cpc per block Cep1BlockRewardY4 = new(big.Int).Div(Cep1BlockRewardSupplyY4, big.NewInt(Cep1BlocksY4)) // reward 5.39 cpc per block Cep1BlockRewardY5 = new(big.Int).Div(Cep1BlockRewardSupplyY5, big.NewInt(Cep1BlocksY5)) // reward 4.03 cpc per block Cep1LastBlockY1 = big.NewInt(Cep1BlocksY1) Cep1LastBlockY2 = new(big.Int).Add(big.NewInt(Cep1BlocksY2), Cep1LastBlockY1) Cep1LastBlockY3 = new(big.Int).Add(big.NewInt(Cep1BlocksY3), Cep1LastBlockY2) Cep1LastBlockY4 = new(big.Int).Add(big.NewInt(Cep1BlocksY4), Cep1LastBlockY3) Cep1LastBlockY5 = new(big.Int).Add(big.NewInt(Cep1BlocksY5), Cep1LastBlockY4) )
var ( DevContractAddressMap = map[string]common.Address{ ContractRpt: common.HexToAddress("0x7e9925bea4af2ebea96dd8ba9894d4503e6c0278"), ContractRnode: common.HexToAddress("0xd4826927aa2dba7930117782ed183576ccebed93"), ContractAdmission: common.HexToAddress("0xa5e0ea2a14d91031986c2f25f6e724beeeb66781"), ContractCampaign: common.HexToAddress("0xf26b6864749cde85a29afea57ffeae115b24b505"), } )
dev configuration
var ( MainnetContractAddressMap = map[string]common.Address{ ContractRpt: common.HexToAddress("0x5ae4bddaf1d12baea98ebdf158c5ce3c53d21957"), ContractRnode: common.HexToAddress("0xab11ddf548e4ec7e1ed0a375a9eb34445cdee856"), ContractAdmission: common.HexToAddress("0xd8cf29d5d77ce4a7bbf99ca8c665e39760c9dbe3"), ContractCampaign: common.HexToAddress("0xb9a0ca9f8f1c55124157419c956d2ac6b6a94672"), } )
Mainnet configuration
var ( // just for test TestChainConfig = &ChainConfig{big.NewInt(DevChainId), &DporConfig{Period: 0, TermLen: 4}} )
var ( TestMainnetContractAddressMap = map[string]common.Address{ ContractRpt: common.HexToAddress("0x7e9925bea4af2ebea96dd8ba9894d4503e6c0278"), ContractRnode: common.HexToAddress("0xd4826927aa2dba7930117782ed183576ccebed93"), ContractAdmission: common.HexToAddress("0xa5e0ea2a14d91031986c2f25f6e724beeeb66781"), ContractCampaign: common.HexToAddress("0xf26b6864749cde85a29afea57ffeae115b24b505"), } )
testMainnet configuration
var ( TestnetContractAddressMap = map[string]common.Address{ ContractAdmission: common.HexToAddress("0x82102c2A09DEe47D1DDcf298AeF7877F99d787c4"), ContractCampaign: common.HexToAddress("0x2B11cA41A28571e22e242299dC308f08EDD7F011"), ContractRpt: common.HexToAddress("0x7a174062c5C8551649A86AE1b8a84282D901C2C3"), ContractRnode: common.HexToAddress("0xF0f87e064C76674fE7c4dDceE3603AFC67998658"), } )
Testnet configuration
var Version string
Functions ¶
func Candidates ¶
func ConvertNodeURL ¶ added in v0.3.1
func GetDefaultValidators ¶
func GetDefaultValidators() []string
func InitDefaultValidators ¶
func InitDefaultValidators(validators []string)
func IsTestMainnet ¶ added in v0.3.1
func IsTestMainnet() bool
func IsTestcase ¶ added in v0.3.1
func IsTestcase() bool
func ResolveUrl ¶ added in v0.3.1
func SetRunMode ¶
func Validators ¶
Types ¶
type ChainConfig ¶
type ChainConfig struct { ChainID *big.Int `json:"chainId" toml:"chainId"` // chainId identifies the current chain and is used for replay protection // Various consensus engines Dpor *DporConfig `json:"dpor,omitempty" toml:"dpor,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 ChainConfigInfo ¶
func ChainConfigInfo() *ChainConfig
this contains all the changes we have made to the cpchain protocol. serves as the *default* config.
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) IsCpchain ¶
func (c *ChainConfig) IsCpchain() bool
IsCpchain returns if it is CpchainDawn era.
func (*ChainConfig) Rules ¶
func (c *ChainConfig) Rules(num *big.Int) Rules
Rules ensures c's ChainID is not nil.
func (*ChainConfig) String ¶
func (c *ChainConfig) String() string
String implements the fmt.Stringer interface.
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 DporConfig ¶
type DporConfig struct { Period uint64 `json:"period" toml:"period"` // Number of seconds between blocks to enforce TermLen uint64 `json:"termLen" toml:"termLen"` // Term length to reset votes and checkpoint ViewLen uint64 `json:"viewLen" toml:"viewLen"` // View length of blocks one signer can seal in one committee FaultyNumber uint64 `json:"faultyNumber" toml:"faultyNumber"` // Number of faulty validators in validator committee MaxInitBlockNumber uint64 `json:"maxInitBlockNumber" toml:"maxInitBlockNumber"` // The maximum block number which uses default proposers Contracts map[string]common.Address `json:"contracts" toml:"contracts"` ProxyContractRegister common.Address `json:"proxyContractRegister" toml:"proxyContractRegister"` ImpeachTimeout time.Duration `json:"impeachTimeout" toml:"impeachTimeout"` }
DporConfig is the consensus engine configs for proof-of-authority based sealing.
func (*DporConfig) BlockDelay ¶ added in v0.3.1
func (c *DporConfig) BlockDelay() time.Duration
func (*DporConfig) Certificate ¶ added in v0.3.1
func (c *DporConfig) Certificate(n uint64) bool
func (*DporConfig) ImpeachCertificate ¶ added in v0.3.1
func (c *DporConfig) ImpeachCertificate(n uint64) bool
func (*DporConfig) PeriodDuration ¶ added in v0.3.1
func (c *DporConfig) PeriodDuration() time.Duration
func (*DporConfig) String ¶
func (c *DporConfig) String() string
String implements the stringer interface, returning the consensus engine details.
func (*DporConfig) ValidatorsLen ¶
func (c *DporConfig) ValidatorsLen() uint64
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 }
GasTable organizes gas prices for different ethereum phases.
type Rules ¶
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.