buildAddressKitCache method
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;
}