> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-mintlify-fc5a1333.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Add Network to Your Wallet

> Add Injective networks to your browser wallet in one click. Interactive wallet buttons for Injective EVM (MetaMask and other EVM wallets) and Injective native (Keplr, Leap), covering mainnet and testnet.

Add Injective to your browser wallet with a single click, or use the manual
configuration details below. Injective exposes two interoperable interfaces:

* **Injective EVM** is an Ethereum-compatible JSON-RPC layer. Use it with EVM
  wallets such as MetaMask, Rabby, or any injected `window.ethereum` wallet.
* **Injective (CosmWasm / native)** is the native Cosmos SDK chain. Use it with
  Cosmos wallets such as Keplr and Leap.

<Info>
  Injective EVM and Injective native map to the same network. They use different
  chain IDs but share the same underlying state. See
  [Network Information](/developers/network-information) and
  [EVM Network Information](/developers-evm/network-information) for the full reference.
</Info>

## Injective EVM

Injective EVM works with EVM wallets like MetaMask, Rabby, and SubWallet. Pick a
network and click your wallet — it will prompt you to add or switch to Injective.

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective EVM Mainnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID 1776</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const eth = typeof window !== "undefined" ? window.ethereum : null;
    if (!eth) { finish("Wallet not found", false); alert("Please install MetaMask or another EVM wallet."); return; }
    const list = eth.providers && eth.providers.length ? eth.providers : [eth];
    const provider = list.find((p) => p && p.isMetaMask) || eth;
    provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x6f0" }]
      }).catch((error) => {
        if (error && error.code === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x6f0",
              chainName: "Injective",
              rpcUrls: ["https://sentry.evm-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/metamask.svg?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=4b8c336802935d8ed9eb971f48303200" alt="MetaMask" width="22" height="22" style={{ flexShrink: 0 }} data-path="img/wallets/metamask.svg" />

      <span data-wallet-label aria-live="polite">Add to MetaMask</span>
    </button>

    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const provider = typeof window !== "undefined" ? (window.SubWallet || window.ethereum) : null;
    if (!provider) { finish("Wallet not found", false); alert("Please install SubWallet."); return; }
    provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x6f0" }]
      }).catch((error) => {
        if (error && error.code === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x6f0",
              chainName: "Injective",
              rpcUrls: ["https://sentry.evm-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/subwallet.svg?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=681ef5b0483b05c74f77d65a3d4c4cc2" alt="SubWallet" width="22" height="22" style={{ flexShrink: 0, borderRadius: "5px" }} data-path="img/wallets/subwallet.svg" />

      <span data-wallet-label aria-live="polite">Add to SubWallet</span>
    </button>
  </div>
</div>

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective EVM Testnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID 1439</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const eth = typeof window !== "undefined" ? window.ethereum : null;
    if (!eth) { finish("Wallet not found", false); alert("Please install MetaMask or another EVM wallet."); return; }
    const list = eth.providers && eth.providers.length ? eth.providers : [eth];
    const provider = list.find((p) => p && p.isMetaMask) || eth;
    provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x59f" }]
      }).catch((error) => {
        if (error && error.code === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x59f",
              chainName: "Injective Testnet",
              rpcUrls: ["https://k8s.testnet.json-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://testnet.blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/metamask.svg?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=4b8c336802935d8ed9eb971f48303200" alt="MetaMask" width="22" height="22" style={{ flexShrink: 0 }} data-path="img/wallets/metamask.svg" />

      <span data-wallet-label aria-live="polite">Add to MetaMask</span>
    </button>

    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const provider = typeof window !== "undefined" ? (window.SubWallet || window.ethereum) : null;
    if (!provider) { finish("Wallet not found", false); alert("Please install SubWallet."); return; }
    provider.request({ method: "eth_requestAccounts" })
      .then(() => provider.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: "0x59f" }]
      }).catch((error) => {
        if (error && error.code === 4902) {
          return provider.request({
            method: "wallet_addEthereumChain",
            params: [{
              chainId: "0x59f",
              chainName: "Injective Testnet",
              rpcUrls: ["https://k8s.testnet.json-rpc.injective.network/"],
              nativeCurrency: { name: "Injective", symbol: "INJ", decimals: 18 },
              blockExplorerUrls: ["https://testnet.blockscout.injective.network/"]
            }]
          });
        }
        throw error;
      }))
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Add or switch network failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/subwallet.svg?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=681ef5b0483b05c74f77d65a3d4c4cc2" alt="SubWallet" width="22" height="22" style={{ flexShrink: 0, borderRadius: "5px" }} data-path="img/wallets/subwallet.svg" />

      <span data-wallet-label aria-live="polite">Add to SubWallet</span>
    </button>
  </div>
</div>

<Info>
  The button uses the standard `wallet_addEthereumChain` request. If the network
  is already added, your wallet shows a switch prompt instead. If nothing happens,
  add it manually with the values below.
</Info>

### Manual configuration

<Tabs>
  <Tab title="Injective EVM Mainnet" icon="server">
    | Property        | Value                                       |
    | --------------- | ------------------------------------------- |
    | Network Name    | Injective                                   |
    | Chain ID        | `1776`                                      |
    | RPC URL         | `https://sentry.evm-rpc.injective.network/` |
    | WS Endpoint     | `wss://sentry.evm-ws.injective.network`     |
    | Currency Symbol | `INJ`                                       |
    | Decimals        | `18`                                        |
    | Block Explorer  | `https://blockscout.injective.network/`     |
  </Tab>

  <Tab title="Injective EVM Testnet" icon="flask-vial">
    | Property        | Value                                                                           |
    | --------------- | ------------------------------------------------------------------------------- |
    | Network Name    | Injective Testnet                                                               |
    | Chain ID        | `1439`                                                                          |
    | RPC URL         | `https://k8s.testnet.json-rpc.injective.network/`                               |
    | WS Endpoint     | `wss://k8s.testnet.ws.injective.network/`                                       |
    | Currency Symbol | `INJ`                                                                           |
    | Decimals        | `18`                                                                            |
    | Block Explorer  | `https://testnet.blockscout.injective.network/`                                 |
    | Faucet          | [`testnet.faucet.injective.network`](https://testnet.faucet.injective.network/) |
  </Tab>
</Tabs>

## Injective (CosmWasm / Native)

The native Injective chain works with Cosmos wallets like Keplr and Leap.
Injective ships built into both wallets, so it is available out of the box.
Pick a network and click your wallet to unlock the chain.

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective Mainnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID injective-1</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const p = typeof window !== "undefined" ? window.keplr : null;
    if (!p) { finish("Wallet not found", false); alert("Please install the Keplr wallet."); return; }
    p.enable("injective-1")
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Keplr enable failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/keplr.png?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=2ecd0891c14c9d7b69b316ae7e3391de" alt="Keplr" width="22" height="22" style={{ flexShrink: 0, borderRadius: "5px" }} data-path="img/wallets/keplr.png" />

      <span data-wallet-label aria-live="polite">Add to Keplr</span>
    </button>

    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const p = typeof window !== "undefined" ? window.leap : null;
    if (!p) { finish("Wallet not found", false); alert("Please install the Leap wallet."); return; }
    p.enable("injective-1")
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Leap enable failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/leap.svg?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=2a20ee24f51f8347ac7240bf7ad0eb6e" alt="Leap" width="22" height="22" style={{ flexShrink: 0 }} data-path="img/wallets/leap.svg" />

      <span data-wallet-label aria-live="polite">Add to Leap</span>
    </button>
  </div>
</div>

<div style={{ border: "1px solid rgba(77,61,255,0.22)", borderRadius: "16px", padding: "16px 18px", background: "rgba(128,128,128,0.06)", marginBottom: "14px" }}>
  <div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between", marginBottom: "12px" }}>
    <span style={{ fontWeight: 700, fontSize: "15px" }}>Injective Testnet</span>
    <span style={{ fontSize: "12.5px", opacity: 0.6, fontFamily: "monospace" }}>Chain ID injective-888</span>
  </div>

  <div style={{ display: "flex", flexWrap: "wrap", gap: "10px" }}>
    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const p = typeof window !== "undefined" ? window.keplr : null;
    if (!p) { finish("Wallet not found", false); alert("Please install the Keplr wallet."); return; }
    p.enable("injective-888")
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Keplr enable failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/keplr.png?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=2ecd0891c14c9d7b69b316ae7e3391de" alt="Keplr" width="22" height="22" style={{ flexShrink: 0, borderRadius: "5px" }} data-path="img/wallets/keplr.png" />

      <span data-wallet-label aria-live="polite">Add to Keplr</span>
    </button>

    <button
      type="button"
      onClick={(event) => {
    const button = event.currentTarget;
    const label = button.querySelector("[data-wallet-label]");
    const originalLabel = label.textContent;
    const originalBorder = button.style.borderColor;
    const originalBackground = button.style.background;
    const originalOpacity = button.style.opacity;
    const finish = (message, success) => {
      label.textContent = message;
      button.style.borderColor = success ? "#22c55e" : "#ef4444";
      button.style.background = success ? "rgba(34,197,94,0.12)" : "rgba(239,68,68,0.10)";
      button.style.opacity = "1";
      window.setTimeout(() => {
        label.textContent = originalLabel;
        button.style.borderColor = originalBorder;
        button.style.background = originalBackground;
        button.style.opacity = originalOpacity;
        button.disabled = false;
      }, 2500);
    };
    label.textContent = "Connecting...";
    button.disabled = true;
    button.style.opacity = "0.72";
    const p = typeof window !== "undefined" ? window.leap : null;
    if (!p) { finish("Wallet not found", false); alert("Please install the Leap wallet."); return; }
    p.enable("injective-888")
      .then(() => {
        label.textContent = "Connected ✓";
        finish(label.textContent, true);
      })
      .catch((error) => {
        console.error("Leap enable failed:", error);
        label.textContent = error && error.code === 4001 ? "Request cancelled" : "Try again";
        finish(label.textContent, false);
      });
  }}
      style={{ display: "inline-flex", alignItems: "center", gap: "9px", padding: "9px 16px", borderRadius: "11px", border: "1px solid rgba(128,128,128,0.28)", background: "transparent", color: "inherit", fontWeight: 600, fontSize: "14px", cursor: "pointer", minWidth: "150px", transition: "all 160ms ease" }}
    >
      <img src="https://mintcdn.com/injectivelabs-mintlify-fc5a1333/7ope3ksNoD2ur9BK/img/wallets/leap.svg?fit=max&auto=format&n=7ope3ksNoD2ur9BK&q=85&s=2a20ee24f51f8347ac7240bf7ad0eb6e" alt="Leap" width="22" height="22" style={{ flexShrink: 0 }} data-path="img/wallets/leap.svg" />

      <span data-wallet-label aria-live="polite">Add to Leap</span>
    </button>
  </div>
</div>

<Info>
  Keplr and Leap include Injective by default, so the button simply unlocks the
  chain in your wallet. For a full wallet integration guide, see
  [Wallets](/defi/wallet/index).
</Info>

### Manual configuration

<Tabs>
  <Tab title="Injective Mainnet" icon="server">
    | Property        | Value                                     |
    | --------------- | ----------------------------------------- |
    | Chain ID        | `injective-1`                             |
    | RPC / Node      | `https://sentry.tm.injective.network:443` |
    | Currency Symbol | `INJ`                                     |
    | Decimals        | `18`                                      |
    | Explorer        | [`injscan.com`](https://injscan.com/)     |

    <Info>
      Injective natively uses the chain ID `injective-1`. Its EVM interface uses the
      numeric chain ID `1776`. Both map to the same mainnet.
    </Info>
  </Tab>

  <Tab title="Injective Testnet" icon="flask-vial">
    | Property        | Value                                                                               |
    | --------------- | ----------------------------------------------------------------------------------- |
    | Chain ID        | `injective-888`                                                                     |
    | RPC / Node      | `https://testnet.sentry.tm.injective.network:443`                                   |
    | Currency Symbol | `INJ`                                                                               |
    | Decimals        | `18`                                                                                |
    | Explorer        | [`testnet.explorer.injective.network`](https://testnet.explorer.injective.network/) |
    | Faucet          | [`testnet.faucet.injective.network`](https://testnet.faucet.injective.network/)     |

    <Info>
      Injective natively uses the chain ID `injective-888` on testnet. Its EVM
      interface uses the numeric chain ID `1439`. Both map to the same testnet.
    </Info>
  </Tab>
</Tabs>
