Skip to content

Commit 455c56b

Browse files
committed
consensus: add BIN-2024-000[34] deployment params
Activates OP_CHECKSIGFROMSTACK, OP_CHECKSIGFROMSTACKVERIFY, and OP_INTERNALKEY on regtest and signet. always active on regtest active from 2024-01-12 until 2034-01-12 on signet never active on testnet, mainnet
1 parent 6e60cf2 commit 455c56b

File tree

6 files changed

+81
-1
lines changed

6 files changed

+81
-1
lines changed

src/consensus/params.h

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ enum DeploymentPos : uint16_t {
3535
DEPLOYMENT_CHECKTEMPLATEVERIFY, // Deployment of CTV (BIP 119)
3636
DEPLOYMENT_ANYPREVOUT,
3737
DEPLOYMENT_OP_CAT,
38+
DEPLOYMENT_CHECKSIGFROMSTACK, // Deployment of OP_CHECKSIGFROMSTACK(VERIFY)
39+
DEPLOYMENT_INTERNALKEY, // Deployment of OP_INTERNALKEY
3840
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
3941
MAX_VERSION_BITS_DEPLOYMENTS
4042
};

src/deploymentinfo.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B
2727
/*.name =*/ "opcat",
2828
/*.gbt_force =*/ true,
2929
},
30+
{
31+
/*.name =*/ "lnhance",
32+
/*.gbt_force =*/ true,
33+
},
3034
};
3135

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

src/kernel/chainparams.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ class CMainParams : public CChainParams {
137137

138138
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000063c4ebd298db40af57541800");
139139
consensus.defaultAssumeValid = uint256S("0x000000000000000000026811d149d4d261995ec5b3f64f439a0a10e1a464af9a"); // 824000
140+
consensus.vDeployments[Consensus::DEPLOYMENT_CHECKSIGFROMSTACK] = SetupDeployment{.year = 2024, .number = 3, .revision = 1, .never = true};
141+
consensus.vDeployments[Consensus::DEPLOYMENT_INTERNALKEY] = SetupDeployment{.year = 2024, .number = 4, .revision = 1, .never = true};
142+
143+
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000044a50fe819c39ad624021859");
144+
consensus.defaultAssumeValid = uint256S("0x000000000000000000035c3f0d31e71a5ee24c5aaf3354689f65bd7b07dee632"); // 784000
140145

141146
/**
142147
* The message start string is designed to be unlikely to occur in normal data.
@@ -250,6 +255,11 @@ class CTestNetParams : public CChainParams {
250255

251256
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000c59b14e264ba6c15db9");
252257
consensus.defaultAssumeValid = uint256S("0x000000000001323071f38f21ea5aae529ece491eadaccce506a59bcc2d968917"); // 2550000
258+
consensus.vDeployments[Consensus::DEPLOYMENT_CHECKSIGFROMSTACK] = SetupDeployment{.year = 2024, .number = 3, .revision = 1, .never = true};
259+
consensus.vDeployments[Consensus::DEPLOYMENT_INTERNALKEY] = SetupDeployment{.year = 2024, .number = 4, .revision = 1, .never = true};
260+
261+
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000977edb0244170858d07");
262+
consensus.defaultAssumeValid = uint256S("0x0000000000000021bc50a89cde4870d4a81ffe0153b3c8de77b435a2fd3f6761"); // 2429000
253263

254264
pchMessageStart[0] = 0x0b;
255265
pchMessageStart[1] = 0x11;
@@ -397,6 +407,20 @@ class SigNetParams : public CChainParams {
397407
.activate = 0x62000100,
398408
.abandon = 0x42000100,
399409
};
410+
consensus.vDeployments[Consensus::DEPLOYMENT_CHECKSIGFROMSTACK] = SetupDeployment{
411+
.year = 2024,
412+
.number = 3,
413+
.revision = 1,
414+
.start = 1705046400, // 2024-01-12
415+
.timeout = 2020665600, // 2034-01-12
416+
};
417+
consensus.vDeployments[Consensus::DEPLOYMENT_INTERNALKEY] = SetupDeployment{
418+
.year = 2024,
419+
.number = 4,
420+
.revision = 1,
421+
.start = 1705046400, // 2024-01-12
422+
.timeout = 2020665600, // 2034-01-12
423+
};
400424

401425
RenounceDeployments(options.renounce, consensus.vDeployments);
402426

@@ -472,6 +496,10 @@ class CRegTestParams : public CChainParams
472496
consensus.vDeployments[Consensus::DEPLOYMENT_CHECKTEMPLATEVERIFY] = SetupDeployment{.activate = 0x60007700, .abandon = 0x40007700, .always = true};
473497
consensus.vDeployments[Consensus::DEPLOYMENT_ANYPREVOUT] = SetupDeployment{.activate = 0x60007600, .abandon = 0x40007600, .always = true};
474498
consensus.vDeployments[Consensus::DEPLOYMENT_OP_CAT] = SetupDeployment{.activate = 0x62000100, .abandon = 0x42000100, .always = true};
499+
500+
consensus.vDeployments[Consensus::DEPLOYMENT_CHECKSIGFROMSTACK] = SetupDeployment{.year = 2024, .number = 3, .revision = 1, .always = true};
501+
consensus.vDeployments[Consensus::DEPLOYMENT_INTERNALKEY] = SetupDeployment{.year = 2024, .number = 4, .revision = 1, .always = true};
502+
475503
consensus.nMinimumChainWork = uint256{};
476504
consensus.defaultAssumeValid = uint256{};
477505

src/rpc/blockchain.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1334,6 +1334,8 @@ UniValue DeploymentInfo(const CBlockIndex* blockindex, const ChainstateManager&
13341334
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_CHECKTEMPLATEVERIFY);
13351335
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_ANYPREVOUT);
13361336
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_OP_CAT);
1337+
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_CHECKSIGFROMSTACK);
1338+
SoftForkDescPushBack(blockindex, softforks, chainman, Consensus::DEPLOYMENT_INTERNALKEY);
13371339
return softforks;
13381340
}
13391341
} // anon namespace

src/validation.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,8 @@ bool MemPoolAccept::PolicyScriptChecks(const ATMPArgs& args, Workspace& ws)
10671067
{ Consensus::DEPLOYMENT_CHECKTEMPLATEVERIFY, SCRIPT_VERIFY_DISCOURAGE_CHECK_TEMPLATE_VERIFY_HASH },
10681068
{ Consensus::DEPLOYMENT_ANYPREVOUT, SCRIPT_VERIFY_DISCOURAGE_ANYPREVOUT },
10691069
{ Consensus::DEPLOYMENT_OP_CAT, SCRIPT_VERIFY_DISCOURAGE_OP_CAT },
1070+
{ Consensus::DEPLOYMENT_INTERNALKEY, SCRIPT_VERIFY_DISCOURAGE_INTERNALKEY },
1071+
{ Consensus::DEPLOYMENT_CHECKSIGFROMSTACK, SCRIPT_VERIFY_DISCOURAGE_CHECKSIGFROMSTACK },
10701072
});
10711073

10721074
// Check input scripts and signatures.
@@ -2172,6 +2174,16 @@ unsigned int GetBlockScriptFlags(const CBlockIndex& block_index, const Chainstat
21722174
flags |= SCRIPT_VERIFY_OP_CAT;
21732175
}
21742176

2177+
// Enforce CHECKSIGFROMSTACK(VERIFY) (BIN-2024-0003)
2178+
if (DeploymentActiveAt(block_index, chainman, Consensus::DEPLOYMENT_CHECKSIGFROMSTACK)) {
2179+
flags |= SCRIPT_VERIFY_CHECKSIGFROMSTACK;
2180+
}
2181+
2182+
// Process INTERNALKEY (BIN-2024-0004)
2183+
if (DeploymentActiveAt(block_index, chainman, Consensus::DEPLOYMENT_INTERNALKEY)) {
2184+
flags |= SCRIPT_VERIFY_INTERNALKEY;
2185+
}
2186+
21752187
return flags;
21762188
}
21772189

test/functional/rpc_blockchain.py

+33-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def check_signalling_deploymentinfo_result(self, gdi_result, height, blockhash):
196196
assert_equal(gdi_result, {
197197
"hash": blockhash,
198198
"height": height,
199-
"script_flags": ["ANYPREVOUT","CHECKLOCKTIMEVERIFY","CHECKSEQUENCEVERIFY","DEFAULT_CHECK_TEMPLATE_VERIFY_HASH","DERSIG","NULLDUMMY","OP_CAT","P2SH","TAPROOT","WITNESS"],
199+
"script_flags": ["ANYPREVOUT","CHECKLOCKTIMEVERIFY","CHECKSEQUENCEVERIFY","DEFAULT_CHECK_TEMPLATE_VERIFY_HASH","DERSIG","NULLDUMMY","OP_CAT","LNHANCE","P2SH","TAPROOT","WITNESS"],
200200
"deployments": {
201201
'bip34': {'type': 'buried', 'active': True, 'height': 2},
202202
'bip66': {'type': 'buried', 'active': True, 'height': 3},
@@ -261,6 +261,38 @@ def check_signalling_deploymentinfo_result(self, gdi_result, height, blockhash):
261261
'height': 0,
262262
'active': True,
263263
},
264+
'checksigfromstack': {
265+
'type': 'heretical',
266+
'heretical': {
267+
'year': 2024,
268+
'number': 3,
269+
'revision': 1,
270+
'start_time': -1,
271+
'timeout': 0x7fffffffffffffff, # testdummy does not have a timeout so is set to the max int64 value
272+
'period': 144,
273+
'status': 'active',
274+
'status_next': 'active',
275+
'since': 0,
276+
},
277+
'active': True,
278+
'height': 0,
279+
},
280+
'internalkey': {
281+
'type': 'heretical',
282+
'heretical': {
283+
'year': 2024,
284+
'number': 4,
285+
'revision': 1,
286+
'start_time': -1,
287+
'timeout': 0x7fffffffffffffff, # testdummy does not have a timeout so is set to the max int64 value
288+
'period': 144,
289+
'status': 'active',
290+
'status_next': 'active',
291+
'since': 0,
292+
},
293+
'active': True,
294+
'height': 0,
295+
},
264296
}
265297
})
266298

0 commit comments

Comments
 (0)