예제 #1
0
        public void GetSpendableTransactionsWithoutSpendableTransactionsReturnsEmptyList()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.ExternalAddresses.Add(new HdAddress {
                Index = 2, Address = "2"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(1), 1), Address = "2", Id = new uint256(15), Index = 7, SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }
                }
            });
            account.InternalAddresses.Add(new HdAddress {
                Index = 4
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(2), 1), Address = "4", Id = new uint256(15), Index = 10, SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }
                }
            });

            IEnumerable <UnspentOutputReference> result = account.GetSpendableTransactions(store, 100, 10, 0);

            Assert.Empty(result);
        }
예제 #2
0
        public void GetLastUsedAddressWithReceivingAddressesHavingTransactionsReturnsHighestIndex()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.ExternalAddresses.Add(new HdAddress {
                Index = 2, Address = "2"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(1), 1), Address = "2"
                }
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 3, Address = "3"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(2), 1), Address = "3"
                }
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 1, Address = "1"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(3), 1), Address = "1"
                }
            });

            HdAddress result = account.GetLastUsedAddress(store, isChange: false);

            Assert.Equal(account.ExternalAddresses.ElementAt(1), result);
        }
예제 #3
0
        public void GetFirstUnusedAccountReturnsAccountWithLowerIndexHavingNoAddresses()
        {
            AccountRoot       accountRoot = CreateAccountRoot(KnownCoinTypes.Stratis);
            WalletMemoryStore store       = new WalletMemoryStore();
            IHdAccount        unused      = CreateAccount("unused1");

            unused.Index = 2;
            accountRoot.Accounts.Add(unused);

            HdAccount unused2 = CreateAccount("unused2");

            unused2.Index = 1;
            accountRoot.Accounts.Add(unused2);

            HdAccount used = CreateAccount("used");

            used.ExternalAddresses.Add(CreateAddress());
            used.Index = 3;
            accountRoot.Accounts.Add(used);

            HdAccount used2 = CreateAccount("used2");

            used2.InternalAddresses.Add(CreateAddress());
            used2.Index = 4;
            accountRoot.Accounts.Add(used2);

            IHdAccount result = accountRoot.GetFirstUnusedAccount(store);

            Assert.NotNull(result);
            Assert.Equal(1, result.Index);
            Assert.Equal("unused2", result.Name);
        }
예제 #4
0
        public void UnspentTransactionsWithAddressHavingUnspentTransactionsReturnsUnspentTransactions()
        {
            WalletMemoryStore store = new WalletMemoryStore();

            var address = new HdAddress
            {
                Address = "Address"
            };

            store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    Id = new uint256(15), OutPoint = new OutPoint(new uint256(15), 1), Address = "Address"
                },
                new TransactionOutputData {
                    Id = new uint256(16), SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }, OutPoint = new OutPoint(new uint256(16), 1), Address = "Address"
                },
                new TransactionOutputData {
                    Id = new uint256(17), OutPoint = new OutPoint(new uint256(17), 1), Address = "Address"
                },
                new TransactionOutputData {
                    Id = new uint256(18), SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }, OutPoint = new OutPoint(new uint256(18), 1), Address = "Address"
                }
            });

            IEnumerable <TransactionOutputData> result = address.UnspentTransactions(store);

            Assert.Equal(2, result.Count());
            Assert.Contains(new uint256(15), result.Select(x => x.Id));
            Assert.Contains(new uint256(17), result.Select(x => x.Id));
        }
예제 #5
0
        public void UnspentTransactionsWithAddressNotHavingUnspentTransactionsReturnsEmptyList()
        {
            WalletMemoryStore store = new WalletMemoryStore();

            var address = new HdAddress
            {
                Address = "Address"
            };

            store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    Id = new uint256(16), SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }, OutPoint = new OutPoint(new uint256(16), 1), Address = "Address"
                },
                new TransactionOutputData {
                    Id = new uint256(18), SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }, OutPoint = new OutPoint(new uint256(18), 1), Address = "Address"
                }
            });

            IEnumerable <TransactionOutputData> result = address.UnspentTransactions(store);

            Assert.Empty(result);
        }
예제 #6
0
        public void GetFirstUnusedAccountWithoutAccountsReturnsNull()
        {
            AccountRoot       accountRoot = CreateAccountRoot(KnownCoinTypes.Stratis);
            WalletMemoryStore store       = new WalletMemoryStore();

            IHdAccount result = accountRoot.GetFirstUnusedAccount(store);

            Assert.Null(result);
        }
예제 #7
0
        public void GetLastUsedAddressLookingForReceivingAddressWithoutReceivingAddressesReturnsNull()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.ExternalAddresses.Clear();

            HdAddress result = account.GetLastUsedAddress(store, isChange: false);

            Assert.Null(result);
        }
예제 #8
0
        public void GetFirstUnusedChangeAddressWithoutChangeAddressReturnsNull()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.InternalAddresses.Clear();

            HdAddress result = account.GetFirstUnusedChangeAddress(store);

            Assert.Null(result);
        }
예제 #9
0
        public void UnspentTransactionsWithAddressWithoutTransactionsReturnsEmptyList()
        {
            WalletMemoryStore store = new WalletMemoryStore();

            var address = new HdAddress
            {
                Address = "Address"
            };

            IEnumerable <TransactionOutputData> result = address.UnspentTransactions(store);

            Assert.Empty(result);
        }
예제 #10
0
        public void GetLastUsedAddressLookingForReceivingAddressWithoutReceivingAddressesHavingTransactionsReturnsNull()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.ExternalAddresses.Add(new HdAddress {
                Index = 2, Address = "2"
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 3, Address = "3"
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 1, Address = "1"
            });

            HdAddress result = account.GetLastUsedAddress(store, isChange: false);

            Assert.Null(result);
        }
예제 #11
0
        public void GetFirstUnusedReceivingAddressWithExistingUnusedReceivingAddressReturnsAddressWithLowestIndex()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.ExternalAddresses.Add(new HdAddress {
                Index = 3, Address = "3"
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 2, Address = "2"
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 1, Address = "1"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(1), 1), Address = "1"
                }
            });

            HdAddress result = account.GetFirstUnusedReceivingAddress(store);

            Assert.Equal(account.ExternalAddresses.ElementAt(1), result);
        }
예제 #12
0
        public void GetFirstUnusedChangeAddressWithoutExistingUnusedChangeAddressReturnsNull()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.InternalAddresses.Add(new HdAddress {
                Index = 2, Address = "2"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(1), 1), Address = "2"
                }
            });
            account.InternalAddresses.Add(new HdAddress {
                Index = 1, Address = "1"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(2), 1), Address = "1"
                }
            });

            HdAddress result = account.GetFirstUnusedChangeAddress(store);

            Assert.Null(result);
        }
예제 #13
0
        public void GetSpendableTransactionsWithSpendableTransactionsReturnsSpendableTransactions()
        {
            var store   = new WalletMemoryStore();
            var account = new HdAccount();

            account.ExternalAddresses.Add(new HdAddress {
                Index = 2, Address = "2"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(1), 1), Address = "2", Id = new uint256(15), Index = 7, SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }
                }
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 3, Address = "3"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(2), 1), Address = "3", Id = new uint256(18), Index = 8
                }
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 1, Address = "1"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(3), 1), Address = "1", Id = new uint256(19), Index = 9, SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }
                }
            });
            account.ExternalAddresses.Add(new HdAddress {
                Index = 6
            });

            account.InternalAddresses.Add(new HdAddress {
                Index = 4, Address = "4"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(4), 1), Address = "4", Id = new uint256(15), Index = 10, SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }
                }
            });
            account.InternalAddresses.Add(new HdAddress {
                Index = 5, Address = "5"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(5), 1), Address = "5", Id = new uint256(18), Index = 11
                }
            });
            account.InternalAddresses.Add(new HdAddress {
                Index = 6
            });
            account.InternalAddresses.Add(new HdAddress {
                Index = 6, Address = "6"
            }); store.Add(new List <TransactionOutputData> {
                new TransactionOutputData {
                    OutPoint = new OutPoint(new uint256(6), 1), Address = "6", Id = new uint256(19), Index = 12, SpendingDetails = new SpendingDetails {
                        TransactionId = new uint256(1)
                    }
                }
            });

            IEnumerable <UnspentOutputReference> result = account.GetSpendableTransactions(store, 100, 10, 0);

            Assert.Equal(2, result.Count());
            Assert.Equal(8, result.ElementAt(0).Transaction.Index);
            Assert.Equal(new uint256(18), result.ElementAt(0).Transaction.Id);
            Assert.Equal(11, result.ElementAt(1).Transaction.Index);
            Assert.Equal(new uint256(18), result.ElementAt(1).Transaction.Id);
        }