Documentation ¶
Index ¶
- Constants
- Variables
- func Bootnodes() []string
- func Candidates() []common.Address
- func Cep1BlockRewardSupplyY1() *big.Int
- func Cep1BlockRewardSupplyY2() *big.Int
- func Cep1BlockRewardSupplyY3() *big.Int
- func Cep1BlockRewardSupplyY4() *big.Int
- func Cep1BlockRewardSupplyY5() *big.Int
- func Cep1BlockRewardY1() *big.Int
- func Cep1BlockRewardY2() *big.Int
- func Cep1BlockRewardY3() *big.Int
- func Cep1BlockRewardY4() *big.Int
- func Cep1BlockRewardY5() *big.Int
- func Cep1LastBlockY1() *big.Int
- func Cep1LastBlockY2() *big.Int
- func Cep1LastBlockY3() *big.Int
- func Cep1LastBlockY4() *big.Int
- func Cep1LastBlockY5() *big.Int
- func ConvertNodeURL(nodeURLs []string) ([]string, error)
- 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 TestOnly_SetCep1LastBlockY1(blockNum *big.Int)
- func TestOnly_SetCep1LastBlockY2(blockNum *big.Int)
- func TestOnly_SetCep1LastBlockY3(blockNum *big.Int)
- func TestOnly_SetCep1LastBlockY4(blockNum *big.Int)
- func TestOnly_SetCep1LastBlockY5(blockNum *big.Int)
- 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 = 337 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 ContractNetwork = "network" // address of network )
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 ( // 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 (
IgnoreNetworkStatusCheck = false
)
IgnoreNetworkStatusCheck is used for ignore network status check before campaign this is not a hard restriction, set to true to ignore the check
const (
MaximumCandidateNumber = 100
)
MaximumCandidateNumber is the max number of candidates read from campaign contract
const (
NewRptWithImpeachPunishmentPivotBlockNumber = 1244472
)
NewRptWithImpeachPunishmentPivotBlockNumber is a block number used to denote the start point from which the new rpt method is used to do elections. The new rpt calc method considers to punish those impeached reputation nodes.
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 ( DevContractAddressMap = map[string]common.Address{ ContractRpt: common.HexToAddress("0x7e9925bea4af2ebea96dd8ba9894d4503e6c0278"), ContractRnode: common.HexToAddress("0xd4826927aa2dba7930117782ed183576ccebed93"), ContractAdmission: common.HexToAddress("0xa5e0ea2a14d91031986c2f25f6e724beeeb66781"), ContractCampaign: common.HexToAddress("0xf26b6864749cde85a29afea57ffeae115b24b505"), ContractNetwork: common.HexToAddress("0xe30363ffce7f560cb69b7d9254daeb35de8c0f84"), } )
dev configuration
var ( MainnetContractAddressMap = map[string]common.Address{ ContractRpt: common.HexToAddress("0x16cb35DD47421895215b01a41a8e424E6eb39235"), ContractRnode: common.HexToAddress("0x76130DA5aA1851313a7555D3735BED76029560DA"), ContractAdmission: common.HexToAddress("0xB3178aa5f6B5ABDc534e5bDEEc70B7e36BBDa4e2"), ContractCampaign: common.HexToAddress("0x2A186bE66Dd20c1699Add34A49A3019a93a7Fcd0"), ContractNetwork: common.HexToAddress("0xFE4e9816C4B05D0be4fe1fb951FfAB44e3309418"), } )
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"), ContractNetwork: common.HexToAddress("0xe30363ffce7f560cb69b7d9254daeb35de8c0f84"), } )
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 Cep1BlockRewardSupplyY1 ¶ added in v0.3.1
Those are total block rewards for every year
func Cep1BlockRewardSupplyY2 ¶ added in v0.3.1
func Cep1BlockRewardSupplyY3 ¶ added in v0.3.1
func Cep1BlockRewardSupplyY4 ¶ added in v0.3.1
func Cep1BlockRewardSupplyY5 ¶ added in v0.3.1
func Cep1BlockRewardY1 ¶ added in v0.3.1
Those are rewards per block for every year
func Cep1BlockRewardY2 ¶ added in v0.3.1
func Cep1BlockRewardY3 ¶ added in v0.3.1
func Cep1BlockRewardY4 ¶ added in v0.3.1
func Cep1BlockRewardY5 ¶ added in v0.3.1
func Cep1LastBlockY1 ¶ added in v0.3.1
Those are the last block numbers for every year
func Cep1LastBlockY2 ¶ added in v0.3.1
func Cep1LastBlockY3 ¶ added in v0.3.1
func Cep1LastBlockY4 ¶ added in v0.3.1
func Cep1LastBlockY5 ¶ added in v0.3.1
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 TestOnly_SetCep1LastBlockY1 ¶ added in v0.3.1
Those are only for test
func TestOnly_SetCep1LastBlockY2 ¶ added in v0.3.1
func TestOnly_SetCep1LastBlockY3 ¶ added in v0.3.1
func TestOnly_SetCep1LastBlockY4 ¶ added in v0.3.1
func TestOnly_SetCep1LastBlockY5 ¶ added in v0.3.1
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.