Skip to content

Commit d8db3d7

Browse files
committed
[BIP78] Fix client implementation when there is output substitution
1 parent a76f5e4 commit d8db3d7

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
@@ -541,10 +541,16 @@ public async Task<PSBT> RequestPayjoin(
541541
// Verify that no keypaths is in the PSBT output
542542
if (proposedPSBTOutput.HDKeyPaths.Count != 0)
543543
throw new PayjoinSenderException("The receiver added keypaths to an output");
544-
bool isOriginalOutput = originalOutputs.Count > 0 && originalOutputs.Peek().OriginalTxOut.ScriptPubKey == proposedPSBTOutput.ScriptPubKey;
545-
if (isOriginalOutput)
544+
if (originalOutputs.Count == 0)
545+
continue;
546+
var originalOutput = originalOutputs.Peek();
547+
bool isOriginalOutput = originalOutput.OriginalTxOut.ScriptPubKey == proposedPSBTOutput.ScriptPubKey;
548+
bool substitutedOutput = !isOriginalOutput &&
549+
allowOutputSubstitution &&
550+
originalOutput.OriginalTxOut.ScriptPubKey == paymentScriptPubKey;
551+
if (isOriginalOutput || substitutedOutput)
546552
{
547-
var originalOutput = originalOutputs.Dequeue();
553+
originalOutputs.Dequeue();
548554
if (output.OriginalTxOut == feeOutput)
549555
{
550556
var actualContribution = feeOutput.Value - proposedPSBTOutput.Value;

0 commit comments

Comments
 (0)