Cross-chain: Chain Signatures, Intents & Omni Bridge
NEAR’s cross-chain toolkit: Chain Signatures with chainsig.js, NEAR Intents and the 1Click API, and the Omni Bridge SDK — what each does and when to use which.
Intermediate5 min read3-question check
NEAR offers three different cross-chain primitives, and they solve different problems. Chain Signatures let a NEAR account or contract sign transactions for other chains through an MPC network. NEAR Intents let users state an outcome ("swap 100 USDC on Arbitrum for SOL on Solana") that market makers compete to fill. Omni Bridge is a token bridge that moves assets between NEAR and other chains.
Chain Signatures#
| Library / contract | Language | What it’s for | Link |
|---|---|---|---|
| MPC signer contract | On-chain (v1.signer on mainnet, v1.signer-prod.testnet on testnet) | Call sign with a payload hash, a derivation path and a key type (ECDSA secp256k1 or EdDSA ed25519); the MPC nodes return a signature for an address derived from your account + path. Node and contract code live in the near/mpc repo. | Chain Signatures docs · near/mpc |
| chainsig.js | TypeScript | Chain adapters that derive addresses, check balances, build the transaction, collect the hashes to sign, and finalize + broadcast — for EVM chains, Bitcoin, Solana, Cosmos, Aptos, Sui and XRP. | NearDeFi/chainsig.js · implementation guide |
| omni-transaction-rs | Rust | Build Bitcoin/EVM/other-chain transactions inside a NEAR contract, so the contract itself can request signatures. | near/omni-transaction-rs |
NEAR Intents#
| Library / API | Language | What it’s for | Link |
|---|---|---|---|
| 1Click Swap API | REST (https://1click.chaindefuser.com) | The highest-level entry point: request a quote, get a deposit address, send funds, poll status. Handles routing and settlement across supported chains; most endpoints need a JWT/API key; fees configurable per quote. | 1Click docs |
| 1Click SDKs | TypeScript (also Go, Rust) | Generated clients for the 1Click API, e.g. @defuse-protocol/one-click-sdk-typescript. | SDK page · TS SDK repo |
Intents SDK (@defuse-protocol/intents-sdk) | TypeScript | Lower-level access to the intents.near verifier contract: sign and execute intents, deposits, withdrawals and bridge interactions. | Intents SDK docs · verifier contract |
| Message Bus | JSON-RPC / WebSocket | For market makers (solvers): receive quote requests and publish signed quotes. | Message Bus docs |
Omni Bridge#
| Library | Language | What it’s for | Link |
|---|---|---|---|
Omni Bridge SDK (@omni-bridge/sdk, or @omni-bridge/core + per-chain packages) | TypeScript (beta) | Transaction builder for bridge transfers between NEAR, Ethereum, Base, Arbitrum, Polygon, BNB Chain, Solana, Bitcoin, Zcash and more. It validates and builds unsigned transactions; you sign with viem, ethers, near-api-js or near-kit. | Near-One/bridge-sdk-js · Omni Bridge docs |
| Omni Bridge contracts & relayer | Rust / Solidity | The bridge protocol itself (NEAR contracts, EVM/Solana counterparts, relayer). | Near-One/omni-bridge |
TypeScript
import { OpenAPI, OneClickService, QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript'
OpenAPI.BASE = 'https://1click.chaindefuser.com'
OpenAPI.TOKEN = process.env.ONECLICK_JWT // required for most endpoints
const quote = await OneClickService.getQuote({
dry: true, // false returns a depositAddress you can actually send funds to
swapType: QuoteRequest.swapType.EXACT_INPUT,
slippageTolerance: 100, // basis points = 1%
originAsset: 'nep141:arb-0xaf88d065e77c8cc2239327c5edb3a432268e5831.omft.near', // USDC on Arbitrum
destinationAsset: 'nep141:sol-5ce3bf3a31af18be40ba30f721101b4341690186.omft.near', // USDC on Solana
amount: '1000000', // 1 USDC (6 decimals)
depositType: QuoteRequest.depositType.ORIGIN_CHAIN,
refundTo: '0x2527D02599Ba641c19FEa793cD0F167589a0f10D',
refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
recipient: '13QkxhNMrTPxoCkRdYdJ65tFuwXPhL5gLS2Z5Nr6gjRK',
recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
deadline: new Date(Date.now() + 10 * 60 * 1000).toISOString(),
})Check yourself
3 questions · progress saved in this browser