diff options
author | kallewoof <karljohan-alm@garage.co.jp> | 2021-08-31 19:50:37 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-31 19:50:37 +0900 |
commit | 407d1178f3ea42ab0531a5cde9c0380d2bd278af (patch) | |
tree | 74d1e5e6500c7143dc8cb1fdc9e87f4e140a4b2a /bip-0078.mediawiki | |
parent | eff059d634d7580a74783d5139be8389ec2e9d28 (diff) | |
parent | d8db3d76081662a55f34c6fed681b9daf5f6a0bd (diff) | |
download | bips-407d1178f3ea42ab0531a5cde9c0380d2bd278af.tar.xz |
Merge pull request #1171 from NicolasDorier/woieuq
[BIP78] Fix client implementation when there is output substitution
Diffstat (limited to 'bip-0078.mediawiki')
-rw-r--r-- | bip-0078.mediawiki | 12 |
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; |