publicKeyToAddress method

  1. @override
String publicKeyToAddress(
  1. Uint8List publicKey
)
override

Implementation

@override
String publicKeyToAddress(Uint8List publicKey) {
  final Algorithm = 'ed25519';
  final buf = List<int>.filled(65, 0);
  for (var i = 0; i < Algorithm.length; i++) {
    buf[i + 1] = Algorithm.codeUnitAt(i);
  }
  buf[17] = publicKey.length;
  for (var i = 0; i < publicKey.length; i++) {
    buf[i + 25] = publicKey[i];
  }

  final pubkeyHash =
      Blake2b.getBlake2bHash(Uint8List.fromList(buf.sublist(0, 57)));
  final timeLockHash = dynamicToUint8List(TIME_LOCK_HASH);
  final sigHash = dynamicToUint8List(SIG_HASH);

  buf[0] = 0x01;
  for (var i = 0; i < timeLockHash.length; i++) {
    buf[i + 1] = timeLockHash[i];
  }
  for (var i = 0; i < pubkeyHash.length; i++) {
    buf[i + 33] = pubkeyHash[i];
  }
  final tlpkHash = Blake2b.getBlake2bHash(Uint8List.fromList(buf));
  for (var i = 0; i < tlpkHash.length; i++) {
    buf[i + 1] = tlpkHash[i];
  }
  for (var i = 0; i < sigHash.length; i++) {
    buf[i + 33] = sigHash[i];
  }

  final unlockHash = Blake2b.getBlake2bHash(Uint8List.fromList(buf));
  final checksum = Blake2b.getBlake2bHash(Uint8List.fromList(unlockHash));
  final address = unlockHash + checksum.sublist(0, 6);
  return dynamicToString(address);
}