UNPKG

@avalanche-sdk/interchain

Version:
58 lines 2.54 kB
import { utils, pvmSerial, Address, Bytes, Short } from "@avalabs/avalanchejs"; import { parseWarpMessage } from "./warpMessage"; import { evmOrBech32AddressToBytes } from "./utils"; const warpManager = pvmSerial.warp.getWarpManager(); /** * Parses a Warp AddressedCall payload from a hex string. * * @param addressedCallPayloadHex - The hex string representing the AddressedCall payload. * @returns The parsed AddressedCall instance. {@link AddressedCall} */ export function parseAddressedCallPayload(addressedCallPayloadHex) { try { const parsedAddressedCallPayload = warpManager.unpack(utils.hexToBuffer(addressedCallPayloadHex), pvmSerial.warp.AddressedCallPayloads.AddressedCall); return new AddressedCall(parsedAddressedCallPayload.sourceAddress, parsedAddressedCallPayload.payload); } catch (error) { const warpMsg = parseWarpMessage(addressedCallPayloadHex); const addressedCallPayload = parseAddressedCallPayload(warpMsg.unsignedMessage.payload.toString('hex')); return addressedCallPayload; } } /** * Creates a new AddressedCall from values. * * @param sourceAddress - The source address (EVM or Bech32 format). * @param payloadHex - The payload as a hex string. * @returns A new AddressedCall instance. {@link AddressedCall} */ export function newAddressedCallPayload(sourceAddress, payloadHex) { const sourceAddressBytes = evmOrBech32AddressToBytes(sourceAddress); const payloadBytes = utils.hexToBuffer(payloadHex); return new AddressedCall(new Address(sourceAddressBytes), new Bytes(payloadBytes)); } /** * AddressedCall class provides utility methods to build * and parse AddressedCall payloads from hex strings or values, and * access its properties. */ export class AddressedCall extends pvmSerial.warp.AddressedCallPayloads.AddressedCall { static fromHex(addressedCallPayloadHex) { return parseAddressedCallPayload(addressedCallPayloadHex); } static fromValues(sourceAddress, payloadHex) { return newAddressedCallPayload(sourceAddress, payloadHex); } toHex() { const bytesWithoutCodec = this.toBytes(pvmSerial.warp.codec); const codecBytes = new Short(0); return utils.bufferToHex(Buffer.concat([codecBytes.toBytes(), bytesWithoutCodec])); } /** * Do not use this method directly. */ static fromBytes(_bytes, _codec) { throw new Error('Do not use `AddressedCall.fromBytes` method directly.'); } } //# sourceMappingURL=addressedCallPayload.js.map