ADAByronAddr.deserialize constructor

ADAByronAddr.deserialize(
  1. List<int> serAddrBytes
)

Implementation

factory ADAByronAddr.deserialize(List<int> serAddrBytes) {
  final addrBytes = CborListValue.decode(serAddrBytes);
  if (addrBytes.value.length != 2) {
    throw AddressConverterException.addressBytesValidationFailed();
  }
  if (!addrBytes.isTypeAt<CborTagValue>(0) ||
      !addrBytes.isTypeAt<CborIntValue>(1)) {
    throw AddressConverterException.addressBytesValidationFailed();
  }
  final decodeCbor = addrBytes.objectAt<CborTagValue>(0);
  if (decodeCbor.tags.isEmpty ||
      decodeCbor.tags.first != ADAByronAddrConst.payloadTag ||
      decodeCbor.value is! CborBytesValue) {
    throw AddressConverterException.addressBytesValidationFailed();
  }

  final crcTag = addrBytes.objectAt<CborIntValue>(1).value;
  final List<int> payloadBytes = decodeCbor.asValue<CborBytesValue>().value;
  final crc32Got = Crc32().quickIntDigest(payloadBytes);
  if (crc32Got != crcTag) {
    throw AddressConverterException.addressBytesValidationFailed();
  }

  return ADAByronAddr(payload: ADAByronAddrPayload.deserialize(payloadBytes));
}