UNPKG

@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

123 lines (105 loc) 4.54 kB
// import { parseAvalancheAccount } from "src/accounts/utils/parseAvalancheAccount"; // import { AvalancheWalletCoreClient } from "src/clients/createAvalancheWalletCoreClient"; // import { getErc20Decimals } from "./getErc20Decimals"; // import { getErc20Name } from "./getErc20Name"; // import { getErc20Symbol } from "./getErc20Symbol"; // import { // BridgeErc20ToL1Parameters, // BridgeErc20ToL1ReturnType, // } from "./types/bridgeErc20ToL1"; // import { readContract } from "viem/actions"; // import { teleporterRegistryABI } from "../abis/teleporterRegistry"; // import { deployTokenHome } from "./deployTokenHome"; // import { deployTokenRemote } from "./deployTokenRemote"; // import { erc20ABI } from "../abis/erc20"; // export async function bridgeErc20ToL1( // client: AvalancheWalletCoreClient, // params: BridgeErc20ToL1Parameters // ): Promise<BridgeErc20ToL1ReturnType> { // let { // destinationChain, // erc20TokenAddr, // amount, // recipient, // destinationBlockchainID, // homeBlockchainID, // gasLimit, // feeReceiver, // tokenRemoteAddr, // tokenHomeAddr, // account, // } = params; // const acc = parseAvalancheAccount(account); // if (!acc && !client.account) { // throw new Error("no account found"); // } // const homeTeleporterRegistryAddr = (client.chain?.contracts?.['teleporterRegistry'] as any)?.['address']; // const homeTeleporterManagerAddr = acc?.evmAccount.address || (client.account as any)?.address; // const remoteTeleporterRegistryAddr = (destinationChain?.contracts?.['teleporterRegistry'] as any)?.['address']; // if (!homeTeleporterRegistryAddr || !remoteTeleporterRegistryAddr) { // throw new Error("Teleporter registry address not found for destination or source chain"); // } // console.log("Fetching Erc20 token details........"); // const tokenName = await getErc20Name(client, { // contractAddress: erc20TokenAddr, // }); // const tokenSymbol = await getErc20Symbol(client, { // contractAddress: erc20TokenAddr, // }); // const tokenDecimals = await getErc20Decimals(client, { // contractAddress: erc20TokenAddr, // }); // console.log("Token details fetched successfully........"); // console.log("Token name: ", tokenName); // console.log("Token symbol: ", tokenSymbol); // console.log("Token decimals: ", tokenDecimals); // if (!tokenHomeAddr) { // try { // if (!homeBlockchainID) { // console.log("Fetching home blockchain ID........"); // homeBlockchainID = await readContract(client, { // account: acc?.evmAccount, // address: homeTeleporterRegistryAddr, // abi: teleporterRegistryABI, // functionName: "blockchainID", // }) as string; // console.log("Home blockchain ID fetched successfully........"); // console.log("Home blockchain ID: ", homeBlockchainID); // } // const tokenHome = await deployTokenHome(client, { // account: acc, // erc20ContractAddr: erc20TokenAddr, // minTeleporterVersion: 1, // teleporterRegistryAddr: homeTeleporterRegistryAddr, // teleporterManagerAddr: homeTeleporterManagerAddr, // decimals: tokenDecimals, // }); // if (tokenHome.status === "success") { // tokenHomeAddr = tokenHome.contractAddress as any; // console.log("Token home deployed successfully........"); // console.log("Token home address: ", tokenHomeAddr); // } else { // throw new Error("Token home deployment failed"); // } // } catch (error) { // console.error("Error deploying token home: ", error); // throw error; // } // } // if (!tokenRemoteAddr) { // try { // const tokenRemote = await deployTokenRemote(client, { // minTeleporterVersion: 1, // remoteTeleporterRegistryAddr: remoteTeleporterRegistryAddr, // remoteTeleporterManagerAddr: remoteTeleporterMessengerAddr, // tokenHomeBlockchainId: homeBlockchainID, // tokenHomeContractAddr: tokenHomeAddr, // remoteTokenName: tokenName, // remoteTokenSymbol: tokenSymbol, // decimals, // }); // if (tokenRemote.status === "success") { // tokenRemoteAddr = tokenRemote.contractAddress as any; // console.log("Token remote deployed successfully........"); // } // }