ALGOFLOW Docs

Wallet and Contracts

Implement MetaMask connect, network checks, and multi-contract interaction from static frontend code.

Last updated: 2026-03-22

Connect Wallet

Use browser-injected provider (window.ethereum) and request account access on user action.

Always validate chainId before contract calls to avoid sending transactions on wrong network.

Examplejavascript
import { BrowserProvider } from "ethers";

export async function connectWallet() {
  if (!window.ethereum) {
    throw new Error("MetaMask is not installed");
  }

  const provider = new BrowserProvider(window.ethereum);
  await provider.send("eth_requestAccounts", []);
  const signer = await provider.getSigner();
  const network = await provider.getNetwork();

  return {
    address: await signer.getAddress(),
    chainId: Number(network.chainId),
    provider,
    signer,
  };
}

Multiple Contracts by Chain

  • Keep ABI files versioned in source control.
  • Resolve addresses dynamically from active chainId.
  • Show clear UI errors for unsupported networks.
Examplejavascript
export const CONTRACTS = {
  11155111: {
    token: "0xTokenAddressOnSepolia",
    app: "0xAppAddressOnSepolia"
  },
  137: {
    token: "0xTokenAddressOnPolygon",
    app: "0xAppAddressOnPolygon"
  }
};

Transaction UX

  • Show pending state immediately after wallet confirmation.
  • Display transaction hash and explorer URL.
  • Handle reject/cancel and RPC errors separately.
  • Confirm mined transaction before optimistic UI finalization.