BIPs: Bitcoin Improvement Proposals
In the previous chapter, we introduced BIPs as a way to bring new features to the Bitcoin protocol. Each new improvement (BIP) is activated at a future block height to give Bitcoin users time to update their software. In chainparams.cpp, you'll find some old important BIPs ( BIP34/65/66) defined as the following checkpoints:
For checkpoints, we can use either a block height or hash.
As you are creating a new chain from scratch, you can just use the genesis block height or hash to have these BIPs activated from the start:
consensus.BIP34Height = 0;
consensus.BIP34Hash =
uint256S("000001a9bbae8bb141c6941838bdacdbcf474b6ed28a0b18b2120b60a68f00ee");
consensus.BIP65Height = 0;
consensus.BIP66Height = 0;
Alongside the BIP activation time, the next 11 lines describe the activation rules (retargeting period, requisite activation threshold, version bit, fork start, and ending time) for deploying soft forks:
As we have edited the consensus.nMinerConfirmationWindow = 576;earlier,we can therefore deduce the nRuleChangeActivationThreshold value by multiplying the confirmation window by 95% to get the following:
nRuleChangeActivationThreshold=574;
For the rest of the rules, you can keep the bit element as it is and set the nStartTime and ntimeout as follows:
consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nStartTime = 0;
consensus.vDeployments[Consensus::DEPLOYMENT_CSV].nTimeout = "your genesis time stamp";
Or you can just keep the original values. Just afterwards, you'll find the following assumption:
consensus.defaultAssumeValid = uint256S("0x0000000000000000003b9ce759c2a087d52abc4266f8f4ebd6d768b89defa50a");
This assumes that the signatures in the ancestors of this block are valid. We'll need to set this hash to zero:
consensus.defaultAssumeValid = uint256S("0x00");
The preceding modifications should be performed for mainnet and testnet as well.
All right. Now our Readercoin is ready to be compiled and tested.