Skip to content

Commit 407d117

Browse files
authored
Merge pull request bitcoin#1171 from NicolasDorier/woieuq
[BIP78] Fix client implementation when there is output substitution
2 parents eff059d + d8db3d7 commit 407d117

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

bip-0078.mediawiki

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -544,10 +544,16 @@ public async Task<PSBT> RequestPayjoin(
544544
// Verify that no keypaths is in the PSBT output
545545
if (proposedPSBTOutput.HDKeyPaths.Count != 0)
546546
throw new PayjoinSenderException("The receiver added keypaths to an output");
547-
bool isOriginalOutput = originalOutputs.Count > 0 && originalOutputs.Peek().OriginalTxOut.ScriptPubKey == proposedPSBTOutput.ScriptPubKey;
548-
if (isOriginalOutput)
547+
if (originalOutputs.Count == 0)
548+
continue;
549+
var originalOutput = originalOutputs.Peek();
550+
bool isOriginalOutput = originalOutput.OriginalTxOut.ScriptPubKey == proposedPSBTOutput.ScriptPubKey;
551+
bool substitutedOutput = !isOriginalOutput &&
552+
allowOutputSubstitution &&
553+
originalOutput.OriginalTxOut.ScriptPubKey == paymentScriptPubKey;
554+
if (isOriginalOutput || substitutedOutput)
549555
{
550-
var originalOutput = originalOutputs.Dequeue();
556+
originalOutputs.Dequeue();
551557
if (output.OriginalTxOut == feeOutput)
552558
{
553559
var actualContribution = feeOutput.Value - proposedPSBTOutput.Value;

0 commit comments

Comments
 (0)