mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-05 19:38:54 +02:00
Merge bitcoin/bitcoin#19438: Introduce deploymentstatus
e48826ad87tests: remove ComputeBlockVersion shortcut from versionbits tests (Anthony Towns)c5f36725e8[refactor] Move ComputeBlockVersion into VersionBitsCache (Anthony Towns)4a69b4dbe0[move-only] Move ComputeBlockVersion from validation to versionbits (Anthony Towns)0cfd6c6a8f[refactor] versionbits: make VersionBitsCache a full class (Anthony Towns)8ee3e0bed5[refactor] rpc/blockchain.cpp: SoftForkPushBack (Anthony Towns)92f48f360ddeploymentinfo: Add DeploymentName() (Anthony Towns)ea68b3a572[move-only] Rename versionbitsinfo to deploymentinfo (Anthony Towns)c64b2c6a0fscripted-diff: rename versionbitscache (Anthony Towns)de55304f6e[refactor] Add versionbits deployments to deploymentstatus.h (Anthony Towns)2b0d291da8[refactor] Add deploymentstatus.h (Anthony Towns)eccd736f3dversionbits: Use dedicated lock instead of cs_main (Anthony Towns)36a4ba0aaaversionbits: correct doxygen comments (Anthony Towns) Pull request description: Introduces helper functions to make it easy to bury future deployments, along the lines of the suggestion from [11398](https://github.com/bitcoin/bitcoin/pull/11398#issuecomment-335599326) "I would prefer it if a buried deployment wouldn't require all code paths that check the BIP9 status to require changing". This provides three functions: `DeploymentEnabled()` which tests if a deployment can ever be active, `DeploymentActiveAt()` which checks if a deployment should be enforced in the given block, and `DeploymentActiveAfter()` which checks if a deployment should be enforced in the block following the given block, and overloads all three to work both with buried deployments and versionbits deployments. This adds a dedicated lock for the versionbits cache, which is acquired internally by the versionbits functions, rather than relying on `cs_main`. It also moves moves versionbitscache into deploymentstatus to avoid a circular dependency with validation. ACKs for top commit: jnewbery: ACKe48826ad87gruve-p: ACKe48826ad87MarcoFalke: re-ACKe48826ad87🥈 Tree-SHA512: c846ba64436d36f8180046ad551d8b0d9e20509b9bc185aa2639055fc28803dd8ec2d6771ab337e80da0b40009ad959590d5772f84a0bf6199b65190d4155bed
This commit is contained in:
@@ -11,13 +11,25 @@
|
||||
|
||||
namespace Consensus {
|
||||
|
||||
enum DeploymentPos
|
||||
enum BuriedDeployment : int16_t
|
||||
{
|
||||
// buried deployments get negative values to avoid overlap with DeploymentPos
|
||||
DEPLOYMENT_HEIGHTINCB = std::numeric_limits<int16_t>::min(),
|
||||
DEPLOYMENT_CLTV,
|
||||
DEPLOYMENT_DERSIG,
|
||||
DEPLOYMENT_CSV,
|
||||
DEPLOYMENT_SEGWIT,
|
||||
};
|
||||
constexpr bool ValidDeployment(BuriedDeployment dep) { return DEPLOYMENT_HEIGHTINCB <= dep && dep <= DEPLOYMENT_SEGWIT; }
|
||||
|
||||
enum DeploymentPos : uint16_t
|
||||
{
|
||||
DEPLOYMENT_TESTDUMMY,
|
||||
DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342)
|
||||
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in versionbits.cpp
|
||||
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
|
||||
MAX_VERSION_BITS_DEPLOYMENTS
|
||||
};
|
||||
constexpr bool ValidDeployment(DeploymentPos dep) { return DEPLOYMENT_TESTDUMMY <= dep && dep <= DEPLOYMENT_TAPROOT; }
|
||||
|
||||
/**
|
||||
* Struct for each individual consensus rule change using BIP9.
|
||||
@@ -100,7 +112,25 @@ struct Params {
|
||||
*/
|
||||
bool signet_blocks{false};
|
||||
std::vector<uint8_t> signet_challenge;
|
||||
|
||||
int DeploymentHeight(BuriedDeployment dep) const
|
||||
{
|
||||
switch (dep) {
|
||||
case DEPLOYMENT_HEIGHTINCB:
|
||||
return BIP34Height;
|
||||
case DEPLOYMENT_CLTV:
|
||||
return BIP65Height;
|
||||
case DEPLOYMENT_DERSIG:
|
||||
return BIP66Height;
|
||||
case DEPLOYMENT_CSV:
|
||||
return CSVHeight;
|
||||
case DEPLOYMENT_SEGWIT:
|
||||
return SegwitHeight;
|
||||
} // no default case, so the compiler can warn about missing cases
|
||||
return std::numeric_limits<int>::max();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace Consensus
|
||||
|
||||
#endif // BITCOIN_CONSENSUS_PARAMS_H
|
||||
|
||||
Reference in New Issue
Block a user