> ## Documentation Index
> Fetch the complete documentation index at: https://unevenlabs-docs-drift-src-aa153b3060-2d3471a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Contract Addresses

> Find platform execution contracts and distinguish them from solver addresses

export const Contracts = ({env, id}) => {
  const key = `chains-${env}`;
  if (typeof window === "undefined") {
    return null;
  }
  if (!window[key]) {
    window[key] = {
      fetching: false,
      data: null
    };
  }
  if (!window[key].fetching) {
    const appendContracts = data => {
      const rootElement = document.getElementById(id);
      if (!rootElement) {
        return;
      }
      const rows = data.sort((a, b) => a.displayName.localeCompare(b.displayName)).map(chain => {
        return `<tr key=${chain.id}>
        <td style="text-transform: capitalize;">${chain.displayName}</td>
        <td>${chain.id}</td>
        <td>
          ${chain.contracts.relayReceiver > 0 ? chain.contracts.relayReceiver : "N/A"}
        </td>
        <td>
          ${chain.contracts.erc20Router > 0 ? chain.contracts.erc20Router : "N/A"}
        </td>
        <td>
          ${chain.contracts.approvalProxy > 0 ? chain.contracts.approvalProxy : "N/A"}
        </td>
      </tr>`;
      });
      rootElement.innerHTML = rows.join("");
      const loaderContainer = document.getElementById(`loader-container-${id}`);
      if (loaderContainer) {
        loaderContainer.style.display = "none";
      }
    };
    const fetchChains = async () => {
      try {
        window[key].fetching = true;
        window[key].data = null;
        const response = await fetch(env === "testnets" ? "https://api.testnets.relay.link/chains" : "https://api.relay.link/chains");
        const data = await response.json();
        window[key].fetching = false;
        window[key].data = data.chains;
        appendContracts(data.chains);
      } catch (e) {
        window[key].fetching = false;
        window[key].data = false;
      }
    };
    const loaderContainer = document.getElementById(`loader-container-${id}`);
    if (loaderContainer) {
      loaderContainer.style.display = "flex";
    }
    if (window[key].data) {
      setTimeout(() => {
        appendContracts(window[key].data);
      }, 1000);
    } else {
      fetchChains();
    }
  }
  return <table style={{
    width: "100%",
    borderSpacing: "48px"
  }} className="relay-table">
  <thead style={{
    borderBottom: "1px solid rgb(227 226 230)",
    paddingBottom: 5,
    width: "100%",
    fontSize: 16
  }}>
    <tr style={{
    textAlign: "left"
  }}>
      <th>Chain Name</th>
      <th>Chain ID</th>
      <th>RelayReceiver</th>
      <th>ERC20Router</th>
      <th>ApprovalProxy</th>
    </tr>
  </thead>
  <tbody id={id} style={{
    width: "100%"
  }}>
  </tbody>
  <div className={`loader-container-${id}`} style={{
    display: "none",
    justifyContent: "center",
    alignItems: "center",
    height: "200px",
    width: "100%"
  }}>
    <div className="loader"></div>
  </div>
</table>;
};

This page lists platform execution contracts and solver addresses used by existing integrations. For settlement contracts, see [Relay Protocol Addresses](/references/protocol/addresses). Always use the transaction targets returned by your quote rather than sending funds to an address from this reference.

<Info>
  Please note that not all deployed contracts have the same address across all
  chains. Please check carefully to ensure you are using the correct contract
  address for the chain you are using.
</Info>

### Solver Addresses

These addresses identify solvers in existing integrations, not a protocol-wide operator or a universal deposit destination. Retrieve current chain data from [Get Chains](/references/api/get-chains); use the [signature validation guide](/references/api/api_core_concepts/input-validation#validating-onchain) when checking an order commitment.

| Chain Type | Solver Address |
| - | - |
| Bitcoin | bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc |
| EVM | 0xf70da97812cb96acdf810712aa562db8dfa3dbef |
| SVM | F7p3dFrjRTbtRp8FRF6qHLomXbKRBzpvBLjtQcfcgmNe |
| Tron | TYVWGh8XkmU49Hi9PkGAZXiiJPB3J5zJZy |

### Contract Versions

| Version | Summary | London | Cancun | Zero-ZkEvm |
| - | - | - | - | - |
| v2 Router | | 0x113a327221d2c4660684449bfc39bc14ad1aaf38 | 0xf5042e6ffac5a625d4e7848e0b01373d8eb9e222 | 0x8fdceeda2951a9747feaf25311435448bce47b2a |
| v2 ApprovalProxy | | 0xcd740b0e005cb8647f9baf4febedc8753ceef861 | 0xbbbfd134e9b44bfb5123898ba36b01de7ab93d98 | 0xaec31c3780521c34ca59dc2eb5fb9ee2e285cebe |
| v2.1 Router | Revert reasons improvements | 0xb758f3bfa7b9d39ef5457d7c7ffb3702f2ad3982 | 0x3ec130b627944cad9b2750300ecb0a695da522b6 | 0xb758f3bfa7b9d39ef5457d7c7ffb3702f2ad3982 |
| v2.1 ApprovalProxy | | 0x953c95146eb8ce763f35caf2f1d46ddf6a33bea2 | 0x58cc3e0aa6cd7bf795832a225179ec2d848ce3e7 | 0x953c95146eb8ce763f35caf2f1d46ddf6a33bea2 |
| v3 Router | Indexing improvements | 0x9ef6d3c2f60d7b9008d74cab1fc0f899c957c819 | 0xb92fe925dc43a0ecde6c8b1a2709c170ec4fff4f | 0xe16870b028704e38dbc254a84d3f72c8ba345ca9 |
| v3 ApprovalProxy | | 0x8754bc615047de01228a7527b712806a71a8dc9a | 0xccc88a9d1b4ed6b0eaba998850414b24f1c315be | 0xf6e54bbf91e564fcf0df3ed9f2dd82913e9232c3 |

### Mainnet Contracts

<Contracts id="mainnetContracts" env="mainnets" />

### Testnet Contracts

<Contracts id="testnetContracts" env="testnets" />


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.