public TransactionProcessor(
     AllTransactionStore transactionStore,
     KeyManager keyManager,
     Money dustThreshold,
     int privacyLevelThreshold = 100)
 {
     TransactionStore = Guard.NotNull(nameof(transactionStore), transactionStore);
     KeyManager       = Guard.NotNull(nameof(keyManager), keyManager);
     DustThreshold    = Guard.NotNull(nameof(dustThreshold), dustThreshold);
     Coins            = new CoinsRegistry(privacyLevelThreshold);
 }
Exemple #2
0
        public void Test1()
        {
            var registry = new CoinsRegistry();
            var key0     = new Key();
            var key1     = new Key();

            var stx0 = TransactionBuilders.CreateCreditingTransaction(key0.PubKey.Hash, Money.Coins(2));
            var stx1 = TransactionBuilders.CreateCreditingTransaction(key1.PubKey.Hash, Money.Coins(5));

            var coin0 = new SmartCoin(stx0, 0);

            Assert.True(registry.TryAdd(coin0));
            Assert.False(registry.TryAdd(coin0));
            Assert.False(registry.TryAdd(coin0.AsSpentBy(uint256.One)));

            var registeredCoin = Assert.Single(registry.AsCoinsView());

            Assert.Equal(registeredCoin, coin0);
            Assert.True(registeredCoin.Unspent);

            var coin1 = new SmartCoin(stx1, 0);

            Assert.True(registry.TryAdd(coin1));
            ////////////

            var(key2, keyChange) = (new Key(), new Key());
            var stx2 = TransactionBuilders.CreateSpendingTransaction(new[] { coin0.GetCoin(), coin1.GetCoin() }, key2.PubKey.Hash, keyChange.PubKey.Hash);

            registry.Spend(coin0, stx2.GetHash());
            registry.Spend(coin1, stx2.GetHash());
            var spentCoin = Assert.Single(registry.AsCoinsView(), coin => coin == coin0);

            Assert.False(spentCoin.Unspent);
            Assert.Equal(spentCoin, coin0);

            var coin2 = new SmartCoin(stx2, 0);
            var coin3 = new SmartCoin(stx2, 1);

            Assert.True(registry.TryAdd(coin2));
            Assert.True(registry.TryAdd(coin3));
            ////////////

            var changes = registry.Undo(stx0.GetHash());

            Assert.Empty(registry);
            var removedCoin = Assert.Single(changes.toRemove);

            Assert.Empty(changes.toAdd);
        }