Skip to content

Commit bc31ee7

Browse files
committed
Add Transaction.RemoveSignatures()
1 parent 18328a3 commit bc31ee7

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

NBitcoin/BIP174/PSBT0.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@ private static Maps CreateMap(Transaction transaction, Network network)
2828
var maps = new Maps();
2929
var global = maps.NewMap();
3030
var noSigTx = transaction.Clone();
31-
foreach (var input in noSigTx.Inputs)
32-
{
33-
input.ScriptSig = Script.Empty;
34-
input.WitScript = WitScript.Empty;
35-
}
31+
noSigTx.RemoveSignatures();
3632
global.Add([PSBTConstants.PSBT_GLOBAL_UNSIGNED_TX], noSigTx.ToBytes());
3733
foreach (var input in transaction.Inputs)
3834
{

NBitcoin/Transaction.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,12 @@ public static TxIn CreateCoinbase(int height)
339339
txin.ScriptSig = new Script(Op.GetPushOp(height)) + OpcodeType.OP_0;
340340
return txin;
341341
}
342+
343+
public void RemoveSignatures()
344+
{
345+
ScriptSig = Script.Empty;
346+
WitScript = WitScript.Empty;
347+
}
342348
}
343349

344350
public class TxOutCompressor : IBitcoinSerializable
@@ -1445,6 +1451,12 @@ public static Transaction Parse(string hex, Network network)
14451451
return Load(Encoders.Hex.DecodeData(hex), network);
14461452
}
14471453

1454+
public void RemoveSignatures()
1455+
{
1456+
foreach (var input in Inputs)
1457+
input.RemoveSignatures();
1458+
}
1459+
14481460
public static bool TryParse(string hex, Network network, out Transaction transaction)
14491461
{
14501462
if (hex == null)

NBitcoin/TransactionBuilder.cs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using System.Net.Http.Headers;
1616
using System.Text.RegularExpressions;
1717
using System.Diagnostics.CodeAnalysis;
18+
using NBitcoin.Scripting.Parser;
1819

1920
namespace NBitcoin
2021
{
@@ -490,19 +491,11 @@ public TransactionSigningContext(TransactionBuilder builder, Transaction transac
490491

491492
private static Transaction RemoveSigs(Transaction tx)
492493
{
493-
Transaction? clone = null;
494-
for (int i = 0; i < tx.Inputs.Count; i++)
495-
{
496-
var input = tx.Inputs[i];
497-
if (!WitScript.IsNullOrEmpty(input.WitScript) || !Script.IsNullOrEmpty(input.ScriptSig))
498-
{
499-
clone ??= tx.Clone();
500-
input = clone.Inputs[i];
501-
input.WitScript = WitScript.Empty;
502-
input.ScriptSig = Script.Empty;
503-
}
504-
}
505-
return clone ?? tx;
494+
var hasSig = tx.Inputs.Any(input => !WitScript.IsNullOrEmpty(input.WitScript) || !Script.IsNullOrEmpty(input.ScriptSig));
495+
if (!hasSig)
496+
return tx;
497+
tx = tx.Clone();
498+
return tx;
506499
}
507500

508501
public TransactionSigningContext(TransactionBuilder builder, PSBT psbt, Transaction? transaction, SigningOptions signingOptions)

0 commit comments

Comments
 (0)