public static (ExtKey ExtKey, string ExtPubKey) GenerateAccountKeys(Bitcoin.Features.Wallet.Wallet wallet, string password, string keyPath) { var accountExtKey = new ExtKey(Key.Parse(wallet.EncryptedSeed, password, wallet.Network), wallet.ChainCode); var accountExtendedPubKey = accountExtKey.Derive(new KeyPath(keyPath)).Neuter().ToString(wallet.Network); return(accountExtKey, accountExtendedPubKey); }
public void GetAllTransactionsByCoinTypeReturnsTransactionsFromWalletByCoinType() { var wallet = new Bitcoin.Features.Wallet.Wallet(); var stratisAccountRoot = CreateAccountRootWithHdAccountHavingAddresses("StratisAccount", CoinType.Stratis); var bitcoinAccountRoot = CreateAccountRootWithHdAccountHavingAddresses("BitcoinAccount", CoinType.Bitcoin); var stratisAccountRoot2 = CreateAccountRootWithHdAccountHavingAddresses("StratisAccount2", CoinType.Stratis); var transaction1 = CreateTransaction(new uint256(1), new Money(15000), 1); var transaction2 = CreateTransaction(new uint256(2), new Money(91209), 1); var transaction3 = CreateTransaction(new uint256(3), new Money(32145), 1); var transaction4 = CreateTransaction(new uint256(4), new Money(654789), 1); var transaction5 = CreateTransaction(new uint256(5), new Money(52387), 1); var transaction6 = CreateTransaction(new uint256(6), new Money(879873), 1); stratisAccountRoot.Accounts.ElementAt(0).InternalAddresses.ElementAt(0).Transactions.Add(transaction1); stratisAccountRoot.Accounts.ElementAt(0).ExternalAddresses.ElementAt(0).Transactions.Add(transaction2); bitcoinAccountRoot.Accounts.ElementAt(0).InternalAddresses.ElementAt(0).Transactions.Add(transaction3); bitcoinAccountRoot.Accounts.ElementAt(0).ExternalAddresses.ElementAt(0).Transactions.Add(transaction4); stratisAccountRoot2.Accounts.ElementAt(0).InternalAddresses.ElementAt(0).Transactions.Add(transaction5); stratisAccountRoot2.Accounts.ElementAt(0).ExternalAddresses.ElementAt(0).Transactions.Add(transaction6); wallet.AccountsRoot.Add(stratisAccountRoot); wallet.AccountsRoot.Add(bitcoinAccountRoot); wallet.AccountsRoot.Add(stratisAccountRoot2); var result = wallet.GetAllTransactionsByCoinType(CoinType.Stratis).ToList(); Assert.Equal(4, result.Count); Assert.Equal(transaction2, result[0]); Assert.Equal(transaction6, result[1]); Assert.Equal(transaction1, result[2]); Assert.Equal(transaction5, result[3]); }
public static Transaction SetupValidTransaction(Bitcoin.Features.Wallet.Wallet wallet, string password, HdAddress spendingAddress, PubKey destinationPubKey, HdAddress changeAddress, Money amount, Money fee) { var spendingTransaction = spendingAddress.Transactions.ElementAt(0); Coin coin = new Coin(spendingTransaction.Id, (uint)spendingTransaction.Index, spendingTransaction.Amount, spendingTransaction.ScriptPubKey); var privateKey = Key.Parse(wallet.EncryptedSeed, password, wallet.Network); var builder = new TransactionBuilder(); Transaction tx = builder .AddCoins(new List <Coin> { coin }) .AddKeys(new ExtKey(privateKey, wallet.ChainCode).Derive(new KeyPath(spendingAddress.HdPath)).GetWif(wallet.Network)) .Send(destinationPubKey.ScriptPubKey, amount) .SetChange(changeAddress.ScriptPubKey) .SendFees(fee) .BuildTransaction(true); if (!builder.Verify(tx)) { throw new WalletException("Could not build transaction, please make sure you entered the correct data."); } return(tx); }
public void GetAllTransactionsByCoinTypeWithoutAccountRootReturnsEmptyList() { var wallet = new Bitcoin.Features.Wallet.Wallet(); var result = wallet.GetAllTransactionsByCoinType(CoinType.Stratis).ToList(); Assert.Empty(result); }
public void GetAccountsByCoinTypeWithoutAccountsReturnsEmptyList() { var wallet = new Bitcoin.Features.Wallet.Wallet(); var result = wallet.GetAccountsByCoinType(CoinType.Stratis); Assert.Equal(0, result.Count()); }
public void GetAllPubKeysByCoinTypeWithoutMatchingCoinTypeReturnsEmptyList() { var wallet = new Bitcoin.Features.Wallet.Wallet(); var bitcoinAccountRoot = CreateAccountRootWithHdAccountHavingAddresses("BitcoinAccount", CoinType.Bitcoin); wallet.AccountsRoot.Add(bitcoinAccountRoot); var result = wallet.GetAllPubKeysByCoinType(CoinType.Stratis).ToList(); Assert.Empty(result); }
public void GetAccountsByCoinTypeReturnsAccountsFromWalletByCoinType() { var wallet = new Bitcoin.Features.Wallet.Wallet(); wallet.AccountsRoot.Add(CreateAccountRootWithHdAccountHavingAddresses("StratisAccount", CoinType.Stratis)); wallet.AccountsRoot.Add(CreateAccountRootWithHdAccountHavingAddresses("BitcoinAccount", CoinType.Bitcoin)); wallet.AccountsRoot.Add(CreateAccountRootWithHdAccountHavingAddresses("StratisAccount2", CoinType.Stratis)); var result = wallet.GetAccountsByCoinType(CoinType.Stratis); Assert.Equal(2, result.Count()); Assert.Equal("StratisAccount", result.ElementAt(0).Name); Assert.Equal("StratisAccount2", result.ElementAt(1).Name); }
public void GetAllTransactionsByCoinTypeWithoutMatchingAccountReturnsEmptyList() { var wallet = new Bitcoin.Features.Wallet.Wallet(); var bitcoinAccountRoot = CreateAccountRootWithHdAccountHavingAddresses("BitcoinAccount", CoinType.Bitcoin); var transaction1 = CreateTransaction(new uint256(3), new Money(32145), 1); var transaction2 = CreateTransaction(new uint256(4), new Money(654789), 1); bitcoinAccountRoot.Accounts.ElementAt(0).InternalAddresses.ElementAt(0).Transactions.Add(transaction1); bitcoinAccountRoot.Accounts.ElementAt(0).ExternalAddresses.ElementAt(0).Transactions.Add(transaction2); wallet.AccountsRoot.Add(bitcoinAccountRoot); var result = wallet.GetAllTransactionsByCoinType(CoinType.Stratis).ToList(); Assert.Empty(result); }
public void GetAllPubKeysByCoinTypeReturnsPubkeysFromWalletByCoinType() { var wallet = new Bitcoin.Features.Wallet.Wallet(); var stratisAccountRoot = CreateAccountRootWithHdAccountHavingAddresses("StratisAccount", CoinType.Stratis); var bitcoinAccountRoot = CreateAccountRootWithHdAccountHavingAddresses("BitcoinAccount", CoinType.Bitcoin); var stratisAccountRoot2 = CreateAccountRootWithHdAccountHavingAddresses("StratisAccount2", CoinType.Stratis); wallet.AccountsRoot.Add(stratisAccountRoot); wallet.AccountsRoot.Add(bitcoinAccountRoot); wallet.AccountsRoot.Add(stratisAccountRoot2); var result = wallet.GetAllPubKeysByCoinType(CoinType.Stratis).ToList(); Assert.Equal(4, result.Count); Assert.Equal(stratisAccountRoot.Accounts.ElementAt(0).ExternalAddresses.ElementAt(0).ScriptPubKey, result[0]); Assert.Equal(stratisAccountRoot2.Accounts.ElementAt(0).ExternalAddresses.ElementAt(0).ScriptPubKey, result[1]); Assert.Equal(stratisAccountRoot.Accounts.ElementAt(0).InternalAddresses.ElementAt(0).ScriptPubKey, result[2]); Assert.Equal(stratisAccountRoot2.Accounts.ElementAt(0).InternalAddresses.ElementAt(0).ScriptPubKey, result[3]); }
internal static (Bitcoin.Features.Wallet.Wallet wallet, ExtKey key) GenerateBlankWalletWithExtKey(string name, string password) { Mnemonic mnemonic = new Mnemonic(Wordlist.English, WordCount.Twelve); ExtKey extendedKey = mnemonic.DeriveExtKey(password); Bitcoin.Features.Wallet.Wallet walletFile = new Bitcoin.Features.Wallet.Wallet { Name = name, EncryptedSeed = extendedKey.PrivateKey.GetEncryptedBitcoinSecret(password, Network.Main).ToWif(), ChainCode = extendedKey.ChainCode, CreationTime = DateTimeOffset.Now, Network = Network.Main, AccountsRoot = new List <AccountRoot> { new AccountRoot { Accounts = new List <HdAccount>(), CoinType = (CoinType)Network.Main.Consensus.CoinType } }, }; return(walletFile, extendedKey); }
public static (PubKey PubKey, BitcoinPubKeyAddress Address) GenerateAddressKeys(Bitcoin.Features.Wallet.Wallet wallet, string accountExtendedPubKey, string keyPath) { var addressPubKey = ExtPubKey.Parse(accountExtendedPubKey).Derive(new KeyPath(keyPath)).PubKey; var address = addressPubKey.GetAddress(wallet.Network); return(addressPubKey, address); }