Documentation ¶
Overview ¶
Copyright 2018 The cpchain authors
Index ¶
- Constants
- Variables
- func Candidates() []common.Address
- func GetDefaultValidators() []string
- func GetRunMode() string
- func InitDefaultValidators(validators []string)
- func IsDev() bool
- func IsMainnet() bool
- func IsTestnet() bool
- func Proposers() []common.Address
- func SetRunMode(runMode string) error
- func Validators() []common.Address
- type ChainConfig
- type ConfigCompatError
- type DporConfig
- type GasTable
- type Rules
Constants ¶
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 ( // DefaultBlockPeriod = 2e8 // 2 * 10 ^ 8 Nanosecond, 200 Millisecond, 0.2 Second DefaultBlockPeriod = 1e9 // 1 * 10 ^ 9 Nanosecond, 1000 Millisecond, 1 Second DefaultValidatorsLen = 4 DefaultMaxInitBlockNumber = 240 )
const ( ContractCampaign = "campaign" // address of campaign contract,select rnode ContractProposer = "proposer" // address of proposer_register contract, register proposer address in proposer_register contract ContractRegister = "register" // address of register contract ContractRpt = "rpt" // address of rpt contract,Calculation the rpt of rnode ContractPdash = "pdash" // address of pdash )
TODO @hmw make the name more meaningful. add doc.
const ( GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations. MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be. GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block. 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 // TODO @chengx make the name more concrete GetRankGas uint64 = 600 // Gas needed for GetRank GetMaintenanceGas uint64 = 600 // Gas needed for GetMaintenanceGas IsProxyGas uint64 = 600 // Gas needed for IsProxyGas GetTxVolumeGas uint64 = 600 // Gas needed for GetTxVolumeGas GetUploadRewardGas uint64 = 600 // Gas needed for GetUploadRewardGas CpuPowValidateGas uint64 = 20000 // Gas needed for CpuPowValidate MemPowValidateGas uint64 = 20000 // Gas needed for MemPowValidate )
const ( Dev = "dev" Testnet = "testnet" Mainnet = "mainnet" )
const ( // BloomBitsBlocks is the number of blocks a single bloom bit section vector // contains. BloomBitsBlocks uint64 = 4096 )
const (
ClientIdentifier = "cpchain" // Client identifier to advertise over the network
)
const (
DatabaseName = "chaindata"
)
Variables ¶
var ( 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. )
var (
Cep1BlockReward = new(big.Int).Mul(big.NewInt(500), big.NewInt(1e+18)) // 500e+18 Block reward 500 cpc for successfully mining a block
)
var CpchainBootnodes = []string{
"enode://5293dc8aaa5c2fcc7905c21391ce38f4f877722ff1918f4fa86379347ad8a244c2995631f89866693d05bf5c94493c247f02716f19a90689fa406189b03a5243@127.0.0.1:30310",
}
CpchainBootnodes are the enode URLs of the P2P bootstrap nodes running on the main cpchain network.
var CpchainValidators = []string{
"enode://9826a2f72c63eaca9b7f57b169473686f5a133dc24ffac858b4e5185a5eb60b144a414c35359585d9ea9d67f6fcca29578f9e002c89e94cc4bcc46a2b336c166@127.0.0.1:30317",
"enode://7ce9c4fee12b12affbbe769a0faaa6e256bbae3374717fb94e1fb4be308fae3795c3abae023a587d8e14b35d278bd3d10916117bb8b3f5cfa4c951c5d56eeed7@127.0.0.1:30318",
"enode://1db32421dc881357c282091960fdbd13f3635f8e3f87a953b6d9c429e53469727018bd0bb02da48acc4f1b4bec946b8f158705262b37163b4ab321a1c932d8f9@127.0.0.1:30319",
"enode://fd0f365cec4e052040151f2a4a9ba23e8592acd3cacfdc4af2e8b6dbc6fb6b25ca088151889b19729d02c48e390de9682b316db2351636fdd1ee5ea1cd32bf46@127.0.0.1:30320",
}
var DefaultRunMode = Dev
var ( // cpchain Initial Gas Table GasTableCep0 = GasTable{ ExtcodeSize: 700, ExtcodeCopy: 700, Balance: 400, SLoad: 200, Calls: 700, Suicide: 5000, ExpByte: 50, CreateBySuicide: 25000, } )
Variables containing gas prices for different ethereum phases.
var (
TargetGasLimit = GenesisGasLimit // The artificial target
)
var ( // just for test TestChainConfig = &ChainConfig{big.NewInt(DevChainId), &DporConfig{Period: 0, TermLen: 4}} )
var Version string
Functions ¶
func Candidates ¶
func GetDefaultValidators ¶
func GetDefaultValidators() []string
func GetRunMode ¶
func GetRunMode() string
func InitDefaultValidators ¶
func InitDefaultValidators(validators []string)
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 ValidatorsLen uint64 `json:"validatorsLen" toml:"validatorsLen"` // Number of validators 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) String ¶
func (c *DporConfig) 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 }
GasTable organizes gas prices for different ethereum phases.