CashToken.deserialize constructor
CashToken.deserialize(
- Uint8List bytes
Implementation
factory CashToken.deserialize(Uint8List bytes) {
var offset = 0;
if (bytes[offset] != 0xef) {
throw FormatException('Missing CashToken prefix byte 0xEF');
}
offset++;
final categoryId = bytes.sublist(offset, offset + 32);
offset += 32;
final bitfield = bytes[offset++];
final hasNft = (bitfield & 0x20) != 0;
final hasAmount = (bitfield & 0x10) != 0;
final cap = hasNft
? CashTokenCapability.fromFlag(bitfield & 0x0f)
: CashTokenCapability.none;
Uint8List? commitment;
if (hasNft) {
final len = bytes[offset++];
if (len > 0) {
commitment = bytes.sublist(offset, offset + len);
offset += len;
}
}
var amount = BigInt.zero;
if (hasAmount) {
final first = bytes[offset++];
if (first < 0xfd) {
amount = BigInt.from(first);
} else if (first == 0xfd) {
amount = BigInt.from(bytes[offset] | (bytes[offset + 1] << 8));
offset += 2;
} else if (first == 0xfe) {
amount = BigInt.from(bytes[offset] |
(bytes[offset + 1] << 8) |
(bytes[offset + 2] << 16) |
(bytes[offset + 3] << 24));
offset += 4;
}
}
return CashToken(
categoryId: categoryId,
capability: cap,
commitment: commitment,
amount: amount,
);
}