Skip to content

Commit 260bb47

Browse files
darosiorinstagibbs
andcommitted
chainparams: introduce a deployment for OP_TEMPLATEHASH
The deployment is never active on mainnet or testnet. Activation parameters are intentionally left to be defined eventually and out of scope for this patchset. The deployment is always active on regtest, allowing us to extensively test expected behaviour of the proposed operation using the functional test suite. Co-Authored-By: Greg Sanders <[email protected]>
1 parent 011a8c5 commit 260bb47

File tree

5 files changed

+52
-1
lines changed

5 files changed

+52
-1
lines changed

src/consensus/params.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_
3333
enum DeploymentPos : uint16_t {
3434
DEPLOYMENT_TESTDUMMY,
3535
DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342)
36+
DEPLOYMENT_TEMPLATEHASH,
3637
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
3738
MAX_VERSION_BITS_DEPLOYMENTS
3839
};

src/deploymentinfo.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ const std::array<VBDeploymentInfo,Consensus::MAX_VERSION_BITS_DEPLOYMENTS> Versi
1717
.name = "taproot",
1818
.gbt_optional_rule = true,
1919
},
20+
VBDeploymentInfo{
21+
.name = "templatehash",
22+
.gbt_optional_rule = true,
23+
}
2024
};
2125

2226
std::string DeploymentName(Consensus::BuriedDeployment dep)

src/kernel/chainparams.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ class CMainParams : public CChainParams {
118118
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1815; // 90%
119119
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016;
120120

121+
// Deployment of OP_TEMPLATEHASH
122+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].bit = 3;
123+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
124+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
125+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].min_activation_height = 0;
126+
121127
consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000b1f3b93b65b16d035a82be84"};
122128
consensus.defaultAssumeValid = uint256{"00000000000000000001b658dd1120e82e66d2790811f89ede9742ada3ed6d77"}; // 886157
123129

@@ -232,6 +238,12 @@ class CTestNetParams : public CChainParams {
232238
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1512; // 75%
233239
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016;
234240

241+
// Deployment of OP_TEMPLATEHASH
242+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].bit = 3;
243+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
244+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
245+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].min_activation_height = 0;
246+
235247
consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000000015f5e0c9f13455b0eb17"};
236248
consensus.defaultAssumeValid = uint256{"00000000000003fc7967410ba2d0a8a8d50daedc318d43e8baf1a9782c236a57"}; // 3974606
237249

@@ -328,6 +340,12 @@ class CTestNet4Params : public CChainParams {
328340
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1512; // 75%
329341
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016;
330342

343+
// Deployment of OP_TEMPLATEHASH
344+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].bit = 3;
345+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
346+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
347+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].min_activation_height = 0;
348+
331349
consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000000001d6dce8651b6094e4c1"};
332350
consensus.defaultAssumeValid = uint256{"0000000000003ed4f08dbdf6f7d6b271a6bcffce25675cb40aa9fa43179a89f3"}; // 72600
333351

@@ -462,6 +480,12 @@ class SigNetParams : public CChainParams {
462480
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1815; // 90%
463481
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016;
464482

483+
// Deployment of OP_TEMPLATEHASH
484+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].bit = 3;
485+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
486+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
487+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].min_activation_height = 0;
488+
465489
// message start is defined as the first 4 bytes of the sha256d of the block script
466490
HashWriter h{};
467491
h << consensus.signet_challenge;
@@ -539,6 +563,14 @@ class CRegTestParams : public CChainParams
539563
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 108; // 75%
540564
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 144;
541565

566+
// Deployment of OP_TEMPLATEHASH
567+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].bit = 3;
568+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
569+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
570+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].min_activation_height = 0; // No activation delay
571+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].threshold = 108; // 75%
572+
consensus.vDeployments[Consensus::DEPLOYMENT_TEMPLATEHASH].period = 144;
573+
542574
consensus.nMinimumChainWork = uint256{};
543575
consensus.defaultAssumeValid = uint256{};
544576

src/rpc/blockchain.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,7 @@ UniValue DeploymentInfo(const CBlockIndex* blockindex, const ChainstateManager&
14231423
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_SEGWIT);
14241424
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_TESTDUMMY);
14251425
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_TAPROOT);
1426+
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_TEMPLATEHASH);
14261427
return softforks;
14271428
}
14281429
} // anon namespace

test/functional/rpc_blockchain.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,20 @@ def check_signalling_deploymentinfo_result(self, gdi_result, height, blockhash,
252252
},
253253
'height': 0,
254254
'active': True
255-
}
255+
},
256+
'templatehash': {
257+
'type': 'bip9',
258+
'height': 0,
259+
'active': True,
260+
'bip9': {
261+
'start_time': -1,
262+
'timeout': 9223372036854775807,
263+
'min_activation_height': 0,
264+
'status': 'active',
265+
'since': 0,
266+
'status_next': 'active'
267+
}
268+
},
256269
}
257270
})
258271

0 commit comments

Comments
 (0)