configs

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Nov 18, 2019 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ClientIdentifier = "cpchain" // Client identifier to advertise over the network
	DatabaseName     = "chaindata"
)
View Source
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))
View Source
const (
	DevChainId         = 41
	MainnetChainId     = 337
	TestMainnetChainId = 42
	TestnetChainId     = 43
)
View Source
const (
	MainnetNetworkId     = 0x13370000
	TestMainnetNetworkId = 0
	DevNetworkId         = 1
	TestnetNetworkId     = 2
)
View Source
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
)
View Source
const (
	DefaultDevMaxInitBlockNumber         = 180
	DefaultTestnetMaxInitBlockNumber     = 240
	DefaultMainnetMaxInitBlockNumber     = 180
	DefaultTestMainnetMaxInitBlockNumber = 180
)
View Source
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
)
View Source
const (
	RnodeVersion    = 1
	CampaignVersion = 1
)

some version numbers

View Source
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
)
View Source
const (
	// BloomBitsBlocks is the number of blocks a single bloom bit section vector
	// contains.
	BloomBitsBlocks uint64 = 4096
)
View Source
const (
	DefaultFailbackTimestampSampleSpace = 2 * time.Minute
)
View Source
const (
	DefaultFullSyncPivot = 1024
)

DefaultFullSyncPivot is a number that full sync is triggered from it. (head - DefaultFullSyncPivot)

View Source
const (
	DefaultGasLimitPerBlock = 100000000
)
View Source
const (
	EnableProxyContract = false
)

EnableProxyContract is used for enable proxy contract in evm

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

View Source
const (
	MaximumCandidateNumber = 100
)

MaximumCandidateNumber is the max number of candidates read from campaign contract

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

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

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

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

View Source
var (
	// just for test
	TestChainConfig = &ChainConfig{big.NewInt(DevChainId), &DporConfig{Period: 0, TermLen: 4}}
)
View Source
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

View Source
var (
	TestnetContractAddressMap = map[string]common.Address{
		ContractAdmission: common.HexToAddress("0x82102c2A09DEe47D1DDcf298AeF7877F99d787c4"),
		ContractCampaign:  common.HexToAddress("0x2B11cA41A28571e22e242299dC308f08EDD7F011"),
		ContractRpt:       common.HexToAddress("0x7a174062c5C8551649A86AE1b8a84282D901C2C3"),
		ContractRnode:     common.HexToAddress("0xF0f87e064C76674fE7c4dDceE3603AFC67998658"),
	}
)

Testnet configuration

View Source
var Version string

Functions

func Bootnodes added in v0.1.1

func Bootnodes() []string

func Candidates

func Candidates() []common.Address

func Cep1BlockRewardSupplyY1 added in v0.3.1

func Cep1BlockRewardSupplyY1() *big.Int

Those are total block rewards for every year

func Cep1BlockRewardSupplyY2 added in v0.3.1

func Cep1BlockRewardSupplyY2() *big.Int

func Cep1BlockRewardSupplyY3 added in v0.3.1

func Cep1BlockRewardSupplyY3() *big.Int

func Cep1BlockRewardSupplyY4 added in v0.3.1

func Cep1BlockRewardSupplyY4() *big.Int

func Cep1BlockRewardSupplyY5 added in v0.3.1

func Cep1BlockRewardSupplyY5() *big.Int

func Cep1BlockRewardY1 added in v0.3.1

func Cep1BlockRewardY1() *big.Int

Those are rewards per block for every year

func Cep1BlockRewardY2 added in v0.3.1

func Cep1BlockRewardY2() *big.Int

func Cep1BlockRewardY3 added in v0.3.1

func Cep1BlockRewardY3() *big.Int

func Cep1BlockRewardY4 added in v0.3.1

func Cep1BlockRewardY4() *big.Int

func Cep1BlockRewardY5 added in v0.3.1

func Cep1BlockRewardY5() *big.Int

func Cep1LastBlockY1 added in v0.3.1

func Cep1LastBlockY1() *big.Int

Those are the last block numbers for every year

func Cep1LastBlockY2 added in v0.3.1

func Cep1LastBlockY2() *big.Int

func Cep1LastBlockY3 added in v0.3.1

func Cep1LastBlockY3() *big.Int

func Cep1LastBlockY4 added in v0.3.1

func Cep1LastBlockY4() *big.Int

func Cep1LastBlockY5 added in v0.3.1

func Cep1LastBlockY5() *big.Int

func ConvertNodeURL added in v0.3.1

func ConvertNodeURL(nodeURLs []string) ([]string, error)

func GetDefaultValidators

func GetDefaultValidators() []string

func InitDefaultValidators

func InitDefaultValidators(validators []string)

func IsDev

func IsDev() bool

func IsMainnet

func IsMainnet() bool

func IsTestMainnet added in v0.3.1

func IsTestMainnet() bool

func IsTestcase added in v0.3.1

func IsTestcase() bool

func IsTestnet

func IsTestnet() bool

func Proposers

func Proposers() []common.Address

func ResolveUrl added in v0.3.1

func ResolveUrl(url string) (string, error)

func SetRunMode

func SetRunMode(runMode RunMode) error

func TestOnly_SetCep1LastBlockY1 added in v0.3.1

func TestOnly_SetCep1LastBlockY1(blockNum *big.Int)

Those are only for test

func TestOnly_SetCep1LastBlockY2 added in v0.3.1

func TestOnly_SetCep1LastBlockY2(blockNum *big.Int)

func TestOnly_SetCep1LastBlockY3 added in v0.3.1

func TestOnly_SetCep1LastBlockY3(blockNum *big.Int)

func TestOnly_SetCep1LastBlockY4 added in v0.3.1

func TestOnly_SetCep1LastBlockY4(blockNum *big.Int)

func TestOnly_SetCep1LastBlockY5 added in v0.3.1

func TestOnly_SetCep1LastBlockY5(blockNum *big.Int)

func Validators

func Validators() []common.Address

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

type Rules struct {
	ChainID   *big.Int
	IsCpchain bool
}

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.

type RunMode added in v0.1.1

type RunMode string
const (
	Dev         RunMode = "dev"
	Testnet     RunMode = "testnet"
	Mainnet     RunMode = "mainnet"
	TestMainnet RunMode = "testmainnet"
	Testcase    RunMode = "testcase"
)

func GetRunMode

func GetRunMode() RunMode

func (RunMode) String added in v0.3.1

func (RunMode) String() string

Jump to

Keyboard shortcuts

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