icp_id function
This function computes the textual ICP-account-identifier of a Principal account owner and an optional 32-bytes subaccount.
Implementation
String icp_id(Principal principal, {List<int>? subaccount_bytes}) {
subaccount_bytes ??= Uint8List(32);
if (subaccount_bytes.length != 32) { throw Exception(': subaccount_bytes-parameter of this function is with the length-quirement: 32-bytes.'); }
List<int> blobl = [];
blobl.addAll(utf8.encode('\x0Aaccount-id'));
blobl.addAll(principal.bytes);
blobl.addAll(subaccount_bytes);
Uint8List blob = Uint8List.fromList(sha224.convert(blobl).bytes);
Crc32 crc32 = Crc32();
crc32.add(blob);
List<int> text_format_bytes = [];
text_format_bytes.addAll(crc32.close());
text_format_bytes.addAll(blob);
String text_format = bytesasahexstring(text_format_bytes);
return text_format;
}