deriveAddress function

Map<String, Object?> deriveAddress({
  1. required Map<String, Object?> source,
  2. String chain = 'bitcoin',
  3. int account = 0,
  4. int change = 0,
  5. int index = 0,
  6. String? scriptType,
  7. String? format,
  8. String? path,
})

Implementation

Map<String, Object?> deriveAddress(
    {required Map<String, Object?> source,
    String chain = 'bitcoin',
    int account = 0,
    int change = 0,
    int index = 0,
    String? scriptType,
    String? format,
    String? path}) {
  final info = _chain(chain);
  _index(account, 'account');
  _index(change, 'change');
  _index(index, 'index');
  final script = scriptType ?? info.defaultScriptType;
  if (info.curve == 'ed25519') {
    final resolvedPath = _path(
        path ?? "m/44'/${info.coinType}'/$account'/$index'",
        ed25519: true);
    final node = Bip32Slip10Ed25519.fromSeed(_sourceSeed(source))
        .derivePath(resolvedPath);
    final public = node.publicKey.compressed;
    return _addressResult(info, resolvedPath, account, change, index, script,
        SolAddrEncoder().encodeKey(public), public.sublist(1));
  }
  final fmt = _format(info, format, script);
  final resolvedPath = _path(
      path ?? '${_accountPath(info, account, script, fmt)}/$change/$index');
  final node = Bip32Slip10Secp256k1.fromSeed(_sourceSeed(source))
      .derivePath(resolvedPath);
  final public = node.publicKey.compressed;
  return _addressResult(info, resolvedPath, account, change, index, script,
      _publicKeyAddress(public, info, script), public);
}