deriveUnusedBaseAddressKit method
ShelleyAddressKit
deriveUnusedBaseAddressKit({
- int account = defaultAccountIndex,
- int role = paymentRole,
- int index = defaultAddressIndex,
- NetworkId networkId = NetworkId.testnet,
- UnusedAddressFunction unusedCallback = alwaysUnused,
iterate key chain until an unused address is found, then return keys and address.
Implementation
ShelleyAddressKit deriveUnusedBaseAddressKit(
{int account = defaultAccountIndex,
int role = paymentRole,
int index = defaultAddressIndex,
NetworkId networkId = NetworkId.testnet,
UnusedAddressFunction unusedCallback = alwaysUnused}) {
assert(role == paymentRole || role == changeRole);
final rootKeys =
Bip32KeyPair(signingKey: rootSigningKey, verifyKey: rootVerifyKey);
final purposeKey = derive(keys: rootKeys, index: defaultPurpose);
final coinKey = derive(keys: purposeKey, index: defaultCoinType);
final accountKey = derive(keys: coinKey, index: account);
//stake chain:
final stakeRoleKeys = derive(keys: accountKey, index: stakingRole);
final stakeAddressKeys = derive(keys: stakeRoleKeys, index: 0);
//address chain:
int i = index;
final spendRoleKeys = derive(keys: accountKey, index: role);
ShelleyAddress addr;
Bip32KeyPair keyPair;
do {
keyPair = derive(keys: spendRoleKeys, index: i++);
addr = toBaseAddress(
spend: keyPair.verifyKey!,
stake: stakeAddressKeys.verifyKey!,
networkId: networkId);
logger.i("addr[$i][role:$role]: $addr");
} while (!unusedCallback(addr));
final result = ShelleyAddressKit(
account: account,
role: role,
index: i - 1,
signingKey: keyPair.signingKey,
verifyKey: keyPair.verifyKey,
address: addr,
);
return result;
}