type-safe clients for axelar's cosmos node
pnpm add @axelarjs/cosmos
Simulate a link
transaction
import { AXELAR_RPC_URLS } from "@axelarjs/core";
import { STANDARD_FEE } from "@axelarjs/cosmos/constants";
import { createAxelarSigningClient } from "@axelarjs/cosmos/constants/stargateClient";
import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { toAccAddress } from "@cosmjs/stargate/build/queryclient/utils";
const offlineSigner = await DirectSecp256k1HdWallet.fromMnemonic(
process.env["COSMOS_WALLET_MNEMONIC"] as string,
{ prefix: "axelar" }
);
const client = await createAxelarSigningClient(
AXELAR_RPC_URLS.testnet,
offlineSigner
);
const [accData] = await offlineSigner.getAccounts();
if (!accData) {
throw new Error("Invalid response from offlineSigner.getAccounts()");
}
const estimateGas = await client.tx.evm.link.simulate(accData.address, {
sender: toAccAddress(String(accData.address)),
recipientAddr: "0xB8Cd93C83A974649D76B1c19f311f639e62272BC",
recipientChain: "avalanche",
asset: "wavax-wei",
chain: "fantom",
});
console.log({ estimateGas });
Broadcast a link
transaction
import { AXELAR_RPC_URLS } from "@axelarjs/core";
import { STANDARD_FEE } from "@axelarjs/cosmos/constants";
import { createAxelarSigningClient } from "@axelarjs/cosmos/constants/stargateClient";
import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { toAccAddress } from "@cosmjs/stargate/build/queryclient/utils";
const offlineSigner = await DirectSecp256k1HdWallet.fromMnemonic(
process.env["COSMOS_WALLET_MNEMONIC"] as string,
{ prefix: "axelar" }
);
const client = await createAxelarSigningClient(
AXELAR_RPC_URLS.testnet,
offlineSigner
);
const [accData] = await offlineSigner.getAccounts();
if (!accData) {
throw new Error("Invalid response from offlineSigner.getAccounts()");
}
const txResponse = await client.tx.evm.link.signAndBroadcast(
accData.address,
{
sender: toAccAddress(String(accData?.address)),
recipientAddr: "0xB8Cd93C83A974649D76B1c19f311f639e62272BC",
recipientChain: "avalanche",
asset: "wavax-wei",
chain: "fantom",
},
STANDARD_FEE
);
console.log({ txResponse });