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 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 = 42 TestnetChainId = 43 )
const ( MainnetNetworkId = 0 DevNetworkId = 1 TestnetNetworkId = 2 )
const ( DefaultBlockPeriod = 1e4 // 10000 Millisecond, 10 Second TestnetBlockPeriod = 3e3 // 3000 Millisecond, 3 Second MainnetBlockPeriod = 1e4 // 10000 Millisecond, 10 Second DefaultFaultyValidatorsNumber = 1 TestnetFaultyValidatorsNumber = 1 MainnetFaultyValidatorsNumber = 2 DefaultValidatorsNumber = DefaultFaultyValidatorsNumber*3 + 1 TestnetValidatorsNumber = TestnetFaultyValidatorsNumber*3 + 1 MainnetValidatorsNumber = MainnetFaultyValidatorsNumber*3 + 1 )
const ( DefaultDevMaxInitBlockNumber = 216 DefaultTestnetMaxInitBlockNumber = 240 DefaultMainnetMaxInitBlockNumber = 216 )
const ( DefaultWaitTimeBeforeImpeachment = 2 * time.Minute // wait 120 seconds before first impeachment DefaultFailbackTimestampSampleSpace = 2 * time.Minute )
const ( ContractCampaign = "campaign" // address of campaign contract,select rnode ContractProposer = "proposer" // address of proposer_register contract, register proposer address in proposer_register contract ContractReward = "reward" // address of reward contract ContractRegister = "register" // address of register contract ContractRpt = "rpt" // address of rpt contract,Calculation the rpt of rnode ContractPdash = "pdash" // address of pdash ContractAdmission = "admission" // address of admission ContractPdashProxy = "pdashProxy" // address of PdashProxy ContractRnode = "rnode" // address of rnode ContractCampaign2 = "campaign2" // address of campaign2 ContractCampaign3 = "campaign3" // address of campaign3 )
TODO @hmw make the name more meaningful. add doc.
const ( RptCalcMethod2BlockNumber = 343000 RptCalcMethod3BlockNumber = 372400 RptCalcMethod4BlockNumber = 390500 RptCalcMethod5BlockNumber = 398000 Campaign2BlockNumber = 371900 Campaign3BlockNumber = 390500 )
pivot blocks 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 GetRankGas uint64 = 1600 // gas price for getting rank operation, need to call contract GetMaintenanceGas uint64 = 600 // gas price needed for GetMaintenanceGas IsProxyGas uint64 = 2000 // Gas needed for IsProxyGas, need to call contract twice GetTxVolumeGas uint64 = 1200 // Gas needed for GetTxVolumeGas, involving many cryptographic operations GetUploadRewardGas uint64 = 1600 // Gas needed for GetUploadRewardGas, need to call contract CpuPowValidateGas uint64 = 200 // Gas needed for CpuPowValidate, involving hash MemPowValidateGas uint64 = 200 // Gas needed for MemPowValidate, involving hash )
const ( Cep1BlocksPerDay = 24 * 60 * 60 / 10 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 (
DefaultFullSyncPivot = 1024
)
DefaultFullSyncPivot is a number that full sync is triggered from it. (head - DefaultFullSyncPivot)
const (
DefaultGasLimitPerBlock = 100000000
)
const (
MaximumCandidateNumber = 100
)
MaximumCandidateNumber is the max number of candidates read from campaign contract
const (
RNodeMinFundReq = 200000 // 200000 CPC for becoming a RNode
)
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 (
DurationLimit = big.NewInt(13) // The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.
)
var ( MainnetContractAddressMap = map[string]common.Address{ ContractProposer: common.HexToAddress("0xf26B6864749cdE85a29afEa57FfeaE115B24b505"), ContractReward: common.HexToAddress("0x94576e35a55D6BbF9bB45120bC835a668557eF42"), ContractAdmission: common.HexToAddress("0x8f01875F462CBBc956CB9C0392dE6053A31C9C99"), ContractCampaign: common.HexToAddress("0x1404Bf355428523F8e51E68Df00A0521e413F98E"), ContractRpt: common.HexToAddress("0x878a9A4155E8D60fbe07074a9061a0Dcc031c212"), ContractRegister: common.HexToAddress("0xA14842fBFfFe76d34e6D45ba5701ec9971bFd596"), ContractPdash: common.HexToAddress("0x3863551C32F18c7454482E718828A1ede00034d6"), ContractPdashProxy: common.HexToAddress("0xEfc4282385932d3119FbEcF9d56f4aEed87B3805"), ContractRnode: common.HexToAddress("0x7B4769C7d332105F8Ace1506c322597AEd7DeF59"), ContractCampaign2: common.HexToAddress("0x4D0FDbc8D38775014AbC38a3d134b9b97B6D047B"), ContractCampaign3: common.HexToAddress("0xb8A07aE42E2902C41336A301C22b6e849eDd4F8B"), } )
Mainnet configuration
var ( // just for test TestChainConfig = &ChainConfig{big.NewInt(DevChainId), &DporConfig{Period: 0, TermLen: 4}} )
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 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.