diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 0d5081da2e..b6ba459648 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -609,7 +609,7 @@ class CCustomParams : public CRegTestParams { } else if (consensus.genesis_style == "elements") { // Intended compatibility with Liquid v1 and elements-0.14.1 std::vector commit = CommitToArguments(consensus, strNetworkID); - genesis = CreateGenesisBlock(consensus, CScript(commit), CScript(OP_RETURN), 1296688602, 2, 0x207fffff, 1, 0); + genesis = CreateGenesisBlock(consensus, CScript() << commit, CScript(OP_RETURN), 1296688602, 2, 0x207fffff, 1, 0); if (initialFreeCoins != 0 || initial_reissuance_tokens != 0) { AppendInitialIssuance(genesis, COutPoint(uint256(commit), 0), parentGenesisBlockHash, (initialFreeCoins > 0) ? 1 : 0, initialFreeCoins, (initial_reissuance_tokens > 0) ? 1 : 0, initial_reissuance_tokens, CScript() << OP_TRUE); } @@ -762,7 +762,7 @@ public: consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; // Finally, create genesis block - genesis = CreateGenesisBlock(consensus, CScript(commit), CScript(OP_RETURN), 1296688602, 2, 0x207fffff, 1, 0); + genesis = CreateGenesisBlock(consensus, CScript() << commit, CScript(OP_RETURN), 1296688602, 2, 0x207fffff, 1, 0); consensus.hashGenesisBlock = genesis.GetHash(); assert(consensus.hashGenesisBlock.GetHex() == "1466275836220db2944ca059a3a10ef6fd2ea684b0688d2c379296888a206003"); } diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index 379ce5483c..77a8180712 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -418,7 +418,8 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) if (amount > 0) { - CTxOut txout(::policyAsset, amount, static_cast(std::vector(24, 0))); + // Assumes a p2pkh script size + CTxOut txout(::policyAsset, amount, CScript() << std::vector(24, 0)); txDummy.vout.push_back(txout); fDust |= IsDust(txout, model->node().getDustRelayFee()); } @@ -509,7 +510,8 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) // Never create dust outputs; if we would, just add the dust to the fee. if (nChange > 0 && nChange < MIN_CHANGE) { - CTxOut txout(::policyAsset, nChange, static_cast(std::vector(24, 0))); + // Assumes a p2pkh script size + CTxOut txout(::policyAsset, nChange, CScript() << std::vector(24, 0)); if (IsDust(txout, model->node().getDustRelayFee())) { nPayFee += nChange; diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index 01be38e85a..84c292fa2e 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -1204,7 +1204,7 @@ bool EvalScript(std::vector >& stack, const CScript& // Drop the signature in pre-segwit scripts but not segwit scripts if (sigversion == SigVersion::BASE) { - int found = FindAndDelete(scriptCode, CScript(vchSig)); + int found = FindAndDelete(scriptCode, CScript() << vchSig); if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE)) return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE); } @@ -1270,7 +1270,7 @@ bool EvalScript(std::vector >& stack, const CScript& { valtype& vchSig = stacktop(-isig-k); if (sigversion == SigVersion::BASE) { - int found = FindAndDelete(scriptCode, CScript(vchSig)); + int found = FindAndDelete(scriptCode, CScript() << vchSig); if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE)) return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE); } diff --git a/src/script/script.h b/src/script/script.h index 7ce80f4496..4eb03c930a 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -449,7 +449,9 @@ public: explicit CScript(opcodetype b) { operator<<(b); } explicit CScript(const CScriptNum& b) { operator<<(b); } - explicit CScript(const std::vector& b) { operator<<(b); } + // delete non-existent constructor to defend against future introduction + // e.g. via prevector + explicit CScript(const std::vector& b) = delete; CScript& operator<<(int64_t b) { return push_int64(b); }