aboutsummaryrefslogtreecommitdiff
path: root/src/signet.cpp
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2020-09-22 16:06:02 +0200
committerMarcoFalke <falke.marco@gmail.com>2020-09-22 22:31:31 +0200
commit77771a03df6c5d940b340d15eb88f2ac9a29c13a (patch)
tree86a77309fb4805f15d5e8ee44858e44d020ca937 /src/signet.cpp
parentfa2ad5dae17b237641b8ece0e68ffcdd79d543bf (diff)
downloadbitcoin-77771a03df6c5d940b340d15eb88f2ac9a29c13a.tar.xz
refactor: Remove SignetTxs::m_valid and use optional instead
m_valid implies the block solution has been checked, which is not the case. It only means the txs could be parsed. C++17 comes with std::optional, so just use that instead.
Diffstat (limited to 'src/signet.cpp')
-rw-r--r--src/signet.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/signet.cpp b/src/signet.cpp
index a29f89b58e..e68f031aa4 100644
--- a/src/signet.cpp
+++ b/src/signet.cpp
@@ -65,7 +65,7 @@ static uint256 ComputeModifiedMerkleRoot(const CMutableTransaction& cb, const CB
return ComputeMerkleRoot(std::move(leaves));
}
-SignetTxs SignetTxs::Create(const CBlock& block, const CScript& challenge)
+Optional<SignetTxs> SignetTxs::Create(const CBlock& block, const CScript& challenge)
{
CMutableTransaction tx_to_spend;
tx_to_spend.nVersion = 0;
@@ -83,12 +83,12 @@ SignetTxs SignetTxs::Create(const CBlock& block, const CScript& challenge)
// responses from block coinbase tx
// find and delete signet signature
- if (block.vtx.empty()) return invalid(); // no coinbase tx in block; invalid
+ if (block.vtx.empty()) return nullopt; // no coinbase tx in block; invalid
CMutableTransaction modified_cb(*block.vtx.at(0));
const int cidx = GetWitnessCommitmentIndex(block);
if (cidx == NO_WITNESS_COMMITMENT) {
- return invalid(); // require a witness commitment
+ return nullopt; // require a witness commitment
}
CScript& witness_commitment = modified_cb.vout.at(cidx).scriptPubKey;
@@ -101,9 +101,9 @@ SignetTxs SignetTxs::Create(const CBlock& block, const CScript& challenge)
VectorReader v(SER_NETWORK, INIT_PROTO_VERSION, signet_solution, 0);
v >> tx_spending.vin[0].scriptSig;
v >> tx_spending.vin[0].scriptWitness.stack;
- if (!v.empty()) return invalid(); // extraneous data encountered
+ if (!v.empty()) return nullopt; // extraneous data encountered
} catch (const std::exception&) {
- return invalid(); // parsing error
+ return nullopt; // parsing error
}
}
uint256 signet_merkle = ComputeModifiedMerkleRoot(modified_cb, block);
@@ -117,7 +117,7 @@ SignetTxs SignetTxs::Create(const CBlock& block, const CScript& challenge)
tx_to_spend.vin[0].scriptSig << block_data;
tx_spending.vin[0].prevout = COutPoint(tx_to_spend.GetHash(), 0);
- return {tx_to_spend, tx_spending};
+ return SignetTxs{tx_to_spend, tx_spending};
}
// Signet block solution checker
@@ -129,19 +129,19 @@ bool CheckSignetBlockSolution(const CBlock& block, const Consensus::Params& cons
}
const CScript challenge(consensusParams.signet_challenge.begin(), consensusParams.signet_challenge.end());
- const SignetTxs signet_txs(block, challenge);
+ const Optional<SignetTxs> signet_txs = SignetTxs::Create(block, challenge);
- if (!signet_txs.m_valid) {
+ if (!signet_txs) {
LogPrint(BCLog::VALIDATION, "CheckSignetBlockSolution: Errors in block (block solution parse failure)\n");
return false;
}
- const CScript& scriptSig = signet_txs.m_to_sign.vin[0].scriptSig;
- const CScriptWitness& witness = signet_txs.m_to_sign.vin[0].scriptWitness;
+ const CScript& scriptSig = signet_txs->m_to_sign.vin[0].scriptSig;
+ const CScriptWitness& witness = signet_txs->m_to_sign.vin[0].scriptWitness;
- TransactionSignatureChecker sigcheck(&signet_txs.m_to_sign, /*nIn=*/ 0, /*amount=*/ signet_txs.m_to_spend.vout[0].nValue);
+ TransactionSignatureChecker sigcheck(&signet_txs->m_to_sign, /*nIn=*/ 0, /*amount=*/ signet_txs->m_to_spend.vout[0].nValue);
- if (!VerifyScript(scriptSig, signet_txs.m_to_spend.vout[0].scriptPubKey, &witness, BLOCK_SCRIPT_VERIFY_FLAGS, sigcheck)) {
+ if (!VerifyScript(scriptSig, signet_txs->m_to_spend.vout[0].scriptPubKey, &witness, BLOCK_SCRIPT_VERIFY_FLAGS, sigcheck)) {
LogPrint(BCLog::VALIDATION, "CheckSignetBlockSolution: Errors in block (block solution invalid)\n");
return false;
}