ethChecksum function

String ethChecksum(
  1. String address
)

Implementation

String ethChecksum(String address) {
  final addr = address.toLowerCase().substring(2);
  final hashed = HEX.encode(keccak256(utf8.encode(addr) as Uint8List));

  String addrChecksum = "";
  for (var char in addr.split('')) {
    if ("0123456789".contains(char)) {
      addrChecksum += char;
    } else if ("abcdef".contains(char)) {
      // Check if the corresponding hex digit (nibble) in the hash is 8 or higher
      final hashedNibble = int.parse(hashed[addrChecksum.length], radix: 16);
      if (hashedNibble >= 8) {
        addrChecksum += char.toUpperCase();
      } else {
        addrChecksum += char;
      }
    } else {
      throw ArgumentError("Unrecognized hex character");
    }
  }
  return "0x$addrChecksum";
}