getFactoidAddressFromRCDHash function
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;
}