legacyToBch static method

String legacyToBch({
  1. required String address,
  2. required String prefix,
})

Implementation

static String legacyToBch({required String address, required String prefix}) {
  final decode = bs58check.decode(address);
  final hash = decode.sublist(1);
  final normalizedPrefix = prefix.toLowerCase();
  final isMainnet = normalizedPrefix == 'bitcoincash';
  final pubKeyHashVersion = isMainnet ? 0x00 : 0x6f;
  final scriptHashVersion = isMainnet ? 0x05 : 0xc4;
  final type = decode.first == pubKeyHashVersion
      ? 'P2PKH'
      : decode.first == scriptHashVersion
      ? 'P2SH'
      : throw ArgumentError('Legacy address does not match CashAddr network');

  final prefixData = prefixToUint5Array(normalizedPrefix) + [0];
  final versionByte = getTypeBits(type) + getHashSizeBits(hash);
  final payloadData = convertBits([versionByte] + hash, 8, 5);
  final checksumData =
      prefixData + payloadData + List.generate(8, (index) => 0);
  final payload = payloadData + checksumToUint5Array(polymod(checksumData));

  return '$normalizedPrefix:${base32Encode(payload)}';
}