getFactoidAddressFromRCDHash function

String getFactoidAddressFromRCDHash(
  1. Uint8List rcd1Hash
)

Implementation

String getFactoidAddressFromRCDHash(Uint8List rcd1Hash) {

  if (rcd1Hash.length != 32) {
    print("invalid RCH Hash length must be 32 bytes");
    return "";
  }

  // hash := make([]byte, 34)
  Uint8List hash = Uint8List(34);
  // faPrefix := []byte{0x5f, 0xb1}
  Uint8List faPrefix = [0x5f, 0xb1].asUint8List();

  // copy(hash[:2], faPrefix)
  // copy(hash[2:], rcd[:])
  hash.setAll(0, faPrefix);
  hash.setAll(2, rcd1Hash);

  // checkSum := sha256.Sum256(hash[:])
  // checkSum = sha256.Sum256(checkSum[:])
  var checksumPre  = sha256.convert(hash);
  var checksum =  sha256.convert(checksumPre.bytes.asUint8List()).bytes.asUint8List();

  // fa := make([]byte, 38)
  Uint8List fa = Uint8List(38);

  // copy(fa[:34], hash)
  // copy(fa[34:], checkSum[:4])
  fa.setAll(0, hash);
  fa.setAll(34, checksum.sublist(0,4));

  // FA := base58.Encode(fa)
  String faAddress = base58.encode(fa);

  if(!faAddress.startsWith("FA")){
    print("invalid factoid address prefix, expecting FA but $faAddress");
    return "";
  }

  return faAddress;
}