UNPKG

@avalanche-sdk/interchain

Version:
59 lines 3.05 kB
import { Address, BigIntPr, BlsPublicKey, Id, NodeId, pvmSerial, Short, utils } from "@avalabs/avalanchejs"; import { sha256 } from "@noble/hashes/sha2"; const warpManager = pvmSerial.warp.getWarpManager(); /** * Parses a ConversionData (SubnetToL1Conversion) from a hex string. * * @param conversionDataHex - The hex string representing the ConversionData. * @returns The parsed ConversionData instance. {@link ConversionData} */ export function parseConversionData(conversionDataHex) { const parsedConversionData = warpManager.unpack(utils.hexToBuffer(conversionDataHex), pvmSerial.warp.AddressedCallPayloads.ConversionData); return new ConversionData(parsedConversionData.subnetId, parsedConversionData.managerChainId, parsedConversionData.managerAddress, parsedConversionData.validators); } /** * Creates a new ConversionData from values. * * @param subnetId - The subnet ID (base58check encoded). * @param managerChainId - The manager chain ID (base58check encoded). * @param managerAddress - The manager address in Bech32 format. * @param validators - An array of validator data. * @param validators.nodeId - The node ID (base58check encoded). * @param validators.blsPublicKey - The BLS public key in hex format. * @param validators.weight - The weight of the validator as a bigint. * @returns A new ConversionData instance. {@link ConversionData} */ export function newConversionData(subnetId, managerChainId, managerAddress, validators) { const subnetIdBytes = utils.base58check.decode(subnetId); const managerChainIdBytes = utils.base58check.decode(managerChainId); const formattedValidators = validators.map((vldr) => new pvmSerial.warp.AddressedCallPayloads.ValidatorData(new NodeId(utils.base58check.decode(vldr.nodeId)), BlsPublicKey.fromHex(vldr.blsPublicKey), new BigIntPr(vldr.weight))); return new ConversionData(new Id(subnetIdBytes), new Id(managerChainIdBytes), Address.fromHex(managerAddress), formattedValidators); } /** * ConversionData class provides utility methods to build * and parse ConversionData from hex strings or values, and * access its properties. */ export class ConversionData extends pvmSerial.warp.AddressedCallPayloads.ConversionData { static fromHex(conversionDataHex) { return parseConversionData(conversionDataHex); } static fromValues(subnetId, managerChainId, managerAddress, validators) { return newConversionData(subnetId, managerChainId, managerAddress, validators); } toHex() { const bytesWithoutCodec = this.toBytes(pvmSerial.warp.codec); const codecBytes = new Short(0); return utils.bufferToHex(Buffer.concat([codecBytes.toBytes(), bytesWithoutCodec])); } getConversionId() { return utils.bufferToHex(sha256(utils.hexToBuffer(this.toHex()))); } /** * Do not use this method directly. */ static fromBytes(_bytes, _codec) { throw new Error('Do not use `ConversionData.fromBytes` method directly.'); } } //# sourceMappingURL=conversionData.js.map