diff --git a/client/src/chains/avalancheLocal.ts b/client/src/chains/avalancheLocal.ts new file mode 100644 index 00000000..d273c78f --- /dev/null +++ b/client/src/chains/avalancheLocal.ts @@ -0,0 +1,15 @@ +import { defineChain } from "viem"; + +export const avalancheLocal = /*#__PURE__*/ defineChain({ + id: 43_112, + name: "Avalanche Local", + nativeCurrency: { + decimals: 18, + name: "Avalanche", + symbol: "AVAX", + }, + rpcUrls: { + default: { http: ["http://127.0.0.1:9650/ext/bc/C/rpc"] }, + }, + testnet: true, +}); diff --git a/client/src/chains/index.test.ts b/client/src/chains/index.test.ts index 560a7d93..9706330f 100644 --- a/client/src/chains/index.test.ts +++ b/client/src/chains/index.test.ts @@ -171,6 +171,7 @@ test("exports", () => { "fantom", "avalanche", "avalancheFuji", + "avalancheLocal", "fantomSonicTestnet", "fantomTestnet", "fibo", diff --git a/client/src/chains/index.ts b/client/src/chains/index.ts index 95a6b8da..45cd1966 100644 --- a/client/src/chains/index.ts +++ b/client/src/chains/index.ts @@ -174,6 +174,7 @@ export type { } from "viem/chains"; export { avalanche } from "./avalanche.js"; export { avalancheFuji } from "./avalancheFuji.js"; +export { avalancheLocal } from "./avalancheLocal.js"; /** @deprecated Use `sonicTestnet` instead. */ export { fantomSonicTestnet, diff --git a/client/src/clients/createAvalancheClient.ts b/client/src/clients/createAvalancheClient.ts index c076141d..40f9a87b 100644 --- a/client/src/clients/createAvalancheClient.ts +++ b/client/src/clients/createAvalancheClient.ts @@ -8,6 +8,7 @@ import { RpcSchema, Transport, } from "viem"; +import { AVALANCHE_CHAIN_IDS } from "../methods/consts.js"; import { AvalanchePublicRpcSchema } from "../methods/public/avalanchePublicRpcSchema.js"; import { createAdminApiClient } from "./createAdminApiClient.js"; import { createCChainClient } from "./createCChainClient.js"; @@ -23,6 +24,8 @@ import { AvalancheClientConfig, } from "./types/createAvalancheClient.js"; import { createAvalancheTransportClient } from "./utils.js"; + +const AVALANCHE_CHAIN_ID_VALUES = Object.values(AVALANCHE_CHAIN_IDS) as number[]; /** * Creates an Avalanche Client with a given transport configured for a Chain. * @@ -120,7 +123,7 @@ export function createAvalancheClient< }); const extendedClient = client.extend(avalanchePublicActions) as any; - if (chainConfig?.id !== 43_113 && chainConfig?.id !== 43_114) { + if (!chainConfig?.id || !AVALANCHE_CHAIN_ID_VALUES.includes(chainConfig.id)) { return { ...extendedClient, }; diff --git a/client/src/clients/utils.ts b/client/src/clients/utils.ts index 0465caa8..5853c6af 100644 --- a/client/src/clients/utils.ts +++ b/client/src/clients/utils.ts @@ -9,6 +9,9 @@ import { } from "viem"; import { commonHeaders } from "./common.js"; import { AvalancheTransportConfig, ClientType } from "./types/types.js"; +import { AVALANCHE_CHAIN_IDS } from "../methods/consts.js"; + +const AVALANCHE_CHAIN_ID_VALUES = Object.values(AVALANCHE_CHAIN_IDS) as number[]; export function createAvalancheTransportClient< transport extends Transport, @@ -94,7 +97,7 @@ function getClientURL( clientType: ClientType = "public", transportType: "http" | "webSocket" = "http" ): string | undefined { - if (chain?.id !== 43_113 && chain?.id !== 43_114) { + if (!chain?.id || !AVALANCHE_CHAIN_ID_VALUES.includes(chain.id)) { return url ?? chain?.rpcUrls.default[transportType]?.[0]; } diff --git a/client/src/methods/consts.ts b/client/src/methods/consts.ts index 9a00cfa6..db46ee3c 100644 --- a/client/src/methods/consts.ts +++ b/client/src/methods/consts.ts @@ -1,14 +1,32 @@ +// Chain IDs for easy reference +export const AVALANCHE_CHAIN_IDS = { + MAINNET: 43114, + FUJI: 43113, + LOCAL: 43112, +} as const; + +// Network IDs (different from chain IDs) +export const AVALANCHE_NETWORK_IDS = { + MAINNET: 1, + FUJI: 5, + LOCAL: 1337, +} as const; + export const P_CHAIN_MAINNET_ID = '11111111111111111111111111111111LpoYY'; export const P_CHAIN_FUJI_ID = '11111111111111111111111111111111LpoYY'; +export const P_CHAIN_LOCAL_ID = '11111111111111111111111111111111LpoYY'; export const P_CHAIN_ALIAS = 'P'; export const X_CHAIN_MAINNET_ID = '2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM'; export const X_CHAIN_FUJI_ID = '2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm'; +export const X_CHAIN_LOCAL_ID = '2eNy1mUFdmaxXNj1eQHUe7Np4gju9sJsEtWQ4MX3ToiNKuADed'; export const X_CHAIN_ALIAS = 'X'; export const C_CHAIN_MAINNET_ID = '2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5'; export const C_CHAIN_FUJI_ID = 'yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp'; +export const C_CHAIN_LOCAL_ID = '2CA6j5zYzasynPsFeNoqWkmTCt3VScMvXUZHbfDJ8k3oGzAPtU'; export const C_CHAIN_ALIAS = 'C'; export const MAINNET_NETWORK_ID = 1; -export const TESTNET_NETWORK_ID = 5; \ No newline at end of file +export const TESTNET_NETWORK_ID = 5; +export const LOCAL_NETWORK_ID = 1337; \ No newline at end of file diff --git a/client/src/methods/index.test.ts b/client/src/methods/index.test.ts index 2df70a92..2c705ba5 100644 --- a/client/src/methods/index.test.ts +++ b/client/src/methods/index.test.ts @@ -110,17 +110,23 @@ test("exports", () => { "watchEvent", "watchPendingTransactions", "writeContract", + "AVALANCHE_CHAIN_IDS", + "AVALANCHE_NETWORK_IDS", "P_CHAIN_MAINNET_ID", "P_CHAIN_FUJI_ID", + "P_CHAIN_LOCAL_ID", "P_CHAIN_ALIAS", "X_CHAIN_MAINNET_ID", "X_CHAIN_FUJI_ID", + "X_CHAIN_LOCAL_ID", "X_CHAIN_ALIAS", "C_CHAIN_MAINNET_ID", "C_CHAIN_FUJI_ID", + "C_CHAIN_LOCAL_ID", "C_CHAIN_ALIAS", "MAINNET_NETWORK_ID", "TESTNET_NETWORK_ID", + "LOCAL_NETWORK_ID", ] `); });