Bridge an ERC-721 (Coming soon)
NFT routes are coming soon. The current production deployment supports OFT transfers for ERC-20 assets only.
This page is kept as a preview of the planned ERC-721 integration shape. Do not use old ONFT beta addresses or the examples below for live transfers until Omnisea publishes verified ONFT deployments in Deployments.
Direction check
const ONFT_BRIDGE = "0x..."; // Coming soon: use the verified deployment address once published.
const [originalChainId, originalToken, isRepresentation] = await client.readContract({
address: ONFT_BRIDGE,
abi: onftBridgeAbi,
functionName: "onftToOriginal",
args: [collection],
});- Original collection ->
quoteSendOriginal/sendOriginal(the NFT is locked in the bridge). - Representation ->
quoteSendONFT/sendONFT(the representation is burned; the original unlocks when it returns home).
Approve
Either a single token or operator approval works:
await walletClient.writeContract({
address: collection,
abi: erc721Abi,
functionName: "approve",
args: [ONFT_BRIDGE, tokenId],
});The bridge checks getApproved(tokenId) or isApprovedForAll(owner, bridge) before pulling the token.
Quote and send
const options = lzReceiveOptions(isFirstTransfer ? 900_000n : 500_000n);
const totalFee = await client.readContract({
address: ONFT_BRIDGE,
abi: onftBridgeAbi,
functionName: "quoteSendOriginal",
args: [DST_EID, collection, tokenId, recipient, isFirstTransfer, options],
});
await walletClient.writeContract({
address: ONFT_BRIDGE,
abi: onftBridgeAbi,
functionName: "sendOriginal",
args: [DST_EID, collection, tokenId, recipient, isFirstTransfer, options],
value: totalFee,
});isFirstTransfer works exactly as for ERC-20s: true when the collection has no representation on the destination yet (representationFor(originalChainId, originalToken) == address(0)), which buys the deployment gas.
Metadata
Once NFT routes are live, the first transfer will deploy an ONFT representation initialized with the original collection's name, symbol, and contractURI. Per-token tokenURI values will resolve through the representation so marketplaces can render bridged NFTs correctly.
Tracking and recovery
Once NFT routes are live, tracking and recovery will mirror ERC-20 transfers: follow the guid from BridgeMessageSent -> BridgeMessageReceived, inspect on LayerZero Scan, and use failed-message recovery if destination execution fails.