Address.parse constructor

Address.parse(
  1. ViteAddress address
)

Implementation

factory Address.parse(ViteAddress address) {
  if (address.length != kViteAddressLength) {
    throw Exception('Invalid address length');
  }
  if (!address.startsWith(kViteAddressPrefix)) {
    throw Exception('Invalid Vite Address format');
  }

  final addressHex = address.substring(kViteAddressPrefix.length);
  if (!utils.isHex(addressHex)) {
    throw Exception('Invalid Vite Address format');
  }

  final coreHex = addressHex.substring(0, 2 * kAddressCoreSize);
  final checksumHex = addressHex.substring(2 * kAddressCoreSize);
  final core = utils.hexToBytes(coreHex);
  final checksum = utils.digest(
    data: core,
    digestSize: kAddressChecksumSize,
  );

  if (checksum.hex == checksumHex) {
    return Address.user(core);
  } else if (checksum.complement.hex == checksumHex) {
    return Address.contract(core);
  } else {
    throw Exception('Incorrect checksum');
  }
}