2015-02-11 02:58:11 -08:00
|
|
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
|
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2015-03-21 10:15:31 -07:00
|
|
|
#ifndef BITCOIN_CONSENSUS_PARAMS_H
|
|
|
|
#define BITCOIN_CONSENSUS_PARAMS_H
|
2015-02-11 02:58:11 -08:00
|
|
|
|
|
|
|
#include "uint256.h"
|
|
|
|
|
|
|
|
namespace Consensus {
|
|
|
|
/**
|
|
|
|
* Parameters that influence chain consensus.
|
|
|
|
*/
|
|
|
|
struct Params {
|
|
|
|
uint256 hashGenesisBlock;
|
2016-06-13 11:23:55 -07:00
|
|
|
|
2016-06-14 14:16:34 -07:00
|
|
|
bool fCoinbaseMustBeProtected;
|
2016-06-13 11:23:55 -07:00
|
|
|
|
2016-04-18 23:50:52 -07:00
|
|
|
/** Needs to evenly divide MAX_SUBSIDY to avoid rounding errors. */
|
|
|
|
int nSubsidySlowStartInterval;
|
|
|
|
/**
|
|
|
|
* Shift based on a linear ramp for slow start:
|
|
|
|
*
|
2016-05-26 16:29:08 -07:00
|
|
|
* MAX_SUBSIDY*(t_s/2 + t_r) = MAX_SUBSIDY*t_h Coin balance
|
|
|
|
* t_s + t_r = t_h + t_c Block balance
|
2016-04-18 23:50:52 -07:00
|
|
|
*
|
|
|
|
* t_s = nSubsidySlowStartInterval
|
|
|
|
* t_r = number of blocks between end of slow start and first halving
|
|
|
|
* t_h = nSubsidyHalvingInterval
|
|
|
|
* t_c = SubsidySlowStartShift()
|
|
|
|
*/
|
|
|
|
int SubsidySlowStartShift() const { return nSubsidySlowStartInterval / 2; }
|
2015-02-11 02:58:11 -08:00
|
|
|
int nSubsidyHalvingInterval;
|
2016-09-21 12:02:36 -07:00
|
|
|
int GetLastFoundersRewardBlockHeight() const {
|
Merge: v1.0.4 into master (#42)
* Add getlocalsolps and getnetworksolps RPC calls, show them in getmininginfo
* Add benchmark for attempting decryption of notes
* Add benchmark for incrementing note witnesses
* Add -metricsui flag to toggle between persistent screen and rolling metrics
Defaults to true if stdout is a TTY, else false.
* Add -metricsrefreshtime option
* Only show metrics by default if stdout is a TTY
* Document metrics screen options
* Fix stale comment referencing upstream block interval
* Add checkpoint at block height 15000
* Added mainnet, testnet, and onion nodes
* Make command line option to show all debugging consistent with similar options
Most people expect a value of 1 to enable all for command line arguments.
However to do this for the -debug option you must type "-debug=".
This has been changed to allow "-debug=1" as well as "-debug=" to
enable all debug logging
* Update documentation to match the #4219 change
* Update help message to match the #4219 change
* Clarify that metrics options are only useful without -daemon and -printtoconsole
* Increase length of metrics divider
* Closes #1857. Fixes bug where tx spending only notes had priority of 0.
* Closes #1901. Increase default settings for the max block size when
mining and the amount of space available for priority transactions.
* Write witness caches when writing the best block
For steady-state operation, this reduces the average time between wallet disk
writes from once per block to once per hour.
On -rescan, witness caches are only written out at the end along with the best
block, increasing speed while ensuring that on-disk state is kept consistent.
Witness caches are now never recreated during a -reindex, on the assumption that
the blocks themselves are not changing (the chain is just being reconstructed),
and so the witnesses will remain valid.
Part of #1749.
* Add porter dev overrides for CC, CXX, MAKE, BUILD, HOST
* Apply miniupnpc patches to enable compilation on Solaris 11
These can be removed after the next MiniUPnP release.
Closes #1835.
* Closes #1903. Add fee parameter to z_sendmany.
* Add an upstream miniupnpc patch revision
* Metrics - Don't exclaim unless > 1
"You have validated 0 transactions!" sounds a little less enthusiastic that intended. Also, only says "1 transaction".
* Address review comments, tweak strings
* bash-completion: Adapt for 0.12 and 0.13
* separate completion for bitcoind and bitcoin-cli
* remove RPC support from bitcoind completion
* add completion for bitcoin-tx and bitcoin-qt
* rely on autoloading of completions
* Change function names to not clash with Bitcoin, apply to correct binaries
* Add bash completion files to Debian package
* Always bash-complete the default account
* Add Zcash RPC commands to CLI argument completion
* Fixes #1823. Witness anchors for input notes no longer cross block boundaries.
* Edit for grammar: "block chain"
At this point, I believe it is universally accepted that "blockchain" is one word, and should not be separated into two.
* Increase timeout as laptops on battery power have cpu throttling.
* Isolate verification to a `ProofVerifier` context object that allows verification behavior to be tuned by the caller.
* Regression test.
* Ensure cache contains valid entry when anchor is popped.
* Ensure ProofVerifier cannot be accidentally copied.
* Document behaviour of CWallet::SetBestChain
* WitnessAnchorData only needs to store one witness per JSOutPoint.
* Rename Dummy to Disabled.
* Add more tests for ProofVerifier.
* Fix indentation
* Generate JS for trydecryptnotes, make number of addresses a variable
* Add JS to second block to ensure witnesses are incremented
* ASSERT_TRUE -> ASSERT_FALSE
* Skip JoinSplit verification before the last checkpoint
Part of #1749
* Gather release notes from previous release to HEAD
Also update release-process.md to replace git shortlog command with
release-notes.py script.
* Add a reindex test that fails because of a bug in decrementing witness caches
Ref: https://github.com/zcash/zcash/pull/1904#issuecomment-265992988
* Make the test pass by fixing the bug!
* Only check cache validity for witnesses being incremented or decremented
Fixes the bug resulting from #1904.
* Check that E' points are actually in G2 by ensuring they are of order r.
* Fix bug in wallet tests
* Extract block-generation wallet test code into a function
* Rewrite reindex test to check beyond the max witness cache size
* Fix bug in IncrementNoteWitness()
* Update payment API docs to recommend -rescan for fixing witness errors
* Update version to 1.0.4
* Update man pages
* Release notes, authors, changelog
* Update seed nodes
* Bugfix #14 - getblocksubsidy RPC command is incorrect
2016-12-19 04:59:58 -08:00
|
|
|
//return nSubsidyHalvingInterval + SubsidySlowStartShift() - 1;
|
|
|
|
return 1; // Bugfix #14: getblocksubsidy RPC command is incorrect
|
2016-09-21 12:02:36 -07:00
|
|
|
}
|
2015-02-11 02:58:11 -08:00
|
|
|
/** Used to check majorities for block version upgrade */
|
|
|
|
int nMajorityEnforceBlockUpgrade;
|
|
|
|
int nMajorityRejectBlockOutdated;
|
|
|
|
int nMajorityWindow;
|
|
|
|
/** Proof of work parameters */
|
2015-03-25 12:00:32 -07:00
|
|
|
uint256 powLimit;
|
2015-02-11 02:58:11 -08:00
|
|
|
bool fPowAllowMinDifficultyBlocks;
|
2016-06-07 17:30:32 -07:00
|
|
|
int64_t nPowAveragingWindow;
|
|
|
|
int64_t nPowMaxAdjustDown;
|
|
|
|
int64_t nPowMaxAdjustUp;
|
2015-02-11 02:58:11 -08:00
|
|
|
int64_t nPowTargetSpacing;
|
2016-06-07 17:30:32 -07:00
|
|
|
int64_t AveragingWindowTimespan() const { return nPowAveragingWindow * nPowTargetSpacing; }
|
|
|
|
int64_t MinActualTimespan() const { return (AveragingWindowTimespan() * (100 - nPowMaxAdjustUp )) / 100; }
|
|
|
|
int64_t MaxActualTimespan() const { return (AveragingWindowTimespan() * (100 + nPowMaxAdjustDown)) / 100; }
|
2015-02-11 02:58:11 -08:00
|
|
|
};
|
|
|
|
} // namespace Consensus
|
|
|
|
|
2015-03-21 10:15:31 -07:00
|
|
|
#endif // BITCOIN_CONSENSUS_PARAMS_H
|