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.
API key required for production. Request your API key and integrator ID or reach out on Telegram.
Key Parameters
When bridging to HyperCore, use these specific values:
| Parameter | Value | Notes |
|---|---|---|
destinationChainId | 1337 | HyperEVM chain ID |
outputToken | USDC-SPOT address | The 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
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.