@avalanche-sdk/interchain
Version:
Interchain package for handling ICM/ICTT messages
59 lines • 3.05 kB
JavaScript
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