@avalanche-sdk/client
Version:
A TypeScript SDK for interacting with the Avalanche network through JSON-RPC APIs. This SDK provides a comprehensive set of tools to interact with all Avalanche chains (P-Chain, X-Chain, C-Chain) and various APIs, including wallet functionality for transa
79 lines (70 loc) • 2.58 kB
text/typescript
import { Common, Credential, UnsignedTx, utils } from "@avalabs/avalanchejs";
/**
* Get a transaction from a buffer or hex string
* @param txBytes - The buffer or hex string to get the transaction from `string` or `Uint8Array`
* @param chainAlias - The chain alias to get the transaction from `"P" | "X" | "C"`
* @returns A array with the transaction {@link Common.Transaction} and credentials {@link Credential[]}
*
* @example
* ```ts
* import { getTxFromBytes } from "@avalanche-sdk/client/utils";
*
* const [tx, credentials] = getTxFromBytes("0x1234567890abcdef", "P");
* ```
*/
export function getTxFromBytes(
txBytes: string,
chainAlias: "P" | "X" | "C"
): [Common.Transaction, Credential[]] {
const strippedTxBytes = utils.strip0x(txBytes);
const manager = utils.getManagerForVM(
chainAlias === "P" ? "PVM" : chainAlias === "X" ? "AVM" : "EVM"
);
const parsedTx = manager.unpackTransaction(
Buffer.from(strippedTxBytes, "hex")
);
const txBytesWithoutCreds = utils.bufferToHex(
parsedTx.toBytes(manager.getDefaultCodec())
);
// get first 6 bytes (codec + type)
const codecAndType = strippedTxBytes.slice(0, 12);
// replace txBytesWithoutCreds from txBytes to get credentials
const creds = strippedTxBytes.replace(
codecAndType + utils.strip0x(txBytesWithoutCreds),
""
);
// remove type from the creds (frist 4 bytes)
const credsWithoutType = Buffer.from(utils.strip0x(creds).slice(8), "hex");
const credentials: Credential[] = [];
let remainingBytes = new Uint8Array(credsWithoutType);
// signature length is 65 bytes
while (remainingBytes.length >= 65) {
const [cred, rest] = Credential.fromBytes(
remainingBytes.slice(4),
manager.getDefaultCodec()
);
credentials.push(cred);
remainingBytes = rest;
}
return [parsedTx, credentials];
}
/**
* Get an unsigned transaction from a buffer or hex string
* @param txBytes - The buffer or hex string to get the transaction from `string` or `Uint8Array`
* @param chainAlias - The chain alias to get the transaction from `"P" | "X" | "C"`
* @returns An unsigned transaction {@link UnsignedTx}
*
* @example
* ```ts
* import { getUnsignedTxFromBytes } from "@avalanche-sdk/client/utils";
*
* const unsignedTx = getUnsignedTxFromBytes("0x1234567890abcdef", "P");
* ```
*/
export function getUnsignedTxFromBytes(
txBytes: string,
chainAlias: "P" | "X" | "C"
): UnsignedTx {
const [tx, credentials] = getTxFromBytes(txBytes, chainAlias);
return new UnsignedTx(tx, [], new utils.AddressMaps(), credentials);
}