@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
108 lines (95 loc) • 3.03 kB
text/typescript
import { Context as ContextType, Id } from "@avalabs/avalanchejs";
import { AvalancheWalletCoreClient } from "../../clients/createAvalancheWalletCoreClient.js";
import { getBlockchainID } from "../info/getBlockchainID.js";
import { getNetworkID } from "../info/getNetworkID.js";
import { getFeeConfig } from "../pChain/getFeeConfig.js";
import { getAssetDescription } from "../xChain/getAssetDescription.js";
import { getTxFee } from "../xChain/getTxFee.js";
export const PrimaryNetworkID = new Id(new Uint8Array(32));
export const PlatformChainID = new Id(new Uint8Array(32));
export const MainnetName = "mainnet";
export const CascadeName = "cascade";
export const DenaliName = "denali";
export const EverestName = "everest";
export const FujiName = "fuji";
export const TestnetName = "testnet";
export const UnitTestName = "testing";
export const LocalName = "local";
export const MainnetID = 1;
export const CascadeID = 2;
export const DenaliID = 3;
export const EverestID = 4;
export const FujiID = 5;
export const TestnetID = FujiID;
export const UnitTestID = 10;
export const LocalID = 12345;
export const MainnetHRP = "avax";
export const CascadeHRP = "cascade";
export const DenaliHRP = "denali";
export const EverestHRP = "everest";
export const FujiHRP = "fuji";
export const UnitTestHRP = "testing";
export const LocalHRP = "local";
export const FallbackHRP = "custom";
export const NetworkIDToHRP = {
[MainnetID]: MainnetHRP,
[CascadeID]: CascadeHRP,
[DenaliID]: DenaliHRP,
[EverestID]: EverestHRP,
[FujiID]: FujiHRP,
[UnitTestID]: UnitTestHRP,
[LocalID]: LocalHRP,
};
/**
* Returns the human readable part for a bech32 string given the network ID.
* @param networkID
*/
export const getHRP = (networkID: number): string => {
return (
NetworkIDToHRP[networkID as keyof typeof NetworkIDToHRP] ?? FallbackHRP
);
};
export const getContextFromURI = async (
client: AvalancheWalletCoreClient,
assetDescription = "AVAX"
): Promise<ContextType.Context> => {
const { assetID: avaxAssetID } = await getAssetDescription(
client.xChainClient,
{
assetID: assetDescription,
}
);
const { txFee, createAssetTxFee } = await getTxFee(client.xChainClient);
const { blockchainID: xBlockchainID } = await getBlockchainID(
client.infoClient,
{
alias: "X",
}
);
const { blockchainID: pBlockchainID } = await getBlockchainID(
client.infoClient,
{
alias: "P",
}
);
const { blockchainID: cBlockchainID } = await getBlockchainID(
client.infoClient,
{
alias: "C",
}
);
const { networkID: networkIDstring } = await getNetworkID(client.infoClient);
const networkID = Number(networkIDstring);
const platformFeeConfig = await getFeeConfig(client.pChainClient);
return Object.freeze({
xBlockchainID,
pBlockchainID,
cBlockchainID,
avaxAssetID,
baseTxFee: BigInt(txFee),
createAssetTxFee: BigInt(createAssetTxFee),
networkID,
hrp: getHRP(networkID),
platformFeeConfig,
});
};