Documentation ¶
Overview ¶
Package chaincfg defines chain configuration parameters.
In addition to the main Decred network, which is intended for the transfer of monetary value, there also exists two currently active standard networks: regression test and testnet (version 0). These networks are incompatible with each other (each sharing a different genesis block) and software should handle errors where input intended for one network is used on an application instance running on a different network.
For library packages, chaincfg provides the ability to lookup chain parameters and encoding magics when passed a *Params. Older APIs not updated to the new convention of passing a *Params may lookup the parameters for a wire.DecredNet using ParamsForNet, but be aware that this usage is deprecated and will be removed from chaincfg in the future.
For main packages, a (typically global) var may be assigned the address of one of the standard Param vars for use as the application's "active" network. When a network parameter is needed, it may then be looked up through this variable (either directly, or hidden in a library call).
package main import ( "flag" "fmt" "log" "github.com/decred/dcrd/dcrutil" "github.com/decred/dcrd/chaincfg" ) var testnet = flag.Bool("testnet", false, "operate on the testnet Decred network") // By default (without -testnet), use mainnet. var chainParams = &chaincfg.MainNetParams func main() { flag.Parse() // Modify active network parameters if operating on testnet. if *testnet { chainParams = &chaincfg.TestNetParams } // later... // Create and print new payment address, specific to the active network. pubKeyHash := make([]byte, 20) addr, err := dcrutil.NewAddressPubKeyHash(pubKeyHash, chainParams) if err != nil { log.Fatal(err) } fmt.Println(addr) }
If an application does not use one of the three standard Decred networks, a new Params struct may be created which defines the parameters for the non-standard network. As a general rule of thumb, all network parameters should be unique to the network, but parameter collisions can still occur (unfortunately, this is the case with regtest and testnet sharing magics).
Index ¶
- Constants
- Variables
- func HDPrivateKeyToPublicKeyID(id []byte) ([]byte, error)
- func IsPKHEdwardsAddrID(id [2]byte) bool
- func IsPKHSchnorrAddrID(id [2]byte) bool
- func IsPubKeyAddrID(id [2]byte) bool
- func IsPubKeyHashAddrID(id [2]byte) bool
- func IsScriptHashAddrID(id [2]byte) bool
- func Register(params *Params) error
- type Checkpoint
- type Choice
- type ConsensusDeployment
- type DNSSeed
- type Params
- type TokenPayout
- type Vote
Constants ¶
const ( // VoteIDMaxBlockSize is the vote ID for the the maximum block size // increase agenda used for the hard fork demo. VoteIDMaxBlockSize = "maxblocksize" // VoteIDSDiffAlgorithm is the vote ID for the new stake difficulty // algorithm (aka ticket price) agenda defined by DCP0001. VoteIDSDiffAlgorithm = "sdiffalgorithm" // VoteIDLNSupport is the vote ID for determining if the developers // should work on integrating Lightning Network support. VoteIDLNSupport = "lnsupport" // VoteIDLNFeatures is the vote ID for the agenda that introduces // features useful for the Lightning Network (among other uses) defined // by DCP0002 and DCP0003. VoteIDLNFeatures = "lnfeatures" // VoteIDFixLNSeqLocks is the vote ID for the agenda that corrects the // sequence lock functionality needed for Lightning Network (among other // uses) defined by DCP0004. VoteIDFixLNSeqLocks = "fixlnseqlocks" )
Variables ¶
var ( // ErrDuplicateNet describes an error where the parameters for a Decred // network could not be set due to the network already being a standard // network or previously-registered into this package. ErrDuplicateNet = errors.New("duplicate Decred network") // ErrUnknownHDKeyID describes an error where the provided id which // is intended to identify the network for a hierarchical deterministic // private extended key is not registered. ErrUnknownHDKeyID = errors.New("unknown hd private extended key bytes") // ErrDuplicateNetAddrPrefix describes an error where the parameters for a // Decred network could not be set due to the network prefix colliding with // a standard or previously-registered network in this package. ErrDuplicateNetAddrPrefix = errors.New("duplicate network address prefix") // ErrUnknownNetAddrPrefix describes an error where the provided network // address prefix is not registered. ErrUnknownNetAddrPrefix = errors.New("unknown network address prefix") )
var BlockOneLedgerMainNet = []*TokenPayout{}/* 3146 elements not displayed */
BlockOneLedgerMainNet is the block one output ledger for the main network.
var BlockOneLedgerRegNet = []*TokenPayout{
{"RsKrWb7Vny1jnzL1sDLgKTAteh9RZcRr5g6", 100000 * 1e8},
{"Rs8ca5cDALtsMVD4PV3xvFTC7dmuU1juvLv", 100000 * 1e8},
{"RsHzbGt6YajuHpurtpqXXHz57LmYZK8w9tX", 100000 * 1e8},
}
BlockOneLedgerRegNet is the block one output ledger for the regression test network. See "Decred organization related parameters" in regnetparams.go for information on how to spend these outputs.
var BlockOneLedgerSimNet = []*TokenPayout{
{"Sshw6S86G2bV6W32cbc7EhtFy8f93rU6pae", 100000 * 1e8},
{"SsjXRK6Xz6CFuBt6PugBvrkdAa4xGbcZ18w", 100000 * 1e8},
{"SsfXiYkYkCoo31CuVQw428N6wWKus2ZEw5X", 100000 * 1e8},
}
BlockOneLedgerSimNet is the block one output ledger for the simulation network. See "Decred organization related parameters" in simnetparams.go for information on how to spend these outputs.
var BlockOneLedgerTestNet3 = []*TokenPayout{
{"Tsi6gGYNSMmFwi7JoL5Li39SrERZTTMu6vY", 80000 * 1e8},
{"TscB7V5RuR1oXpA364DFEsNDuAs8Rk6BHJE", 20000 * 1e8},
}
BlockOneLedgerTestNet3 is the block one output ledger for testnet version 3.
var CPUMinerThreads = 1
CPUMinerThreads is the default number of threads to utilize with the CPUMiner when mining.
var CheckForDuplicateHashes = false
CheckForDuplicateHashes checks for duplicate hashes when validating blocks. Because of the rule inserting the height into the second (nonce) txOut, there should never be a duplicate transaction hash that overwrites another. However, because there is a 2^128 chance of a collision, the paranoid user may wish to turn this feature on.
var MainNetParams = Params{ Name: "mainnet", Net: wire.MainNet, DefaultPort: "9108", DNSSeeds: []DNSSeed{ {"mainnet-seed.decred.mindcry.org", true}, {"mainnet-seed.decred.netpurgatory.com", true}, {"mainnet-seed.decred.org", true}, }, GenesisBlock: &genesisBlock, GenesisHash: &genesisHash, PowLimit: mainPowLimit, PowLimitBits: 0x1d00ffff, ReduceMinDifficulty: false, MinDiffReductionTime: 0, GenerateSupported: false, MaximumBlockSizes: []int{393216}, MaxTxSize: 393216, TargetTimePerBlock: time.Minute * 5, WorkDiffAlpha: 1, WorkDiffWindowSize: 144, WorkDiffWindows: 20, TargetTimespan: time.Minute * 5 * 144, RetargetAdjustmentFactor: 4, BaseSubsidy: 3119582664, MulSubsidy: 100, DivSubsidy: 101, SubsidyReductionInterval: 6144, WorkRewardProportion: 6, StakeRewardProportion: 3, BlockTaxProportion: 1, Checkpoints: []Checkpoint{ {440, newHashFromStr("0000000000002203eb2c95ee96906730bb56b2985e174518f90eb4db29232d93")}, {24480, newHashFromStr("0000000000000c9d4239c4ef7ef3fb5aaeed940244bc69c57c8c5e1f071b28a6")}, {48590, newHashFromStr("0000000000000d5e0de21a96d3c965f5f2db2c82612acd7389c140c9afe92ba7")}, {54770, newHashFromStr("00000000000009293d067b1126b7de07fc9b2b94ee50dfe0d48c239a7adb072c")}, {60720, newHashFromStr("0000000000000a64475d68ffb9ad89a3d147c0f5138db26b40da9d19d0004117")}, {65270, newHashFromStr("0000000000000021f107601962789b201f0a0cbb98ac5f8c12b93d94e795b441")}, {75380, newHashFromStr("0000000000000e7d13cfc85806aa720fe3670980f5b7d33253e4f41985558372")}, {85410, newHashFromStr("00000000000013ec928074bea6eac9754aa614c7acb20edf300f18b0cd122692")}, {99880, newHashFromStr("0000000000000cb2a9a9ded647b9f78aae51ace32dd8913701d420ead272913c")}, {123080, newHashFromStr("000000000000009ea6e02d0f0424f445ed50686f9ae4aecdf3b268e981114477")}, {135960, newHashFromStr("00000000000001d2f9bbca9177972c0ba45acb40836b72945a75d73b99079498")}, {139740, newHashFromStr("00000000000001397179ae1aff156fb1aea228938d06b83e43b78b1c44527b5b")}, {155900, newHashFromStr("000000000000008557e37fb05177fc5a54e693de20689753639135f85a2dcb2e")}, {164300, newHashFromStr("000000000000009ed067ff51cd5e15f3c786222a5183b20a991a80ce535907a9")}, {181020, newHashFromStr("00000000000000b77d832cb2cbed02908d69323862a53e56345400ad81a6fb8f")}, {189950, newHashFromStr("000000000000007341d8ae2ea7e41f25cee00e1a70a4a3dc1cb055d14ecb2e11")}, {214672, newHashFromStr("0000000000000021d5cbeead55cb7fd659f07e8127358929ffc34cd362209758")}, {259810, newHashFromStr("0000000000000000ee0fbf469a9f32477ffbb46ebd7a280a53c842ab4243f97c")}, {295940, newHashFromStr("0000000000000000148852c8a919addf4043f9f267b13c08df051d359f1622ca")}, }, RuleChangeActivationQuorum: 4032, RuleChangeActivationMultiplier: 3, RuleChangeActivationDivisor: 4, RuleChangeActivationInterval: 2016 * 4, Deployments: map[uint32][]ConsensusDeployment{ 4: {{ Vote: Vote{ Id: VoteIDSDiffAlgorithm, Description: "Change stake difficulty algorithm as defined in DCP0001", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing algorithm", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new algorithm", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 1493164800, ExpireTime: 1524700800, }, { Vote: Vote{ Id: VoteIDLNSupport, Description: "Request developers begin work on Lightning Network (LN) integration", Mask: 0x0018, Choices: []Choice{{ Id: "abstain", Description: "abstain from voting", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "no, do not work on integrating LN support", Bits: 0x0008, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "yes, begin work on integrating LN support", Bits: 0x0010, IsAbstain: false, IsNo: false, }}, }, StartTime: 1493164800, ExpireTime: 1508976000, }}, 5: {{ Vote: Vote{ Id: VoteIDLNFeatures, Description: "Enable features defined in DCP0002 and DCP0003 necessary to support Lightning Network (LN)", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing consensus rules", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new consensus rules", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 1505260800, ExpireTime: 1536796800, }}, 6: {{ Vote: Vote{ Id: VoteIDFixLNSeqLocks, Description: "Modify sequence lock handling as defined in DCP0004", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing consensus rules", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new consensus rules", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 1548633600, ExpireTime: 1580169600, }}, }, BlockEnforceNumRequired: 750, BlockRejectNumRequired: 950, BlockUpgradeNumToCheck: 1000, AcceptNonStdTxs: false, NetworkAddressPrefix: "D", PubKeyAddrID: [2]byte{0x13, 0x86}, PubKeyHashAddrID: [2]byte{0x07, 0x3f}, PKHEdwardsAddrID: [2]byte{0x07, 0x1f}, PKHSchnorrAddrID: [2]byte{0x07, 0x01}, ScriptHashAddrID: [2]byte{0x07, 0x1a}, PrivateKeyID: [2]byte{0x22, 0xde}, HDPrivateKeyID: [4]byte{0x02, 0xfd, 0xa4, 0xe8}, HDPublicKeyID: [4]byte{0x02, 0xfd, 0xa9, 0x26}, SLIP0044CoinType: 42, LegacyCoinType: 20, MinimumStakeDiff: 2 * 1e8, TicketPoolSize: 8192, TicketsPerBlock: 5, TicketMaturity: 256, TicketExpiry: 40960, CoinbaseMaturity: 256, SStxChangeMaturity: 1, TicketPoolSizeWeight: 4, StakeDiffAlpha: 1, StakeDiffWindowSize: 144, StakeDiffWindows: 20, StakeVersionInterval: 144 * 2 * 7, MaxFreshStakePerBlock: 20, StakeEnabledHeight: 256 + 256, StakeValidationHeight: 4096, StakeBaseSigScript: []byte{0x00, 0x00}, StakeMajorityMultiplier: 3, StakeMajorityDivisor: 4, OrganizationPkScript: hexDecode("a914f5916158e3e2c4551c1796708db8367207ed13bb87"), OrganizationPkScriptVersion: 0, BlockOneLedger: BlockOneLedgerMainNet, }
MainNetParams defines the network parameters for the main Decred network.
var RegNetParams = Params{ Name: "regnet", Net: wire.RegNet, DefaultPort: "18655", DNSSeeds: nil, GenesisBlock: ®NetGenesisBlock, GenesisHash: ®NetGenesisHash, PowLimit: regNetPowLimit, PowLimitBits: 0x207fffff, ReduceMinDifficulty: false, MinDiffReductionTime: 0, GenerateSupported: true, MaximumBlockSizes: []int{1000000, 1310720}, MaxTxSize: 1000000, TargetTimePerBlock: time.Second, WorkDiffAlpha: 1, WorkDiffWindowSize: 8, WorkDiffWindows: 4, TargetTimespan: time.Second * 8, RetargetAdjustmentFactor: 4, BaseSubsidy: 50000000000, MulSubsidy: 100, DivSubsidy: 101, SubsidyReductionInterval: 128, WorkRewardProportion: 6, StakeRewardProportion: 3, BlockTaxProportion: 1, Checkpoints: nil, RuleChangeActivationQuorum: 160, RuleChangeActivationMultiplier: 3, RuleChangeActivationDivisor: 4, RuleChangeActivationInterval: 320, Deployments: map[uint32][]ConsensusDeployment{ 4: {{ Vote: Vote{ Id: VoteIDMaxBlockSize, Description: "Change maximum allowed block size from 1MiB to 1.25MB", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "reject changing max allowed block size", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "accept changing max allowed block size", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 0, ExpireTime: math.MaxInt64, }}, 5: {{ Vote: Vote{ Id: VoteIDSDiffAlgorithm, Description: "Change stake difficulty algorithm as defined in DCP0001", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing algorithm", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new algorithm", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 0, ExpireTime: math.MaxInt64, }}, 6: {{ Vote: Vote{ Id: VoteIDLNFeatures, Description: "Enable features defined in DCP0002 and DCP0003 necessary to support Lightning Network (LN)", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing consensus rules", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new consensus rules", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 0, ExpireTime: math.MaxInt64, }}, 7: {{ Vote: Vote{ Id: VoteIDFixLNSeqLocks, Description: "Modify sequence lock handling as defined in DCP0004", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing consensus rules", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new consensus rules", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 0, ExpireTime: math.MaxInt64, }}, }, BlockEnforceNumRequired: 51, BlockRejectNumRequired: 75, BlockUpgradeNumToCheck: 100, AcceptNonStdTxs: true, NetworkAddressPrefix: "R", PubKeyAddrID: [2]byte{0x25, 0xe5}, PubKeyHashAddrID: [2]byte{0x0e, 0x00}, PKHEdwardsAddrID: [2]byte{0x0d, 0xe0}, PKHSchnorrAddrID: [2]byte{0x0d, 0xc2}, ScriptHashAddrID: [2]byte{0x0d, 0xdb}, PrivateKeyID: [2]byte{0x22, 0xfe}, HDPrivateKeyID: [4]byte{0xea, 0xb4, 0x04, 0x48}, HDPublicKeyID: [4]byte{0xea, 0xb4, 0xf9, 0x87}, SLIP0044CoinType: 1, LegacyCoinType: 1, MinimumStakeDiff: 20000, TicketPoolSize: 64, TicketsPerBlock: 5, TicketMaturity: 16, TicketExpiry: 384, CoinbaseMaturity: 16, SStxChangeMaturity: 1, TicketPoolSizeWeight: 4, StakeDiffAlpha: 1, StakeDiffWindowSize: 8, StakeDiffWindows: 8, StakeVersionInterval: 8 * 2 * 7, MaxFreshStakePerBlock: 20, StakeEnabledHeight: 16 + 16, StakeValidationHeight: 16 + (64 * 2), StakeBaseSigScript: []byte{0x73, 0x57}, StakeMajorityMultiplier: 3, StakeMajorityDivisor: 4, OrganizationPkScript: hexDecode("a9146913bcc838bd0087fb3f6b3c868423d5e300078d87"), OrganizationPkScriptVersion: 0, BlockOneLedger: BlockOneLedgerRegNet, }
RegNetParams defines the network parameters for the regression test network. This should not be confused with the public test network or the simulation test network. The purpose of this network is primarily for unit tests and RPC server tests. On the other hand, the simulation test network is intended for full integration tests between different applications such as wallets, voting service providers, mining pools, block explorers, and other services that build on Decred.
Since this network is only intended for unit testing, its values are subject to change even if it would cause a hard fork.
var SigHashOptimization = false
SigHashOptimization is an optimization for verification of transactions that do CHECKSIG operations with hashType SIGHASH_ALL. Although there should be no consequences to daemons that are simply running a node, it may be the case that you could cause database corruption if you turn this code on, create and manipulate your own MsgTx, then include them in blocks. For safety, if you're using the daemon with wallet or mining with the daemon this should be disabled. If you believe that any MsgTxs in your daemon will be used mutably, do NOT turn on this feature. It is disabled by default. This feature is considered EXPERIMENTAL, enable at your own risk!
var SimNetParams = Params{ Name: "simnet", Net: wire.SimNet, DefaultPort: "18555", DNSSeeds: nil, GenesisBlock: &simNetGenesisBlock, GenesisHash: &simNetGenesisHash, PowLimit: simNetPowLimit, PowLimitBits: 0x207fffff, ReduceMinDifficulty: false, MinDiffReductionTime: 0, GenerateSupported: true, MaximumBlockSizes: []int{1310720}, MaxTxSize: 1000000, TargetTimePerBlock: time.Second, WorkDiffAlpha: 1, WorkDiffWindowSize: 8, WorkDiffWindows: 4, TargetTimespan: time.Second * 8, RetargetAdjustmentFactor: 4, BaseSubsidy: 50000000000, MulSubsidy: 100, DivSubsidy: 101, SubsidyReductionInterval: 128, WorkRewardProportion: 6, StakeRewardProportion: 3, BlockTaxProportion: 1, Checkpoints: nil, RuleChangeActivationQuorum: 160, RuleChangeActivationMultiplier: 3, RuleChangeActivationDivisor: 4, RuleChangeActivationInterval: 320, BlockEnforceNumRequired: 51, BlockRejectNumRequired: 75, BlockUpgradeNumToCheck: 100, AcceptNonStdTxs: true, NetworkAddressPrefix: "S", PubKeyAddrID: [2]byte{0x27, 0x6f}, PubKeyHashAddrID: [2]byte{0x0e, 0x91}, PKHEdwardsAddrID: [2]byte{0x0e, 0x71}, PKHSchnorrAddrID: [2]byte{0x0e, 0x53}, ScriptHashAddrID: [2]byte{0x0e, 0x6c}, PrivateKeyID: [2]byte{0x23, 0x07}, HDPrivateKeyID: [4]byte{0x04, 0x20, 0xb9, 0x03}, HDPublicKeyID: [4]byte{0x04, 0x20, 0xbd, 0x3d}, SLIP0044CoinType: 1, LegacyCoinType: 115, MinimumStakeDiff: 20000, TicketPoolSize: 64, TicketsPerBlock: 5, TicketMaturity: 16, TicketExpiry: 384, CoinbaseMaturity: 16, SStxChangeMaturity: 1, TicketPoolSizeWeight: 4, StakeDiffAlpha: 1, StakeDiffWindowSize: 8, StakeDiffWindows: 8, StakeVersionInterval: 8 * 2 * 7, MaxFreshStakePerBlock: 20, StakeEnabledHeight: 16 + 16, StakeValidationHeight: 16 + (64 * 2), StakeBaseSigScript: []byte{0xDE, 0xAD, 0xBE, 0xEF}, StakeMajorityMultiplier: 3, StakeMajorityDivisor: 4, OrganizationPkScript: hexDecode("a914cbb08d6ca783b533b2c7d24a51fbca92d937bf9987"), OrganizationPkScriptVersion: 0, BlockOneLedger: BlockOneLedgerSimNet, }
SimNetParams defines the network parameters for the simulation test network. This network is similar to the normal test network except it is intended for private use within a group of individuals doing simulation testing and full integration tests between different applications such as wallets, voting service providers, mining pools, block explorers, and other services that build on Decred.
The functionality is intended to differ in that the only nodes which are specifically specified are used to create the network rather than following normal discovery rules. This is important as otherwise it would just turn into another public testnet.
var TestNet3Params = Params{ Name: "testnet3", Net: wire.TestNet3, DefaultPort: "19108", DNSSeeds: []DNSSeed{ {"testnet-seed.decred.mindcry.org", true}, {"testnet-seed.decred.netpurgatory.com", true}, {"testnet-seed.decred.org", true}, }, GenesisBlock: &testNet3GenesisBlock, GenesisHash: &testNet3GenesisHash, PowLimit: testNetPowLimit, PowLimitBits: 0x1e00ffff, ReduceMinDifficulty: true, MinDiffReductionTime: time.Minute * 10, GenerateSupported: true, MaximumBlockSizes: []int{1310720}, MaxTxSize: 1000000, TargetTimePerBlock: time.Minute * 2, WorkDiffAlpha: 1, WorkDiffWindowSize: 144, WorkDiffWindows: 20, TargetTimespan: time.Minute * 2 * 144, RetargetAdjustmentFactor: 4, BaseSubsidy: 2500000000, MulSubsidy: 100, DivSubsidy: 101, SubsidyReductionInterval: 2048, WorkRewardProportion: 6, StakeRewardProportion: 3, BlockTaxProportion: 1, Checkpoints: []Checkpoint{ {83520, newHashFromStr("0000000001e6244d95feae8b598e854905158c7bc781daf874afff88675ef0c8")}, }, RuleChangeActivationQuorum: 2520, RuleChangeActivationMultiplier: 3, RuleChangeActivationDivisor: 4, RuleChangeActivationInterval: 5040, Deployments: map[uint32][]ConsensusDeployment{ 7: {{ Vote: Vote{ Id: VoteIDFixLNSeqLocks, Description: "Modify sequence lock handling as defined in DCP0004", Mask: 0x0006, Choices: []Choice{{ Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "keep the existing consensus rules", Bits: 0x0002, IsAbstain: false, IsNo: true, }, { Id: "yes", Description: "change to the new consensus rules", Bits: 0x0004, IsAbstain: false, IsNo: false, }}, }, StartTime: 1548633600, ExpireTime: 1580169600, }}, }, BlockEnforceNumRequired: 51, BlockRejectNumRequired: 75, BlockUpgradeNumToCheck: 100, AcceptNonStdTxs: true, NetworkAddressPrefix: "T", PubKeyAddrID: [2]byte{0x28, 0xf7}, PubKeyHashAddrID: [2]byte{0x0f, 0x21}, PKHEdwardsAddrID: [2]byte{0x0f, 0x01}, PKHSchnorrAddrID: [2]byte{0x0e, 0xe3}, ScriptHashAddrID: [2]byte{0x0e, 0xfc}, PrivateKeyID: [2]byte{0x23, 0x0e}, HDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x97}, HDPublicKeyID: [4]byte{0x04, 0x35, 0x87, 0xd1}, SLIP0044CoinType: 1, LegacyCoinType: 11, MinimumStakeDiff: 20000000, TicketPoolSize: 1024, TicketsPerBlock: 5, TicketMaturity: 16, TicketExpiry: 6144, CoinbaseMaturity: 16, SStxChangeMaturity: 1, TicketPoolSizeWeight: 4, StakeDiffAlpha: 1, StakeDiffWindowSize: 144, StakeDiffWindows: 20, StakeVersionInterval: 144 * 2 * 7, MaxFreshStakePerBlock: 20, StakeEnabledHeight: 16 + 16, StakeValidationHeight: 768, StakeBaseSigScript: []byte{0x00, 0x00}, StakeMajorityMultiplier: 3, StakeMajorityDivisor: 4, OrganizationPkScript: hexDecode("a914d585cd7426d25b4ea5faf1e6987aacfeda3db94287"), OrganizationPkScriptVersion: 0, BlockOneLedger: BlockOneLedgerTestNet3, }
TestNet3Params defines the network parameters for the test currency network. This network is sometimes simply called "testnet". This is the third public iteration of testnet.
Functions ¶
func HDPrivateKeyToPublicKeyID ¶
HDPrivateKeyToPublicKeyID accepts a private hierarchical deterministic extended key id and returns the associated public key id. When the provided id is not registered, the ErrUnknownHDKeyID error will be returned.
func IsPKHEdwardsAddrID ¶
IsPKHEdwardsAddrID returns whether the id is an identifier know to prefix a pay-to-pubkey-hash Edwards address.
func IsPKHSchnorrAddrID ¶
IsPKHSchnorrAddrID returns whether the id is an identifier know to prefix a pay-to-pubkey-hash secp256k1 Schnorr address.
func IsPubKeyAddrID ¶
IsPubKeyAddrID returns whether the id is an identifier known to prefix a pay-to-pubkey address on any default or registered network.
func IsPubKeyHashAddrID ¶
IsPubKeyHashAddrID returns whether the id is an identifier known to prefix a pay-to-pubkey-hash address on any default or registered network. This is used when decoding an address string into a specific address type. It is up to the caller to check both this and IsScriptHashAddrID and decide whether an address is a pubkey hash address, script hash address, neither, or undeterminable (if both return true).
func IsScriptHashAddrID ¶
IsScriptHashAddrID returns whether the id is an identifier known to prefix a pay-to-script-hash address on any default or registered network. This is used when decoding an address string into a specific address type. It is up to the caller to check both this and IsPubKeyHashAddrID and decide whether an address is a pubkey hash address, script hash address, neither, or undeterminable (if both return true).
func Register ¶
Register registers the network parameters for a Decred network. This may error with ErrDuplicateNet if the network is already registered (either due to a previous Register call, or the network being one of the default networks).
Network parameters should be registered into this package by a main package as early as possible. Then, library packages may lookup networks or network parameters based on inputs and work regardless of the network being standard or not.
Types ¶
type Checkpoint ¶
Checkpoint identifies a known good point in the block chain. Using checkpoints allows a few optimizations for old blocks during initial download and also prevents forks from old blocks.
Each checkpoint is selected based upon several factors. See the documentation for chain.IsCheckpointCandidate for details on the selection criteria.
type Choice ¶
type Choice struct { // Single unique word identifying vote (e.g. yes) Id string // Longer description of the vote. Description string // Bits used for this vote. Bits uint16 // This is the abstain choice. By convention this must be the 0 vote // (abstain) and exist only once in the Vote.Choices array. IsAbstain bool // This coince indicates a hard No Vote. By convention this must exist // only once in the Vote.Choices array. IsNo bool }
Choice defines one of the possible Choices that make up a vote. The 0 value in Bits indicates the default choice. Care should be taken not to bias a vote with the default choice.
type ConsensusDeployment ¶
type ConsensusDeployment struct { // Vote describes the what is being voted on and what the choices are. // This is sitting in a struct in order to make merging between btcd // easier. Vote Vote // StartTime is the median block time after which voting on the // deployment starts. StartTime uint64 // ExpireTime is the median block time after which the attempted // deployment expires. ExpireTime uint64 }
ConsensusDeployment defines details related to a specific consensus rule change that is voted in. This is part of BIP0009.
type DNSSeed ¶
type DNSSeed struct { // Host defines the hostname of the seed. Host string // HasFiltering defines whether the seed supports filtering // by service flags (wire.ServiceFlag). HasFiltering bool }
DNSSeed identifies a DNS seed.
type Params ¶
type Params struct { // Name defines a human-readable identifier for the network. Name string // Net defines the magic bytes used to identify the network. Net wire.CurrencyNet // DefaultPort defines the default peer-to-peer port for the network. DefaultPort string // DNSSeeds defines a list of DNS seeds for the network that are used // as one method to discover peers. DNSSeeds []DNSSeed // GenesisBlock defines the first block of the chain. GenesisBlock *wire.MsgBlock // GenesisHash is the starting block hash. GenesisHash *chainhash.Hash // PowLimit defines the highest allowed proof of work value for a block // as a uint256. PowLimit *big.Int // PowLimitBits defines the highest allowed proof of work value for a // block in compact form. PowLimitBits uint32 // ReduceMinDifficulty defines whether the network should reduce the // minimum required difficulty after a long enough period of time has // passed without finding a block. This is really only useful for test // networks and should not be set on a main network. ReduceMinDifficulty bool // MinDiffReductionTime is the amount of time after which the minimum // required difficulty should be reduced when a block hasn't been found. // // NOTE: This only applies if ReduceMinDifficulty is true. MinDiffReductionTime time.Duration // GenerateSupported specifies whether or not CPU mining is allowed. GenerateSupported bool // MaximumBlockSizes are the maximum sizes of a block that can be // generated on the network. It is an array because the max block size // can be different values depending on the results of a voting agenda. // The first entry is the initial block size for the network, while the // other entries are potential block size changes which take effect when // the vote for the associated agenda succeeds. MaximumBlockSizes []int // MaxTxSize is the maximum number of bytes a serialized transaction can // be in order to be considered valid by consensus. MaxTxSize int // TargetTimePerBlock is the desired amount of time to generate each // block. TargetTimePerBlock time.Duration // WorkDiffAlpha is the stake difficulty EMA calculation alpha (smoothing) // value. It is different from a normal EMA alpha. Closer to 1 --> smoother. WorkDiffAlpha int64 // WorkDiffWindowSize is the number of windows (intervals) used for calculation // of the exponentially weighted average. WorkDiffWindowSize int64 // WorkDiffWindows is the number of windows (intervals) used for calculation // of the exponentially weighted average. WorkDiffWindows int64 // TargetTimespan is the desired amount of time that should elapse // before the block difficulty requirement is examined to determine how // it should be changed in order to maintain the desired block // generation rate. This value should correspond to the product of // WorkDiffWindowSize and TimePerBlock above. TargetTimespan time.Duration // RetargetAdjustmentFactor is the adjustment factor used to limit // the minimum and maximum amount of adjustment that can occur between // difficulty retargets. RetargetAdjustmentFactor int64 // BaseSubsidy is the starting subsidy amount for mined blocks. BaseSubsidy int64 // Subsidy reduction multiplier. MulSubsidy int64 // Subsidy reduction divisor. DivSubsidy int64 // SubsidyReductionInterval is the reduction interval in blocks. SubsidyReductionInterval int64 // WorkRewardProportion is the comparative amount of the subsidy given for // creating a block. WorkRewardProportion uint16 // StakeRewardProportion is the comparative amount of the subsidy given for // casting stake votes (collectively, per block). StakeRewardProportion uint16 // BlockTaxProportion is the inverse of the percentage of funds for each // block to allocate to the developer organization. // e.g. 10% --> 10 (or 1 / (1/10)) // Special case: disable taxes with a value of 0 BlockTaxProportion uint16 // Checkpoints ordered from oldest to newest. Checkpoints []Checkpoint // These fields are related to voting on consensus rule changes as // defined by BIP0009. // // RuleChangeActivationQurom is the number of votes required for a vote // to take effect. // // RuleChangeActivationInterval is the number of blocks in each threshold // state retarget window. // // Deployments define the specific consensus rule changes to be voted // on for the stake version (the map key). RuleChangeActivationQuorum uint32 RuleChangeActivationMultiplier uint32 RuleChangeActivationDivisor uint32 RuleChangeActivationInterval uint32 Deployments map[uint32][]ConsensusDeployment // Enforce current block version once network has upgraded. BlockEnforceNumRequired uint64 // Reject previous block versions once network has upgraded. BlockRejectNumRequired uint64 // The number of nodes to check. BlockUpgradeNumToCheck uint64 // AcceptNonStdTxs is a mempool param to either accept and relay // non standard txs to the network or reject them AcceptNonStdTxs bool // NetworkAddressPrefix is the first letter of the network // for any given address encoded as a string. NetworkAddressPrefix string // Address encoding magics PubKeyAddrID [2]byte // First 2 bytes of a P2PK address PubKeyHashAddrID [2]byte // First 2 bytes of a P2PKH address PKHEdwardsAddrID [2]byte // First 2 bytes of an Edwards P2PKH address PKHSchnorrAddrID [2]byte // First 2 bytes of a secp256k1 Schnorr P2PKH address ScriptHashAddrID [2]byte // First 2 bytes of a P2SH address PrivateKeyID [2]byte // First 2 bytes of a WIF private key // BIP32 hierarchical deterministic extended key magics HDPrivateKeyID [4]byte HDPublicKeyID [4]byte // SLIP-0044 registered coin type used for BIP44, used in the hierarchical // deterministic path for address generation. // All SLIP-0044 registered coin types are are defined here: // https://github.com/satoshilabs/slips/blob/master/slip-0044.md SLIP0044CoinType uint32 // Legacy BIP44 coin type used in the hierarchical deterministic path for // address generation. Previous name was HDCoinType, the LegacyCoinType // was introduced for backwards compatibility. Usually, SLIP0044CoinType // should be used instead. LegacyCoinType uint32 // MinimumStakeDiff if the minimum amount of Atoms required to purchase a // stake ticket. MinimumStakeDiff int64 // Ticket pool sizes for Decred PoS. This denotes the number of possible // buckets/number of different ticket numbers. It is also the number of // possible winner numbers there are. TicketPoolSize uint16 // Average number of tickets per block for Decred PoS. TicketsPerBlock uint16 // Number of blocks for tickets to mature (spendable at TicketMaturity+1). TicketMaturity uint16 // Number of blocks for tickets to expire after they have matured. This MUST // be >= (StakeEnabledHeight + StakeValidationHeight). TicketExpiry uint32 // CoinbaseMaturity is the number of blocks required before newly mined // coins (coinbase transactions) can be spent. CoinbaseMaturity uint16 // Maturity for spending SStx change outputs. SStxChangeMaturity uint16 // TicketPoolSizeWeight is the multiplicative weight applied to the // ticket pool size difference between a window period and its target // when determining the stake system. TicketPoolSizeWeight uint16 // StakeDiffAlpha is the stake difficulty EMA calculation alpha (smoothing) // value. It is different from a normal EMA alpha. Closer to 1 --> smoother. StakeDiffAlpha int64 // StakeDiffWindowSize is the number of blocks used for each interval in // exponentially weighted average. StakeDiffWindowSize int64 // StakeDiffWindows is the number of windows (intervals) used for calculation // of the exponentially weighted average. StakeDiffWindows int64 // StakeVersionInterval determines the interval where the stake version // is calculated. StakeVersionInterval int64 // MaxFreshStakePerBlock is the maximum number of new tickets that may be // submitted per block. MaxFreshStakePerBlock uint8 // StakeEnabledHeight is the height in which the first ticket could possibly // mature. StakeEnabledHeight int64 // StakeValidationHeight is the height at which votes (SSGen) are required // to add a new block to the top of the blockchain. This height is the // first block that will be voted on, but will include in itself no votes. StakeValidationHeight int64 // StakeBaseSigScript is the consensus stakebase signature script for all // votes on the network. This isn't signed in any way, so without forcing // it to be this value miners/daemons could freely change it. StakeBaseSigScript []byte // StakeMajorityMultiplier and StakeMajorityDivisor are used // to calculate the super majority of stake votes using integer math as // such: X*StakeMajorityMultiplier/StakeMajorityDivisor StakeMajorityMultiplier int32 StakeMajorityDivisor int32 // OrganizationPkScript is the output script for block taxes to be // distributed to in every block's coinbase. It should ideally be a P2SH // multisignature address. OrganizationPkScriptVersion is the version // of the output script. Until PoS hardforking is implemented, this // version must always match for a block to validate. OrganizationPkScript []byte OrganizationPkScriptVersion uint16 // BlockOneLedger specifies the list of payouts in the coinbase of // block height 1. If there are no payouts to be given, set this // to an empty slice. BlockOneLedger []*TokenPayout }
Params defines a Decred network by its parameters. These parameters may be used by Decred applications to differentiate networks as well as addresses and keys for one network from those intended for use on another network.
func ParamsByNetAddrPrefix ¶ added in v1.4.0
ParamsByNetAddrPrefix the parameters registered for the provided network address prefix. An error is returned if the prefix is not registered.
func (*Params) BlockOneSubsidy ¶
BlockOneSubsidy returns the total subsidy of block height 1 for the network.
func (*Params) HDPrivKeyVersion ¶ added in v1.4.0
HDPrivKeyVersion returns the hierarchical deterministic extended private key magic version bytes for the network the parameters define.
func (*Params) HDPubKeyVersion ¶ added in v1.4.0
HDPubKeyVersion returns the hierarchical deterministic extended public key magic version bytes for the network the parameters define.
func (*Params) LatestCheckpointHeight ¶
LatestCheckpointHeight is the height of the latest checkpoint block in the parameters.
func (*Params) TotalSubsidyProportions ¶
TotalSubsidyProportions is the sum of WorkReward, StakeReward, and BlockTax proportions.
type TokenPayout ¶
TokenPayout is a payout for block 1 which specifies an address and an amount to pay to that address in a transaction output.
type Vote ¶
type Vote struct { // Single unique word identifying the vote. Id string // Longer description of what the vote is about. Description string // Usable bits for this vote. Mask uint16 Choices []Choice }
Vote describes a voting instance. It is self-describing so that the UI can be directly implemented using the fields. Mask determines which bits can be used. Bits are enumerated and must be consecutive. Each vote requires one and only one abstain (bits = 0) and reject vote (IsNo = true).
For example, change block height from int64 to uint64.
Vote { Id: "blockheight", Description: "Change block height from int64 to uint64" Mask: 0x0006, Choices: []Choice{ { Id: "abstain", Description: "abstain voting for change", Bits: 0x0000, IsAbstain: true, IsNo: false, }, { Id: "no", Description: "reject changing block height to uint64", Bits: 0x0002, IsAbstain: false, IsNo: false, }, { Id: "yes", Description: "accept changing block height to uint64", Bits: 0x0004, IsAbstain: false, IsNo: true, }, }, }