deriveUnusedBaseAddressKit method

ShelleyAddressKit deriveUnusedBaseAddressKit({
  1. int account = defaultAccountIndex,
  2. int role = paymentRole,
  3. int index = defaultAddressIndex,
  4. NetworkId networkId = NetworkId.testnet,
  5. 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;
}