Developer documentation

Every token, every chain.

Move existing tokens across eight EVM chains, turn their destination representations into Morpho collateral, and compose authenticated actions after delivery.

What you can build

Bridge an asset, use its representation in a verified lending market, borrow across chains, or relay deterministic source-chain data.

Core routes

Begin with the path closest to your integration, then follow its linked contract and failure references.

Programmatic start

This example moves WBNB from BNB Chain to its existing Base representation. Quote and send use byte-identical recipient, transfer mode, composition, and LayerZero options.

TypeScript · viem
import { erc20Abi, parseEther, zeroAddress } from "viem";

const omniseaAddress = "0x1bb251457EECB885075405fc215098b393E98DF8";
const wbnbAddress = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";

const compose = {
  composer: zeroAddress,
  gasLimit: 0n,
  message: "0x",
};

const u128 = (value: bigint) => value.toString(16).padStart(32, "0");
const options = `0x000301002101${u128(500_000n)}${u128(0n)}`;
const amount = parseEther("0.01");

await walletClient.writeContract({
  account,
  address: wbnbAddress,
  abi: erc20Abi,
  functionName: "approve",
  args: [omniseaAddress, amount],
});

const fee = await publicClient.readContract({
  address: omniseaAddress,
  abi: omniseaAbi,
  functionName: "quoteSendOriginal",
  args: [30184, wbnbAddress, amount, account, false, compose, options],
});

await walletClient.writeContract({
  account,
  address: omniseaAddress,
  abi: omniseaAbi,
  functionName: "sendOriginal",
  args: [30184, wbnbAddress, amount, account, false, compose, options],
  value: fee,
});
Open the complete bridge guide

Documentation directory

Architecture, operational guides, issuer workflows, contract references, and deployments.

Experimental Beta is Live-Learn more about the Pilot