summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkallewoof <karljohan-alm@garage.co.jp>2021-08-31 19:50:37 +0900
committerGitHub <noreply@github.com>2021-08-31 19:50:37 +0900
commit407d1178f3ea42ab0531a5cde9c0380d2bd278af (patch)
tree74d1e5e6500c7143dc8cb1fdc9e87f4e140a4b2a
parenteff059d634d7580a74783d5139be8389ec2e9d28 (diff)
parentd8db3d76081662a55f34c6fed681b9daf5f6a0bd (diff)
downloadbips-407d1178f3ea42ab0531a5cde9c0380d2bd278af.tar.xz
Merge pull request #1171 from NicolasDorier/woieuq
[BIP78] Fix client implementation when there is output substitution
-rw-r--r--bip-0078.mediawiki12
1 files changed, 9 insertions, 3 deletions
diff --git a/bip-0078.mediawiki b/bip-0078.mediawiki
index 363f551..f3710d7 100644
--- a/bip-0078.mediawiki
+++ b/bip-0078.mediawiki
@@ -544,10 +544,16 @@ public async Task<PSBT> RequestPayjoin(
// Verify that no keypaths is in the PSBT output
if (proposedPSBTOutput.HDKeyPaths.Count != 0)
throw new PayjoinSenderException("The receiver added keypaths to an output");
- bool isOriginalOutput = originalOutputs.Count > 0 && originalOutputs.Peek().OriginalTxOut.ScriptPubKey == proposedPSBTOutput.ScriptPubKey;
- if (isOriginalOutput)
+ if (originalOutputs.Count == 0)
+ continue;
+ var originalOutput = originalOutputs.Peek();
+ bool isOriginalOutput = originalOutput.OriginalTxOut.ScriptPubKey == proposedPSBTOutput.ScriptPubKey;
+ bool substitutedOutput = !isOriginalOutput &&
+ allowOutputSubstitution &&
+ originalOutput.OriginalTxOut.ScriptPubKey == paymentScriptPubKey;
+ if (isOriginalOutput || substitutedOutput)
{
- var originalOutput = originalOutputs.Dequeue();
+ originalOutputs.Dequeue();
if (output.OriginalTxOut == feeOutput)
{
var actualContribution = feeOutput.Value - proposedPSBTOutput.Value;