On this page

Create your Omniasset

Give holders a way to move your existing token across enabled chains without deploying a bridge for each destination.

Use the deployment registry to check availability before attempting a transaction.

Decide once, before signing

DecisionWhy it matters
Original token and origin chainAll representations redeem against this token's backing
Creator walletThe caller becomes the permanent asset owner; it cannot transfer or renounce that role
Issuer compliance contractDecide at creation; a contract cannot be added later if you start without one
Token metadataName, symbol and decimals are captured in the descriptor, not refreshed on demand
Existing peersAn asset without an issuer compliance contract snapshots them as pre-enabled destinations

Use a wallet whose long-term control matches your team, such as your intended multisig. If an intermediary contract calls createAsset, that contract, not its caller, becomes the creator. Creation does not transfer ownership of the underlying ERC-20 and does not require that token's owner permission.

Official teams and communities may each create an asset for the same original token. Publish your canonical token page and asset ID so holders can identify yours. Read Choose the right asset.

Create in the app

Building your own issuer flow? Use omnisea.createAsset() in the TypeScript SDK or the direct contract example below. Both call the same router, and the signing account becomes the issuer.

Choose the origin chain and original token, connect the intended issuer wallet, and confirm creation. The app resolves the identity for that wallet. On the created asset's page, holders choose an enabled destination and transfer; the first successful message creates its destination representation automatically.

When a later-supported chain is not enabled yet, the issuer can select it and use Enable {chain}. Other holders see only enabled destinations. See Enable chains and manage fees.

Create programmatically

Use the runnable starter with ACTION=create. It reads assetOf(originalToken, creator) first, simulates createAsset(originalToken, zeroAddress) without an issuer compliance contract, and verifies AssetCreated in the confirmed router receipt. No token approval or deposit is needed for creation; source gas is still paid.

The result is an asset ID and an OFTAdapter address on the origin. The adapter is the spender for subsequent token approvals. Holders keep their original ERC-20 until they transfer it.

Confirm the result

Check getAsset(assetId) and descriptorOf(assetId) on the router. Confirm the creator, token, issuer-compliance requirement and pre-enabled EIDs before publishing your integration. The canonical page is /{locale}/tokens/{originChainId}/{originToken}/{creator}; the creator-free page is discovery, not an unambiguous asset identity.

Next: enable a new destination and configure revenue, or run your first transfer.