Refactor that avoids using exceptions for local flow control and is simpler.

Signed-off-by: Daira Emma Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Emma Hopwood 2023-04-04 21:32:22 +01:00
parent ac3e345689
commit 3adf580dc0
1 changed files with 30 additions and 32 deletions

View File

@ -550,21 +550,19 @@ TransactionBuilderResult TransactionEffects::ApproveAndBuild(
}
// Add outputs
try {
for (const auto& r : payments.GetResolvedPayments()) {
std::optional<TransactionBuilderResult> result;
examine(r.address, match {
[&](const CKeyID& keyId) {
if (r.memo.has_value()) {
throw TransactionBuilderResult(
"Memos cannot be sent to transparent addresses.");
result = TransactionBuilderResult("Memos cannot be sent to transparent addresses.");
} else {
builder.AddTransparentOutput(keyId, r.amount);
}
},
[&](const CScriptID& scriptId) {
if (r.memo.has_value()) {
throw TransactionBuilderResult(
"Memos cannot be sent to transparent addresses.");
result = TransactionBuilderResult("Memos cannot be sent to transparent addresses.");
} else {
builder.AddTransparentOutput(scriptId, r.amount);
}
@ -578,11 +576,11 @@ TransactionBuilderResult TransactionEffects::ApproveAndBuild(
builder.AddOrchardOutput(
r.isInternal ? internalOVK : externalOVK, addr, r.amount,
r.memo.has_value() ? std::optional(r.memo.value().ToBytes()) : std::nullopt);
}
},
});
if (result.has_value()) {
return result.value();
}
} catch (const TransactionBuilderResult& result) {
return result;
}
// Add transparent utxos