toEIP55Address function
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);
}