> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aultblockchain.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect a Wallet

Use the [Testnet](/network-information/testnet) page to get the current network values.

## Add Testnet to MetaMask

<button
  onClick={async () => {
const discoverEip6963Providers = () =>
  new Promise((resolve) => {
    const announced = [];
    const handler = (event) => {
      if (event?.detail?.provider) announced.push(event.detail);
    };

    window.addEventListener("eip6963:announceProvider", handler);
    window.dispatchEvent(new Event("eip6963:requestProvider"));

    setTimeout(() => {
      window.removeEventListener("eip6963:announceProvider", handler);
      resolve(announced);
    }, 400);
  });

const eip6963 = await discoverEip6963Providers();
const eip6963MetaMask = eip6963.find((item) => {
  const rdns = (item?.info?.rdns || "").toLowerCase();
  const name = (item?.info?.name || "").toLowerCase();
  return rdns.includes("metamask") || name.includes("metamask");
})?.provider;

const injected = window?.ethereum;
const allProviders =
  injected?.providers?.length > 0
    ? injected.providers
    : injected
    ? [injected]
    : [];

const injectedMetaMaskCandidates = allProviders.filter((p) => !!p?.isMetaMask);

// Prefer EIP-6963 MetaMask, then injected MetaMask candidates.
const metaMaskProvider =
  eip6963MetaMask ||
  injectedMetaMaskCandidates.find((p) => !!p?._metamask) ||
  injectedMetaMaskCandidates[0] ||
  null;

if (!metaMaskProvider?.request) {
  const providerSummary = allProviders.map((p, i) => ({
    index: i,
    isMetaMask: !!p?.isMetaMask,
    isUniswapWallet: !!p?.isUniswapWallet,
    isOkxWallet: !!p?.isOkxWallet || !!p?.isOKXWallet,
    isCoinbaseWallet: !!p?.isCoinbaseWallet,
    isRabby: !!p?.isRabby,
    isTrust: !!p?.isTrust
  }));
  const eip6963Summary = eip6963.map((p, i) => ({
    index: i,
    name: p?.info?.name,
    rdns: p?.info?.rdns
  }));
  console.log("Injected providers:", providerSummary);
  console.log("EIP-6963 providers:", eip6963Summary);
  alert(
    "MetaMask provider was not found. Open browser console to inspect detected providers, then disable non-MetaMask injection and try again."
  );
  return;
}

try {
  await metaMaskProvider.request({
    method: "wallet_addEthereumChain",
    params: [
      {
        chainId: "0x2a98",
        chainName: "Ault Testnet",
        nativeCurrency: {
          name: "Ault Test Token",
          symbol: "AULT",
          decimals: 18
        },
        rpcUrls: ["https://test-json-rpc.cloud.aultblockchain.xyz"],
        blockExplorerUrls: ["https://ault-evm-testnet.explorer.xangle.io"]
      }
    ]
  });
} catch (error) {
  console.error(error);
  const msg = String(error?.message || "");
  if (msg.toLowerCase().includes("does not support wallet_addethereumchain")) {
    alert(
      "The selected provider does not support wallet_addEthereumChain. In your wallet extension settings, set MetaMask as the default injected wallet and disable Uniswap injection override."
    );
    return;
  }
  alert(
    `Failed to add Ault Testnet in MetaMask: ${error?.message || "Unknown error"}`
  );
}
}}
  style={{
padding: "10px 14px",
borderRadius: "8px",
border: "1px solid #d9d9d9",
fontWeight: 600,
cursor: "pointer"
}}
>
  Add Ault Testnet to MetaMask
</button>

If the button does not work in your browser, add the network manually using the values on the [Testnet](/network-information/testnet) page.
