From d756c8c1b7ef54e867c274694742c10d4e6e043d Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 28 Feb 2025 14:35:33 +0900 Subject: [PATCH] Fix unknown test --- NBitcoin.Tests/PSBT2Tests.cs | 14 -------------- NBitcoin.Tests/PSBTTests.cs | 2 ++ NBitcoin/BIP174/PSBT1.cs | 4 ++-- NBitcoin/BIP174/PartiallySignedTransaction.cs | 16 ++++++++-------- NBitcoin/BIP370/PSBT2.cs | 2 +- 5 files changed, 13 insertions(+), 25 deletions(-) diff --git a/NBitcoin.Tests/PSBT2Tests.cs b/NBitcoin.Tests/PSBT2Tests.cs index 76b86a198..3b30b2c00 100644 --- a/NBitcoin.Tests/PSBT2Tests.cs +++ b/NBitcoin.Tests/PSBT2Tests.cs @@ -15,20 +15,6 @@ namespace NBitcoin.Tests [Trait("UnitTest", "UnitTest")] public class PSBT2Tests { - private readonly ITestOutputHelper Output; - - private static PSBTComparer ComparerInstance { get; } - - static PSBT2Tests() - { - ComparerInstance = new PSBTComparer(); - } - - public PSBT2Tests(ITestOutputHelper output) - { - Output = output; - } - void AssertDetermineLockTime(string hex, string base64, LockTime want) { diff --git a/NBitcoin.Tests/PSBTTests.cs b/NBitcoin.Tests/PSBTTests.cs index 25db349f3..723792c58 100644 --- a/NBitcoin.Tests/PSBTTests.cs +++ b/NBitcoin.Tests/PSBTTests.cs @@ -584,6 +584,8 @@ public void CanHandleUnKnown() data1.Combine(data2); var expected = PSBT.Parse((string)testdata["psbtUnknown2"], Network.Main); Assert.Equal(data1, expected, ComparerInstance); + + } [Fact] [Trait("UnitTest", "UnitTest")] diff --git a/NBitcoin/BIP174/PSBT1.cs b/NBitcoin/BIP174/PSBT1.cs index 4ac11ae77..e7dbe1f2f 100644 --- a/NBitcoin/BIP174/PSBT1.cs +++ b/NBitcoin/BIP174/PSBT1.cs @@ -90,7 +90,7 @@ internal PSBT1(List maps, Network network) : base(network, 1) GlobalXPubs.Add(xpub.GetWif(Network), rootedKeyPath); break; default: - if (!unknown.TryAdd(k, v)) + if (!Unknown.TryAdd(k, v)) throw new FormatException($"Invalid PSBT, duplicate key ({Encoders.Hex.EncodeData(k)}) for unknown value"); break; } @@ -106,7 +106,7 @@ internal PSBT1(List maps, Network network) : base(network, 1) foreach (var indexedInput in tx.Inputs.AsIndexedInputs()) { var map = maps[(int)(indexedInput.Index + 1)]; - if (map.Keys.Any(bytes => PSBT2Constants.PSBT_V0_INPUT_EXCLUSIONSET.Contains(bytes[0]))) + if (map.Keys.Any(bytes => bytes.Length == 0 && PSBT2Constants.PSBT_V0_INPUT_EXCLUSIONSET.Contains(bytes[0]))) throw new FormatException("Invalid PSBT v0. Contains v2 fields"); Inputs.Add(new PSBTInput1(map, this, indexedInput.Index)); } diff --git a/NBitcoin/BIP174/PartiallySignedTransaction.cs b/NBitcoin/BIP174/PartiallySignedTransaction.cs index f2dcfda67..1fa003ac7 100644 --- a/NBitcoin/BIP174/PartiallySignedTransaction.cs +++ b/NBitcoin/BIP174/PartiallySignedTransaction.cs @@ -136,7 +136,7 @@ public int Compare(BitcoinExtPubKey? x, BitcoinExtPubKey? y) public PSBTInputList Inputs { get; protected set; } = new(); public PSBTOutputList Outputs { get; protected set;} = new(); - internal Map unknown { get; set; } = new Map(BytesComparer.Instance); + public Map Unknown { get; private set; } = new Map(BytesComparer.Instance); /// /// Parse PSBT from a hex or base64 string. @@ -340,8 +340,8 @@ public PSBT Combine(PSBT other) for (int i = 0; i < Outputs.Count; i++) this.Outputs[i].UpdateFrom(other.Outputs[i]); - foreach (var uk in other.unknown) - this.unknown.TryAdd(uk.Key, uk.Value); + foreach (var uk in other.Unknown) + this.Unknown.TryAdd(uk.Key, uk.Value); return this; } @@ -372,8 +372,8 @@ public PSBT UpdateFrom(PSBT other) foreach (var thisOutput in this.Outputs.Where(o => o.ScriptPubKey == otherOutput.ScriptPubKey)) thisOutput.UpdateFrom(otherOutput); - foreach (var uk in other.unknown) - this.unknown.TryAdd(uk.Key, uk.Value); + foreach (var uk in other.Unknown) + this.Unknown.TryAdd(uk.Key, uk.Value); return this; } @@ -830,7 +830,7 @@ internal void Serialize(BitcoinStream stream) } // Write the unknown things - foreach (var kv in unknown) + foreach (var kv in Unknown) { globalMap.Add(kv.Key, kv.Value); } @@ -892,11 +892,11 @@ public override string ToString() } jsonWriter.WriteEndArray(); } - if (unknown.Count != 0) + if (Unknown.Count != 0) { jsonWriter.WritePropertyName("unknown"); jsonWriter.WriteStartObject(); - foreach (var el in unknown) + foreach (var el in Unknown) { jsonWriter.WritePropertyValue(Encoders.Hex.EncodeData(el.Key), Encoders.Hex.EncodeData(el.Value)); } diff --git a/NBitcoin/BIP370/PSBT2.cs b/NBitcoin/BIP370/PSBT2.cs index c20f13da5..17d608dc5 100644 --- a/NBitcoin/BIP370/PSBT2.cs +++ b/NBitcoin/BIP370/PSBT2.cs @@ -52,7 +52,7 @@ internal PSBT2(List maps, Network network) : base(network, 2) while (globalMap.Pop(out byte[] k, out byte[] v)) { - if (!unknown.TryAdd(k, v)) + if (!Unknown.TryAdd(k, v)) throw new FormatException($"Invalid PSBT, duplicate key ({Encoders.Hex.EncodeData(k)}) for unknown value"); }