Working with Hypercore

Bridge assets to Hyperliquid's sub-second settlement layer via Across.

HyperCore is Hyperliquid's high-performance trading layer with sub-second settlement. Across supports bridging assets directly to HyperCore via the Swap API, letting users go from any supported chain to Hyperliquid in a single transaction.

Key Parameters

When bridging to HyperCore, use these specific values:

ParameterValueNotes
destinationChainId1337HyperEVM chain ID
outputTokenUSDC-SPOT addressThe USDC-SPOT token on HyperEVM

HyperCore uses Chain ID 1337 (HyperEVM). The Swap API handles the routing from HyperEVM to HyperCore automatically — you don't need to interact with HyperCore directly.

How It Works

Origin Deposit

The user deposits assets on the origin chain (e.g., USDT on Arbitrum) via the Swap API. This creates a crosschain intent with HyperEVM as the destination.

HyperEVM Fill

A relayer fills the intent on HyperEVM, delivering the output token (USDC-SPOT) to the recipient address.

HyperCore Credit

The bridged funds are automatically credited to the user's HyperCore account. If the user doesn't have a HyperCore account yet, one is initialized automatically.

Automatic account initialization. If the recipient address doesn't have a HyperCore account, one is created automatically during the bridging process. No manual setup required.

Example: Bridge USDT from Arbitrum to HyperCore

bridge-to-hypercore.ts
import { createWalletClient, createPublicClient, http, parseUnits } from "viem";
import { arbitrum } from "viem/chains";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount("0xYOUR_PRIVATE_KEY");

const walletClient = createWalletClient({
  account,
  chain: arbitrum,
  transport: http(),
});

const publicClient = createPublicClient({
  chain: arbitrum,
  transport: http(),
});

async function bridgeToHyperCore() {
  const params = new URLSearchParams({
    tradeType: "minOutput",
    originChainId: "42161",                                        // Arbitrum
    destinationChainId: "1337",                                    // HyperEVM
    inputToken: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",     // USDT on Arbitrum
    outputToken: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",    // USDC-SPOT on HyperEVM
    amount: parseUnits("500", 6).toString(),                       // 500 USDT
    depositor: account.address,
    integratorId: "0xdead",
  });

  const response = await fetch(
    `https://app.across.to/api/swap/approval?${params}`,
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
      },
    }
  );
  const quote = await response.json();

  if (!quote.swapTx) {
    throw new Error(`Quote failed: ${JSON.stringify(quote)}`);
  }

  console.log("Cross-swap type:", quote.crossSwapType);
  console.log("Expected fill time:", quote.expectedFillTime, "seconds");

  // Execute approvals
  if (quote.approvalTxns?.length) {
    for (const approvalTx of quote.approvalTxns) {
      const hash = await walletClient.sendTransaction({
        to: approvalTx.to,
        data: approvalTx.data,
      });
      await publicClient.waitForTransactionReceipt({ hash });
      console.log("Approval confirmed:", hash);
    }
  }

  // Execute the bridge transaction
  const hash = await walletClient.sendTransaction({
    to: quote.swapTx.to,
    data: quote.swapTx.data,
    value: quote.swapTx.value ? BigInt(quote.swapTx.value) : 0n,
    gas: quote.swapTx.gas ? BigInt(quote.swapTx.gas) : undefined,
  });

  console.log("Bridge tx:", hash);
  // Funds will be credited to HyperCore automatically
}

bridgeToHyperCore();

Verify the correct USDC-SPOT token address on HyperEVM before production use. Use the /swap/tokens endpoint to look up the current address for destination chain 1337.

On this page