toEIP55Address function

String toEIP55Address(
  1. String address
)

Converts an upper or lower case Web3/Ethereum address to a checksum address (EIP55).

Implementation

String toEIP55Address(String address) {
  bool startsWith0x = address.startsWith('0x') || address.startsWith('0X');
  if (startsWith0x) {
    address = address.substring(2);
  }

  var keccak = KeccakDigest(256);
  keccak.update(Uint8List.fromList(address.toLowerCase().codeUnits), 0,
      address.codeUnits.length);

  var out = Uint8List(32);
  keccak.doFinal(out, 0);
  var sha = _toHex(out);

  var o = <int>[];

  if (startsWith0x) {
    o.add(0x30);
    o.add(0x78);
  }

  for (int i = 0; i < address.length; i++) {
    var n = int.parse(sha[i], radix: 16);
    if (n >= 8) {
      o.add(address[i].toUpperCase().codeUnits.first);
    } else {
      o.add(address[i].toLowerCase().codeUnits.first);
    }
  }

  return String.fromCharCodes(o);
}