buildAddressKitCache method

List<ShelleyAddressKit> buildAddressKitCache({
  1. Set<ShelleyAddress> usedSet = const {},
  2. int account = defaultAccountIndex,
  3. int role = paymentRole,
  4. int index = defaultAddressIndex,
  5. NetworkId networkId = NetworkId.testnet,
  6. int beyondUsedOffset = maxOverrun,
})

Build a cache of spend or change addresses their keys. When used addresses are encounted, cache size is increased to maintain beyondUsedOffset.

Implementation

List<ShelleyAddressKit> buildAddressKitCache({
  Set<ShelleyAddress> usedSet = const {},
  int account = defaultAccountIndex,
  int role = paymentRole,
  int index = defaultAddressIndex,
  NetworkId networkId = NetworkId.testnet,
  int beyondUsedOffset = maxOverrun,
}) {
  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;
  int cutoff = beyondUsedOffset;
  final spendRoleKeys = derive(keys: accountKey, index: role);
  List<ShelleyAddressKit> results = [];
  do {
    final Bip32KeyPair keyPair = derive(keys: spendRoleKeys, index: i);
    final ShelleyAddress addr = toBaseAddress(
        spend: keyPair.verifyKey!,
        stake: stakeAddressKeys.verifyKey!,
        networkId: networkId);
    final result = ShelleyAddressKit(
      account: account,
      role: role,
      index: i,
      signingKey: keyPair.signingKey,
      verifyKey: keyPair.verifyKey,
      address: addr,
    );
    results.add(result);
    final isUsed = usedSet.contains(addr);
    //logger.i("addr[$i][role:$role] used:{$isUsed}: $addr");
    if (isUsed) {
      //extend cache size?
      cutoff = beyondUsedOffset + i + 1;
    }
  } while (++i < cutoff);
  return results;
}