getFactoidAddressRcdHashPkeyFromPrivateFs function

Factoid getFactoidAddressRcdHashPkeyFromPrivateFs(
  1. String fsAddress
)

Implementation

Factoid getFactoidAddressRcdHashPkeyFromPrivateFs(String fsAddress) {
  Factoid f = Factoid();

  if (fsAddress.length != 52) {
    print("invalid factoid address length");
    return f;
  }

  if (!fsAddress.startsWith("Fs")) {
    print("invalid factoid address prefix: $fsAddress");
    return f;
  }

  Uint8List fsPrefix = [0x64, 0x78].asUint8List();
  var decodedFS = base58.decode(fsAddress);

  if (!( ListEquality().equals(decodedFS.sublist(0, 2), fsPrefix))) {
    print("invalid factoid base58 encoding prefix: $fsAddress");
    return f;
  }

  var checksumPre  = sha256.convert(decodedFS.sublist(0, 34));
  var checksum =  sha256.convert(checksumPre.bytes.asUint8List()).bytes.asUint8List();

  if( !(ListEquality().equals(decodedFS.sublist(34), checksum.sublist(0,4)) )){
    print("invalid checksum on factoid address: $fsAddress");
    return f;
  }

  var seed = decodedFS.sublist(2, 34);
  var keyPair = Ed25519Keypair.fromSeed(seed);
  var rcdHash = getRCDHashFromPublicKey(keyPair.publicKey, 1);
  var faAddress = getFactoidAddressFromRCDHash(rcdHash);

  Factoid f2 = Factoid();
  f2..faAddress = faAddress
    ..keypair = keyPair
    ..rcdHash = rcdHash;

  return f2;
}