Skip to content

Commit bcd508f

Browse files
Add Simplicity Deployment structure
1 parent 1698454 commit bcd508f

File tree

8 files changed

+53
-4
lines changed

8 files changed

+53
-4
lines changed

src/chainparams.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,12 @@ class CMainParams : public CChainParams {
214214
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1628640000; // August 11th, 2021
215215
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 709632; // Approximately November 12th, 2021
216216

217+
// Simplicity
218+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24;
219+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
220+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
221+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay
222+
217223
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000002927cdceccbd5209e81e80db");
218224
consensus.defaultAssumeValid = uint256S("0x000000000000000000052d314a259755ca65944e68df6b12a067ea8f1f5a7091"); // 724466
219225

@@ -354,6 +360,12 @@ class CTestNetParams : public CChainParams {
354360
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1628640000; // August 11th, 2021
355361
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay
356362

363+
// Simplicity
364+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24;
365+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
366+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
367+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay
368+
357369
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000064728c7be6fe4b2f961");
358370
consensus.defaultAssumeValid = uint256S("0x00000000000163cfb1f97c4e4098a3692c8053ad9cab5ad9c86b338b5c00b8b7"); // 2143398
359371

@@ -514,6 +526,12 @@ class SigNetParams : public CChainParams {
514526
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
515527
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay
516528

529+
// Simplicity
530+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24;
531+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
532+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
533+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay
534+
517535
// ELEMENTS: copied from Main
518536
consensus.genesis_subsidy = 50*COIN;
519537
consensus.connect_genesis_outputs = false;
@@ -607,6 +625,12 @@ class CRegTestParams : public CChainParams {
607625
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nPeriod = 128; // test ability to change from default
608626
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nThreshold = 128;
609627

628+
// Simplicity
629+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24;
630+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
631+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
632+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay
633+
610634
consensus.nMinimumChainWork = uint256{};
611635
consensus.defaultAssumeValid = uint256{};
612636

@@ -1257,6 +1281,12 @@ class CLiquidV1Params : public CChainParams {
12571281
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nPeriod = 10080; // one week...
12581282
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nThreshold = 10080; // ...of 100% signalling
12591283

1284+
// Simplicity
1285+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24;
1286+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
1287+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
1288+
consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay
1289+
12601290
// Activated from block 1,000,000.
12611291
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].bit = 25;
12621292
// Allow blocksigners to delay activation.

src/consensus/params.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ enum DeploymentPos : uint16_t {
3434
DEPLOYMENT_TESTDUMMY,
3535
DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342)
3636
DEPLOYMENT_DYNA_FED, // Deployment of dynamic federation
37+
DEPLOYMENT_SIMPLICITY, // Deployment of Simplicity
3738
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
3839
MAX_VERSION_BITS_DEPLOYMENTS
3940
};
40-
constexpr bool ValidDeployment(DeploymentPos dep) { return DEPLOYMENT_TESTDUMMY <= dep && dep <= DEPLOYMENT_DYNA_FED; }
41+
constexpr bool ValidDeployment(DeploymentPos dep) { return DEPLOYMENT_TESTDUMMY <= dep && dep < MAX_VERSION_BITS_DEPLOYMENTS; }
4142

4243
/**
4344
* Struct for each individual consensus rule change using BIP9.

src/deploymentinfo.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B
1919
/*.name =*/ "dynafed",
2020
/*.gbt_force =*/ true,
2121
},
22+
{
23+
/*.name =*/ "simplicity",
24+
/*.gbt_force =*/ true,
25+
},
2226
};
2327

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

src/test/script_tests.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1653,7 +1653,7 @@ static std::vector<unsigned int> AllConsensusFlags()
16531653
{
16541654
std::vector<unsigned int> ret;
16551655

1656-
for (unsigned int i = 0; i < 128; ++i) {
1656+
for (unsigned int i = 0; i < 256; ++i) {
16571657
unsigned int flag = 0;
16581658
if (i & 1) flag |= SCRIPT_VERIFY_P2SH;
16591659
if (i & 2) flag |= SCRIPT_VERIFY_DERSIG;
@@ -1662,11 +1662,14 @@ static std::vector<unsigned int> AllConsensusFlags()
16621662
if (i & 16) flag |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY;
16631663
if (i & 32) flag |= SCRIPT_VERIFY_WITNESS;
16641664
if (i & 64) flag |= SCRIPT_VERIFY_TAPROOT;
1665+
if (i & 128) flag |= SCRIPT_VERIFY_SIMPLICITY;
16651666

16661667
// SCRIPT_VERIFY_WITNESS requires SCRIPT_VERIFY_P2SH
16671668
if (flag & SCRIPT_VERIFY_WITNESS && !(flag & SCRIPT_VERIFY_P2SH)) continue;
16681669
// SCRIPT_VERIFY_TAPROOT requires SCRIPT_VERIFY_WITNESS
16691670
if (flag & SCRIPT_VERIFY_TAPROOT && !(flag & SCRIPT_VERIFY_WITNESS)) continue;
1671+
// SCRIPT_VERIFY_SIMPLICITY requires SCRIPT_VERIFY_TAPROOT
1672+
if (flag & SCRIPT_VERIFY_SIMPLICITY && !(flag & SCRIPT_VERIFY_TAPROOT)) continue;
16701673

16711674
ret.push_back(flag);
16721675
}

src/test/transaction_tests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ static std::map<std::string, unsigned int> mapFlagNames = {
6464
{std::string("DISCOURAGE_UPGRADABLE_PUBKEYTYPE"), (unsigned int)SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE},
6565
{std::string("DISCOURAGE_OP_SUCCESS"), (unsigned int)SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS},
6666
{std::string("DISCOURAGE_UPGRADABLE_TAPROOT_VERSION"), (unsigned int)SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION},
67+
{std::string("SIMPLICITY"), (unsigned int)SCRIPT_VERIFY_SIMPLICITY},
6768
};
6869

6970
unsigned int ParseScriptFlags(std::string strFlags)

src/validation.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,6 +1072,10 @@ bool MemPoolAccept::PolicyScriptChecks(const ATMPArgs& args, Workspace& ws)
10721072
scriptVerifyFlags |= SCRIPT_SIGHASH_RANGEPROOF;
10731073
}
10741074

1075+
if (DeploymentActiveAfter(m_active_chainstate.m_chain.Tip(), args.m_chainparams.GetConsensus(), Consensus::DEPLOYMENT_SIMPLICITY)) {
1076+
scriptVerifyFlags |= SCRIPT_VERIFY_SIMPLICITY;
1077+
}
1078+
10751079
// Check input scripts and signatures.
10761080
// This is done last to help prevent CPU exhaustion denial-of-service attacks.
10771081
if (!CheckInputScripts(tx, state, m_view, scriptVerifyFlags, true, false, ws.m_precomputed_txdata)) {
@@ -2049,6 +2053,10 @@ static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consens
20492053
flags |= SCRIPT_SIGHASH_RANGEPROOF;
20502054
}
20512055

2056+
if (DeploymentActiveAfter(pindex->pprev, consensusparams, Consensus::DEPLOYMENT_SIMPLICITY)) {
2057+
flags |= SCRIPT_VERIFY_SIMPLICITY;
2058+
}
2059+
20522060
return flags;
20532061
}
20542062

test/functional/feature_taproot.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
CScriptOp,
3838
hash256,
3939
LEAF_VERSION_TAPSCRIPT,
40+
LEAF_VERSION_TAPSIMPLICITY,
4041
LegacySignatureMsg,
4142
LOCKTIME_THRESHOLD,
4243
MAX_SCRIPT_ELEMENT_SIZE,
@@ -1093,8 +1094,8 @@ def predict_sigops_ratio(n, dummy_size):
10931094

10941095
# Future leaf versions
10951096
for leafver in range(0, 0x100, 2):
1096-
if leafver == LEAF_VERSION_TAPSCRIPT or leafver == ANNEX_TAG:
1097-
# Skip the defined LEAF_VERSION_TAPSCRIPT, and the ANNEX_TAG which is not usable as leaf version
1097+
if leafver in [LEAF_VERSION_TAPSCRIPT, LEAF_VERSION_TAPSIMPLICITY, ANNEX_TAG]:
1098+
# Skip allocated tapleaf versions and the ANNEX_TAG which is not usable as leaf version
10981099
continue
10991100
scripts = [
11001101
("bare_c0", CScript([OP_NOP])),

test/functional/test_framework/script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
ANNEX_TAG = 0x50
3636

3737
LEAF_VERSION_TAPSCRIPT = 0xc4
38+
LEAF_VERSION_TAPSIMPLICITY = 0xbe
3839

3940
def hash160(s):
4041
return ripemd160(sha256(s))

0 commit comments

Comments
 (0)