From 07a45ba058e58c983713975143257f0d9f921116 Mon Sep 17 00:00:00 2001 From: Pablo Greco Date: Tue, 7 Feb 2023 16:56:15 -0300 Subject: [PATCH 1/2] Avoid regenerating the full parameters when dynafed is always active --- src/dynafed.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/dynafed.cpp b/src/dynafed.cpp index 5ef34edcbd2..04577ac353d 100644 --- a/src/dynafed.cpp +++ b/src/dynafed.cpp @@ -52,6 +52,10 @@ DynaFedParamEntry ComputeNextBlockFullCurrentParameters(const CBlockIndex* pinde epoch_start_height -= epoch_length; } + if (consensus.genesis_style == "elements" && epoch_start_height == 0 && next_height > 1 && consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].nStartTime == Consensus::BIP9Deployment::ALWAYS_ACTIVE) { + // when starting in dynafed mode, the full parameters are stored in block 1 instead of 0 + epoch_start_height = 1; + } // We need to put in place the previous epoch's current which // may be pre-dynafed params const CBlockIndex* p_epoch_start = pindexPrev->GetAncestor(epoch_start_height); From 4cbe3d4322bad111b58e3d0886773b103c0b0287 Mon Sep 17 00:00:00 2001 From: Pablo Greco Date: Tue, 7 Feb 2023 16:57:11 -0300 Subject: [PATCH 2/2] Allow starting regtest networks with p2wsh peg-in addresses --- src/chainparams.cpp | 2 ++ src/chainparamsbase.cpp | 1 + src/consensus/params.h | 1 + src/dynafed.cpp | 14 +++++++++----- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 7e13d54ffab..992d58ece84 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -862,6 +862,7 @@ class CCustomParams : public CRegTestParams { const CScript default_script(CScript() << OP_TRUE); consensus.fedpegScript = StrHexToScriptWithDefault(args.GetArg("-fedpegscript", ""), default_script); + consensus.start_p2wsh_script = args.GetArg("-con_start_p2wsh_script", consensus.start_p2wsh_script); // Calculate pegged Bitcoin asset std::vector commit = CommitToArguments(consensus, strNetworkID); @@ -1460,6 +1461,7 @@ class CLiquidV1TestParams : public CLiquidV1Params { if (args.IsArgSet("-fedpegscript")) { consensus.fedpegScript = StrHexToScriptWithDefault(args.GetArg("-fedpegscript", ""), CScript()); } + consensus.start_p2wsh_script = args.GetArg("-con_start_p2wsh_script", consensus.start_p2wsh_script); consensus.total_valid_epochs = args.GetArg("-total_valid_epochs", consensus.total_valid_epochs); diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp index 35aa921cd92..9e1794f026e 100644 --- a/src/chainparamsbase.cpp +++ b/src/chainparamsbase.cpp @@ -60,6 +60,7 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman) argsman.AddArg("-dynamic_epoch_length", "Per-chain parameter that sets how many blocks dynamic federation voting and enforcement are in effect for.", ArgsManager::ALLOW_ANY, OptionsCategory::ELEMENTS); argsman.AddArg("-total_valid_epochs", "Per-chain parameter that sets how long a particular fedpegscript is in effect for.", ArgsManager::ALLOW_ANY, OptionsCategory::ELEMENTS); argsman.AddArg("-evbparams=deployment:start:end:period:threshold", "Use given start/end times for specified version bits deployment (regtest or custom only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::ELEMENTS); + argsman.AddArg("-con_start_p2wsh_script", "Create p2wsh addresses when starting in dynafed mode (regtest or custom only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::ELEMENTS); // END ELEMENTS // } diff --git a/src/consensus/params.h b/src/consensus/params.h index b5b7cfc1d0d..d8eb4b435c9 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -173,6 +173,7 @@ struct Params { // default 1 to not break legacy chains implicitly. size_t total_valid_epochs = 1; bool elements_mode = false; + bool start_p2wsh_script = false; }; } // namespace Consensus diff --git a/src/dynafed.cpp b/src/dynafed.cpp index 04577ac353d..8ef680e2962 100644 --- a/src/dynafed.cpp +++ b/src/dynafed.cpp @@ -73,11 +73,15 @@ DynaFedParamEntry ComputeNextBlockFullCurrentParameters(const CBlockIndex* pinde uint256 fedpegscript_redeemscript; CSHA256().Write(consensus.fedpegScript.data(), consensus.fedpegScript.size()).Finalize(fedpegscript_redeemscript.begin()); CScript fedpeg_p2sw = CScript() << OP_0 << ToByteVector(fedpegscript_redeemscript); - uint160 fedpeg_p2sh(Hash160(fedpeg_p2sw)); - CScript sh_wsh_fedpeg_program = CScript() << OP_HASH160 << ToByteVector(fedpeg_p2sh) << OP_EQUAL; - - // Put them in winning proposal - winning_proposal = DynaFedParamEntry(p2wsh_signblock_script, consensus.max_block_signature_size, sh_wsh_fedpeg_program, consensus.fedpegScript, consensus.first_extension_space); + if (consensus.start_p2wsh_script) { + winning_proposal = DynaFedParamEntry(p2wsh_signblock_script, consensus.max_block_signature_size, fedpeg_p2sw, consensus.fedpegScript, consensus.first_extension_space); + } else { + uint160 fedpeg_p2sh(Hash160(fedpeg_p2sw)); + CScript sh_wsh_fedpeg_program = CScript() << OP_HASH160 << ToByteVector(fedpeg_p2sh) << OP_EQUAL; + + // Put them in winning proposal + winning_proposal = DynaFedParamEntry(p2wsh_signblock_script, consensus.max_block_signature_size, sh_wsh_fedpeg_program, consensus.fedpegScript, consensus.first_extension_space); + } } else { winning_proposal = p_epoch_start->dynafed_params().m_current; }