Refactor HaveShieldedRequirements to use tl::expected (example with a void T)
and rename it to CheckShieldedRequirements. Signed-off-by: Daira Hopwood <jacaranda.org>
This commit is contained in:
parent
4de0d85abf
commit
d502714326
|
@ -1003,7 +1003,7 @@ CAmount CCoinsViewCache::GetValueIn(const CTransaction& tx) const
|
|||
return nResult;
|
||||
}
|
||||
|
||||
std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(const CTransaction& tx) const
|
||||
tl::expected<void, UnsatisfiedShieldedReq> CCoinsViewCache::CheckShieldedRequirements(const CTransaction& tx) const
|
||||
{
|
||||
boost::unordered_map<uint256, SproutMerkleTree, SaltedTxidHasher> intermediates;
|
||||
|
||||
|
@ -1019,7 +1019,7 @@ std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(
|
|||
TracingWarn("consensus", "Sprout double-spend detected",
|
||||
"txid", txid.c_str(),
|
||||
"nf", nf.c_str());
|
||||
return UnsatisfiedShieldedReq::SproutDuplicateNullifier;
|
||||
return tl::unexpected(UnsatisfiedShieldedReq::SproutDuplicateNullifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1033,7 +1033,7 @@ std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(
|
|||
TracingWarn("consensus", "Transaction uses unknown Sprout anchor",
|
||||
"txid", txid.c_str(),
|
||||
"anchor", anchor.c_str());
|
||||
return UnsatisfiedShieldedReq::SproutUnknownAnchor;
|
||||
return tl::unexpected(UnsatisfiedShieldedReq::SproutUnknownAnchor);
|
||||
}
|
||||
|
||||
for (const uint256& commitment : joinsplit.commitments)
|
||||
|
@ -1051,7 +1051,7 @@ std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(
|
|||
TracingWarn("consensus", "Sapling double-spend detected",
|
||||
"txid", txid.c_str(),
|
||||
"nf", nf.c_str());
|
||||
return UnsatisfiedShieldedReq::SaplingDuplicateNullifier;
|
||||
return tl::unexpected(UnsatisfiedShieldedReq::SaplingDuplicateNullifier);
|
||||
}
|
||||
|
||||
SaplingMerkleTree tree;
|
||||
|
@ -1061,7 +1061,7 @@ std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(
|
|||
TracingWarn("consensus", "Transaction uses unknown Sapling anchor",
|
||||
"txid", txid.c_str(),
|
||||
"anchor", anchor.c_str());
|
||||
return UnsatisfiedShieldedReq::SaplingUnknownAnchor;
|
||||
return tl::unexpected(UnsatisfiedShieldedReq::SaplingUnknownAnchor);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1072,7 +1072,7 @@ std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(
|
|||
TracingWarn("consensus", "Orchard double-spend detected",
|
||||
"txid", txid.c_str(),
|
||||
"nf", nf.c_str());
|
||||
return UnsatisfiedShieldedReq::OrchardDuplicateNullifier;
|
||||
return tl::unexpected(UnsatisfiedShieldedReq::OrchardDuplicateNullifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1085,11 +1085,11 @@ std::optional<UnsatisfiedShieldedReq> CCoinsViewCache::HaveShieldedRequirements(
|
|||
TracingWarn("consensus", "Transaction uses unknown Orchard anchor",
|
||||
"txid", txid.c_str(),
|
||||
"anchor", anchor.c_str());
|
||||
return UnsatisfiedShieldedReq::OrchardUnknownAnchor;
|
||||
return tl::unexpected(UnsatisfiedShieldedReq::OrchardUnknownAnchor);
|
||||
}
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
return {};
|
||||
}
|
||||
|
||||
bool CCoinsViewCache::HaveInputs(const CTransaction& tx) const
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include <boost/unordered_map.hpp>
|
||||
#include <expected.hpp>
|
||||
#include "zcash/History.hpp"
|
||||
#include "zcash/IncrementalMerkleTree.hpp"
|
||||
|
||||
|
@ -613,7 +614,7 @@ public:
|
|||
bool HaveInputs(const CTransaction& tx) const;
|
||||
|
||||
//! Check whether all joinsplit and sapling spend requirements (anchors/nullifiers) are satisfied
|
||||
std::optional<UnsatisfiedShieldedReq> HaveShieldedRequirements(const CTransaction& tx) const;
|
||||
tl::expected<void, UnsatisfiedShieldedReq> CheckShieldedRequirements(const CTransaction& tx) const;
|
||||
|
||||
//! Return priority of tx at height nHeight
|
||||
double GetPriority(const CTransaction &tx, int nHeight) const;
|
||||
|
|
|
@ -2570,11 +2570,11 @@ bool CheckTxShieldedInputs(
|
|||
int dosLevel)
|
||||
{
|
||||
// Are the shielded spends' requirements met?
|
||||
auto unmetShieldedReq = view.HaveShieldedRequirements(tx);
|
||||
if (unmetShieldedReq) {
|
||||
auto unmetShieldedReq = view.CheckShieldedRequirements(tx);
|
||||
if (!unmetShieldedReq.has_value()) {
|
||||
auto txid = tx.GetHash().ToString();
|
||||
auto rejectCode = ShieldedReqRejectCode(*unmetShieldedReq);
|
||||
auto rejectReason = ShieldedReqRejectReason(*unmetShieldedReq);
|
||||
auto rejectCode = ShieldedReqRejectCode(unmetShieldedReq.error());
|
||||
auto rejectReason = ShieldedReqRejectReason(unmetShieldedReq.error());
|
||||
TracingDebug(
|
||||
"main", "CheckTxShieldedInputs(): shielded requirements not met",
|
||||
"txid", txid.c_str(),
|
||||
|
|
|
@ -387,7 +387,7 @@ BOOST_AUTO_TEST_CASE(chained_joinsplits)
|
|||
CMutableTransaction mtx;
|
||||
mtx.vJoinSplit.push_back(js2);
|
||||
|
||||
BOOST_CHECK(cache.HaveShieldedRequirements(mtx) == std::optional<UnsatisfiedShieldedReq>(UnsatisfiedShieldedReq::SproutUnknownAnchor));
|
||||
BOOST_CHECK(cache.CheckShieldedRequirements(mtx) == tl::unexpected(UnsatisfiedShieldedReq::SproutUnknownAnchor));
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -397,7 +397,7 @@ BOOST_AUTO_TEST_CASE(chained_joinsplits)
|
|||
mtx.vJoinSplit.push_back(js2);
|
||||
mtx.vJoinSplit.push_back(js1);
|
||||
|
||||
BOOST_CHECK(cache.HaveShieldedRequirements(mtx) == std::optional<UnsatisfiedShieldedReq>(UnsatisfiedShieldedReq::SproutUnknownAnchor));
|
||||
BOOST_CHECK(cache.CheckShieldedRequirements(mtx) == tl::unexpected(UnsatisfiedShieldedReq::SproutUnknownAnchor));
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -405,7 +405,7 @@ BOOST_AUTO_TEST_CASE(chained_joinsplits)
|
|||
mtx.vJoinSplit.push_back(js1);
|
||||
mtx.vJoinSplit.push_back(js2);
|
||||
|
||||
BOOST_CHECK(cache.HaveShieldedRequirements(mtx) == std::nullopt);
|
||||
BOOST_CHECK(cache.CheckShieldedRequirements(mtx).has_value());
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -414,7 +414,7 @@ BOOST_AUTO_TEST_CASE(chained_joinsplits)
|
|||
mtx.vJoinSplit.push_back(js2);
|
||||
mtx.vJoinSplit.push_back(js3);
|
||||
|
||||
BOOST_CHECK(cache.HaveShieldedRequirements(mtx) == std::nullopt);
|
||||
BOOST_CHECK(cache.CheckShieldedRequirements(mtx).has_value());
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -424,7 +424,7 @@ BOOST_AUTO_TEST_CASE(chained_joinsplits)
|
|||
mtx.vJoinSplit.push_back(js2);
|
||||
mtx.vJoinSplit.push_back(js3);
|
||||
|
||||
BOOST_CHECK(cache.HaveShieldedRequirements(mtx) == std::nullopt);
|
||||
BOOST_CHECK(cache.CheckShieldedRequirements(mtx).has_value());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue