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

# Contract Addresses

> LZMulticall (Wrapper) and TransferDelegate contract addresses for each supported chain.

export const VTContractAddressesTable = ({data = []}) => {
  const [copiedAddress, setCopiedAddress] = useState(null);
  const [isDark, setIsDark] = useState(false);
  useEffect(() => {
    if (typeof document === 'undefined') return;
    const checkTheme = () => {
      setIsDark(document.documentElement.classList.contains('dark'));
    };
    checkTheme();
    const observer = new MutationObserver(checkTheme);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ['class']
    });
    return () => observer.disconnect();
  }, []);
  const handleCopy = async (text, id, e) => {
    if (e) {
      e.preventDefault();
      e.stopPropagation();
    }
    try {
      await navigator.clipboard.writeText(text);
      setCopiedAddress(id || text);
      setTimeout(() => setCopiedAddress(null), 2000);
    } catch (err) {
      console.error('Failed to copy:', err);
    }
  };
  const styles = {
    tableContainer: {
      width: '100%',
      overflowX: 'auto',
      margin: '16px auto',
      border: '1px solid ' + (isDark ? 'rgba(255,255,255,0.08)' : 'rgba(0,0,0,0.08)'),
      borderRadius: '8px',
      background: isDark ? 'rgba(0,0,0,0.2)' : '#fff',
      boxSizing: 'border-box'
    },
    table: {
      width: '100%',
      borderCollapse: 'collapse',
      fontSize: '14px'
    },
    th: {
      background: isDark ? 'rgba(255,255,255,0.04)' : 'rgba(0,0,0,0.02)',
      padding: '12px 1.5rem',
      textAlign: 'left',
      fontWeight: 600,
      fontSize: '13px',
      textTransform: 'uppercase',
      letterSpacing: '0.5px',
      color: isDark ? '#e5e7eb' : '#374151',
      borderBottom: '1px solid ' + (isDark ? 'rgba(255,255,255,0.08)' : 'rgba(0,0,0,0.08)'),
      whiteSpace: 'nowrap'
    },
    td: {
      padding: '8px 1.5rem',
      borderBottom: '1px solid ' + (isDark ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.05)'),
      verticalAlign: 'middle'
    },
    chainCell: {
      fontWeight: 500,
      whiteSpace: 'nowrap',
      color: isDark ? '#e5e7eb' : '#374151'
    },
    addressCell: {
      display: 'inline-flex',
      alignItems: 'center',
      gap: '8px'
    },
    address: {
      fontFamily: "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace",
      fontSize: '12px',
      color: isDark ? '#9ca3af' : '#6b7280',
      wordBreak: 'break-all'
    },
    na: {
      color: isDark ? '#6b7280' : '#9ca3af',
      fontSize: '13px'
    },
    copyButton: {
      background: 'none',
      border: 'none',
      cursor: 'pointer',
      padding: '4px',
      color: isDark ? '#6b7280' : '#9ca3af',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      borderRadius: '4px',
      transition: 'all 0.15s',
      flexShrink: 0
    },
    copyIcon: {
      width: 14,
      height: 14
    }
  };
  const AddressCell = ({address, copyId}) => {
    if (!address || address === 'N/A') {
      return <span style={styles.na}>N/A</span>;
    }
    return <span style={styles.addressCell}>
        <code style={styles.address}>{address}</code>
        <button onClick={e => handleCopy(address, copyId, e)} style={styles.copyButton} title={copiedAddress === copyId ? 'Copied!' : 'Copy address'}>
          {copiedAddress === copyId ? <svg style={styles.copyIcon} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
              <polyline points="20 6 9 17 4 12"></polyline>
            </svg> : <svg style={styles.copyIcon} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
              <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
              <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
            </svg>}
        </button>
      </span>;
  };
  return <div className="vt-table-root" style={{
    width: '100%'
  }}>
      <style>{`
        .vt-table-root [data-table-wrapper] {
          width: 100% !important;
          max-width: 100% !important;
          margin: 0 !important;
          padding: 0 !important;
          contain: none !important;
          overflow: visible !important;
        }
        .vt-table-root [data-table-wrapper] > div {
          padding: 0 !important;
          max-width: 100% !important;
        }
        .vt-table-root [class*="overflow-x-auto"] {
          overflow-x: visible !important;
        }
        .vt-table-root table {
          margin: 0 !important;
          width: 100% !important;
          min-width: 100% !important;
        }
        .vt-table-root th:first-child,
        .vt-table-root td:first-child {
          padding-left: 3rem !important;
        }
        .vt-table-root th:last-child,
        .vt-table-root td:last-child {
          padding-right: 3rem !important;
        }
      `}</style>
      <div style={styles.tableContainer}>
        <table style={styles.table}>
        <thead>
          <tr>
            <th style={styles.th}>Chain</th>
            <th style={styles.th}>LZMulticall (Wrapper)</th>
            <th style={styles.th}>TransferDelegate</th>
          </tr>
        </thead>
        <tbody>
          {data.map(row => <tr key={row.chain}>
              <td style={Object.assign({}, styles.td, styles.chainCell)}>{row.chain}</td>
              <td style={styles.td}>
                <AddressCell address={row.wrapper} copyId={row.chain + '-wrapper'} />
              </td>
              <td style={styles.td}>
                <AddressCell address={row.delegate} copyId={row.chain + '-delegate'} />
              </td>
            </tr>)}
        </tbody>
        </table>
      </div>
    </div>;
};

Deployed addresses for the LZMulticall (Wrapper) and TransferDelegate (Delegate) on each chain. For what each contract does and which one to use for approvals, see the [Contracts Overview](/v2/developers/value-transfer-api/contracts/overview).

## EVM

<VTContractAddressesTable
  data={[
{
  chain: 'Base',
  wrapper: '0x7e07A9148E9149e430C6412b79A675028595Ff1f',
  delegate: '0x8EcA03175fd5aC62fb6F4EcbB9A95D13dCDCB4F8',
},
{
  chain: 'Ethereum',
  wrapper: '0xAcdDAC6C77318B615f7F6fB9bb67c6833e9c05f1',
  delegate: '0x72fAEbF58A62e33C044c37D8D973a961633ea294',
},
{
  chain: 'Arbitrum',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Optimism',
  wrapper: '0x5528Cf58fEB8fbfcE94f43B33240FFFB1312bDe3',
  delegate: '0xFBea79D13E6F795a0e1E4B99090f1165a01C7B03',
},
{
  chain: 'BSC',
  wrapper: '0x5528Cf58fEB8fbfcE94f43B33240FFFB1312bDe3',
  delegate: '0xFBea79D13E6F795a0e1E4B99090f1165a01C7B03',
},
{
  chain: 'Polygon',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Avalanche',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Linea',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Mantle',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Scroll',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Abstract',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Bera',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Hemi',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Hyperliquid',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Ink',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Monad',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Plasma',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Plume Phoenix',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Soneium',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Unichain',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Stable',
  wrapper: '0x8E60b7b64b63cD56b18ebcECADcb79B04919286e',
  delegate: '0x60FccB9b58d5E806ca5Cb8BFCe721c2274609dE4',
},
{
  chain: 'Doma',
  wrapper: '0x5528Cf58fEB8fbfcE94f43B33240FFFB1312bDe3',
  delegate: '0xFBea79D13E6F795a0e1E4B99090f1165a01C7B03',
},
{
  chain: 'Tempo',
  wrapper: '0x4683ce822272cd66cea73f5f1f9f5cbcaef4f066',
  delegate: '0x3c18440268a78d651a3847653692fc82c31731c9',
},
]}
/>

## Non-EVM

<VTContractAddressesTable
  data={[
{chain: 'Solana', wrapper: 'BRoueHsu3h2SfEse9ohXipm1R9uRGRSe3zPYsAT8RySr', delegate: 'N/A'},
{
  chain: 'Tron',
  wrapper: '0x996d4dbaa76ccc8d272eca2135266f967d44f036',
  delegate: '0xc40c149a3745445ab32ded7a6594f85e3a40f4d1',
},
]}
/>
