Skip to content

Commit 2fe93f4

Browse files
committed
Fix tests
1 parent d561522 commit 2fe93f4

File tree

13 files changed

+49
-35
lines changed

13 files changed

+49
-35
lines changed

NBitcoin.Tests/ChainTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,9 @@ public ChainedBlock AppendBlock(ChainedBlock previous, params ConcurrentChain[]
608608
var nonce = RandomUtils.GetUInt32();
609609
foreach (var chain in chains)
610610
{
611-
var block = TestUtils.CreateFakeBlock(Network.Main.CreateTransaction());
611+
var tx = Network.Main.CreateTransaction();
612+
tx.Inputs.Add();
613+
var block = TestUtils.CreateFakeBlock(tx);
612614
block.Header.HashPrevBlock = previous == null ? chain.Tip.HashBlock : previous.HashBlock;
613615
block.Header.Nonce = nonce;
614616
if (!chain.TrySetTip(block.Header, out last))

NBitcoin.Tests/ColoredCoinsTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ public void CanColorizeSpecScenario()
151151
Assert.True(destroyed[0].Id == a2.Id);
152152

153153
var prior = Network.Main.CreateTransaction();
154+
prior.Inputs.Add();
154155
prior.Outputs.Add(new TxOut(dust, a1.ScriptPubKey));
155156
prior.Outputs.Add(new TxOut(dust, a2.ScriptPubKey));
156157
prior.Outputs.Add(new TxOut(dust, h.ScriptPubKey));

NBitcoin.Tests/Generators/PSBTGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ from psbt in SanePSBT(network)
3838
/// <param name="network"></param>
3939
/// <returns></returns>
4040
public static Gen<PSBT> SanePSBT(Network network) =>
41-
from inputN in Gen.Choose(0, 8)
41+
from inputN in Gen.Choose(1, 8)
4242
from scripts in Gen.ListOf(inputN, ScriptGenerator.RandomScriptSig())
4343
from txOuts in Gen.Sequence(scripts.Select(sc => OutputFromRedeem(sc)))
4444
from prevN in Gen.Choose(0, 5)

NBitcoin.Tests/PSBTTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public static void ShouldCalculateBalanceOfHDKey(PSBTVersion version)
5656
var bob = bobMaster.Derive(new KeyPath("4/5/6"));
5757

5858
var funding = network.CreateTransaction();
59+
funding.Inputs.Add();
5960
funding.Outputs.Add(Money.Coins(1.0m), alice);
6061
funding.Outputs.Add(Money.Coins(1.5m), bob);
6162

@@ -642,8 +643,9 @@ public void CanRebaseKeypathInPSBT()
642643
var accountExtKey = masterExtkey.Derive(new KeyPath("0'/0'/0'"));
643644
var accountRootedKeyPath = new KeyPath("0'/0'/0'").ToRootedKeyPath(masterExtkey);
644645
uint hardenedFlag = 0x80000000U;
645-
retry:
646+
retry:
646647
Transaction funding = masterExtkey.Network.CreateTransaction();
648+
funding.Inputs.Add();
647649
funding.Outputs.Add(Money.Coins(2.0m), accountExtKey.Derive(0 | hardenedFlag).ScriptPubKey);
648650
funding.Outputs.Add(Money.Coins(2.0m), accountExtKey.Derive(1 | hardenedFlag).ScriptPubKey);
649651
#if HAS_SPAN

NBitcoin.Tests/ProtocolTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,9 @@ public void CanConnectMultipleTimeToServer()
11021102
public void CanRoundtripCmpctBlock()
11031103
{
11041104
Block block = Network.Main.Consensus.ConsensusFactory.CreateBlock();
1105-
block.Transactions.Add(Network.Main.Consensus.ConsensusFactory.CreateTransaction());
1105+
var tx = Network.Main.Consensus.ConsensusFactory.CreateTransaction();
1106+
tx.Inputs.Add();
1107+
block.Transactions.Add(tx);
11061108
var cmpct = new CmpctBlockPayload(block);
11071109
cmpct.Clone();
11081110
}

NBitcoin.Tests/TestUtils.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ public static Block CreateFakeBlock(Transaction tx)
4747

4848
public static Block CreateFakeBlock()
4949
{
50-
var block = TestUtils.CreateFakeBlock(Network.Main.CreateTransaction());
50+
var tx = Network.Main.CreateTransaction();
51+
tx.Inputs.Add();
52+
var block = TestUtils.CreateFakeBlock(tx);
5153
block.Header.HashPrevBlock = new uint256(RandomUtils.GetBytes(32));
5254
block.Header.Nonce = RandomUtils.GetUInt32();
5355
return block;

NBitcoin.Tests/script_tests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ public void BIP65_tests()
149149
private void BIP65_testsCore(LockTime target, LockTime now, bool expectedResult)
150150
{
151151
Transaction tx = Network.CreateTransaction();
152+
tx.Inputs.Add();
152153
tx.Outputs.Add(new TxOut()
153154
{
154155
ScriptPubKey = new Script(Op.GetPushOp(target.Value), OpcodeType.OP_CHECKLOCKTIMEVERIFY)
@@ -736,6 +737,7 @@ public void script_CHECKMULTISIG12()
736737
);
737738

738739
Transaction txFrom12 = Network.CreateTransaction();
740+
txFrom12.Inputs.Add();
739741
txFrom12.Outputs.Add(new TxOut());
740742
txFrom12.Outputs[0].ScriptPubKey = scriptPubKey12;
741743

@@ -780,6 +782,7 @@ public void script_CHECKMULTISIG23()
780782

781783

782784
var txFrom23 = Network.CreateTransaction();
785+
txFrom23.Inputs.Add();
783786
txFrom23.Outputs.Add(new TxOut());
784787
txFrom23.Outputs[0].ScriptPubKey = scriptPubKey23;
785788

NBitcoin.Tests/transaction_tests.cs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,7 @@ public void CanBuildShuffleColoredTransaction()
988988
var repo = new NoSqlColoredTransactionRepository(new NoSqlTransactionRepository(), new InMemoryNoSqlRepository());
989989

990990
var init = Network.CreateTransaction();
991+
init.Inputs.Add();
991992
init.Outputs.Add("1.0", gold.PubKey);
992993
init.Outputs.Add("1.0", silver.PubKey);
993994
init.Outputs.Add("1.0", satoshi.PubKey);
@@ -1279,6 +1280,7 @@ public void CanBuildColoredTransaction()
12791280
var repo = new NoSqlColoredTransactionRepository();
12801281

12811282
var init = Network.CreateTransaction();
1283+
init.Inputs.Add();
12821284
init.Outputs.Add("1.0", gold.PubKey);
12831285
init.Outputs.Add("1.0", silver.PubKey);
12841286
init.Outputs.Add("1.0", satoshi.PubKey);
@@ -1375,6 +1377,7 @@ public void CanBuildColoredTransaction()
13751377

13761378
//Gold receive 2.5 BTC
13771379
tx = txBuilder.Network.Consensus.ConsensusFactory.CreateTransaction();
1380+
tx.Inputs.Add();
13781381
tx.Outputs.Add("2.5", gold.PubKey);
13791382
repo.Transactions.Put(tx.GetHash(), tx);
13801383

@@ -1762,6 +1765,7 @@ public void CanEstimateFees()
17621765
builder.SendEstimatedFees(rate);
17631766
signed = builder.BuildTransaction(true);
17641767
Assert.True(builder.Verify(signed, estimatedFees));
1768+
Assert.Equal(1174, builder.EstimateSize(signed));
17651769
}
17661770

17671771
private Coin RandomCoin(Money amount, IDestination dest, bool p2sh)
@@ -1924,23 +1928,6 @@ void BitcoinStreamCoverageCore<TItem>(TItem[] input, BitcoinStreamCoverageCoreDe
19241928
AssertEx.CollectionEquals(before, input);
19251929
}
19261930

1927-
[Fact]
1928-
[Trait("UnitTest", "UnitTest")]
1929-
public void CanSerializeInvalidTransactionsBackAndForth()
1930-
{
1931-
Transaction before = Network.CreateTransaction();
1932-
var versionBefore = before.Version;
1933-
before.Outputs.Add(new TxOut());
1934-
Transaction after = AssertClone(before);
1935-
Assert.Equal(before.Version, after.Version);
1936-
Assert.Equal(versionBefore, after.Version);
1937-
Assert.True(after.Outputs.Count == 1);
1938-
1939-
before = Network.CreateTransaction();
1940-
after = AssertClone(before);
1941-
Assert.Equal(before.Version, versionBefore);
1942-
}
1943-
19441931
private Transaction AssertClone(Transaction before)
19451932
{
19461933
Transaction after = before.Clone();
@@ -2100,6 +2087,7 @@ public void CanFilterUneconomicalCoins()
21002087
var bob = new Key();
21012088
//P2SH(P2WSH)
21022089
var previousTx = Network.CreateTransaction();
2090+
previousTx.Inputs.Add();
21032091
previousTx.Outputs.Add(new TxOut(Money.Coins(1.0m), alice.PubKey.ScriptPubKey.WitHash.ScriptPubKey.Hash));
21042092
var previousCoin = previousTx.Outputs.AsCoins().First();
21052093

@@ -2658,6 +2646,7 @@ public void CanBuildTransactionWithDustPrevention()
26582646
var bob = new Key();
26592647
var alice = new Key();
26602648
var tx = Network.CreateTransaction();
2649+
tx.Inputs.Add();
26612650
tx.Outputs.Add(Money.Coins(1.0m), bob);
26622651
var coins = tx.Outputs.AsCoins().ToArray();
26632652

@@ -2852,6 +2841,7 @@ public void CanMutateSignature()
28522841
public void CanUseLockTime()
28532842
{
28542843
var tx = Network.CreateTransaction();
2844+
tx.Inputs.Add();
28552845
tx.LockTime = new LockTime(4);
28562846
var clone = tx.Clone();
28572847
Assert.Equal(tx.LockTime, clone.LockTime);
@@ -3082,6 +3072,7 @@ public void witnessHasPushSizeLimit()
30823072
{
30833073
var bob = new Key().GetWif(Network.RegTest);
30843074
Transaction tx = Network.CreateTransaction();
3075+
tx.Inputs.Add();
30853076
tx.Outputs.Add(new TxOut(Money.Coins(1.0m), bob.PubKey.ScriptPubKey.WitHash));
30863077
ScriptCoin coin = new ScriptCoin(tx.Outputs.AsCoins().First(), bob.PubKey.ScriptPubKey);
30873078

NBitcoin/BitcoinStream.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@ public void CopyParameters(BitcoinStream from)
592592
IsBigEndian = from.IsBigEndian;
593593
MaxArraySize = from.MaxArraySize;
594594
Type = from.Type;
595+
AllowNoInputs = from.AllowNoInputs;
595596
}
596597

597598
public SerializationType Type
@@ -630,6 +631,13 @@ public System.Threading.CancellationToken ReadCancellationToken
630631
set;
631632
}
632633

634+
/// <summary>
635+
/// Allows serialization of transactions with no inputs.
636+
/// Such transactions are not valid for deserialization, but may still be useful,
637+
/// for example, when computing a transaction hash or estimating size.
638+
/// </summary>
639+
public bool AllowNoInputs { get; set; }
640+
633641
public void ReadWriteAsVarInt(ref uint val)
634642
{
635643
if (Serializing)

NBitcoin/IBitcoinSerializable.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public static void ReadWrite(this IBitcoinSerializable serializable, Stream stre
3232
public static int GetSerializedSize(this IBitcoinSerializable serializable, uint? version, SerializationType serializationType)
3333
{
3434
BitcoinStream s = new BitcoinStream(Stream.Null, true);
35+
s.AllowNoInputs = true;
3536
s.Type = serializationType;
3637
s.ProtocolVersion = version;
3738
s.ReadWrite(serializable);
@@ -40,6 +41,7 @@ public static int GetSerializedSize(this IBitcoinSerializable serializable, uint
4041
public static int GetSerializedSize(this IBitcoinSerializable serializable, TransactionOptions options)
4142
{
4243
var bms = new BitcoinStream(Stream.Null, true);
44+
bms.AllowNoInputs = true;
4345
bms.TransactionOptions = options;
4446
serializable.ReadWrite(bms);
4547
return (int)bms.Counter.WrittenBytes;

0 commit comments

Comments
 (0)