public async Task <GetUnspentAddressesResponse> GetUnspentAddressesAsync(GetUnspentAddressesRequest request) { var nodeInfo = await this.Client.GetNodeInfoAsync(); var state = new InMemoryBip44GeneratorState { AccountIndex = request.AccountIndex, AddressIndex = request.AddressOptions.StartIndex, IsInternal = false }; var unspentAddresses = new List <Bech32Address>(); var isFirst = true; var zeroCount = 0; var foundAll = false; do { var bip32Path = Bip44AddressGenerator.GenerateAddress(state, isFirst); isFirst = false; var addressSeed = request.Seed.GenerateSeedFromPath(bip32Path); var address = Ed25519Address.FromPublicKey(addressSeed.KeyPair.PublicKey); var addressWithBalance = await this.Client.GetAddressFromEd25519Async(address.Address); if (addressWithBalance.Balance == 0) { zeroCount++; if (zeroCount >= request.AddressOptions.ZeroCount) { foundAll = true; } } else { unspentAddresses.Add(Bech32Address.FromEd25519Address(addressWithBalance, bip32Path, nodeInfo.Bech32Hrp)); if (unspentAddresses.Count == request.AddressOptions.RequiredCount) { foundAll = true; } } } while (!foundAll); return(new GetUnspentAddressesResponse(unspentAddresses)); }
public void TestAddressCreationFromEd25519AddressAndBip31Path() { var expectedAddressBech32Address = "iota1qq97h4hsl6l67v45cal2ue64k8vrg7xueyv9cv7rrr2tpgjt54xks8esknu"; var address = new Ed25519Address { Address = "0bebd6f0febfaf32b4c77eae6755b1d83478dcc9185c33c318d4b0a24ba54d68", Balance = 100, DustAllowed = true }; var path = Bip44AddressGenerator.GenerateAddress(1, 1, false); var actual = Bech32Address.FromEd25519Address(address, path, "iota"); Assert.AreEqual(expectedAddressBech32Address, actual.Address); Assert.AreEqual(path.ToString(), actual.Path.ToString()); Assert.AreEqual(address.Balance, actual.Balance); }