Near Learn

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 / contractLanguageWhat it’s forLink
MPC signer contractOn-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.jsTypeScriptChain 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-rsRustBuild Bitcoin/EVM/other-chain transactions inside a NEAR contract, so the contract itself can request signatures.near/omni-transaction-rs

NEAR Intents#

Library / APILanguageWhat it’s forLink
1Click Swap APIREST (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 SDKsTypeScript (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)TypeScriptLower-level access to the intents.near verifier contract: sign and execute intents, deposits, withdrawals and bridge interactions.Intents SDK docs · verifier contract
Message BusJSON-RPC / WebSocketFor market makers (solvers): receive quote requests and publish signed quotes.Message Bus docs

Omni Bridge#

LibraryLanguageWhat it’s forLink
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 & relayerRust / SolidityThe bridge protocol itself (NEAR contracts, EVM/Solana counterparts, relayer).Near-One/omni-bridge
Get a cross-chain swap quote with the 1Click TypeScript SDK (dry run)
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

  1. 1.A NEAR contract must hold BTC and release it when a vote passes. Which primitive lets the contract sign the Bitcoin transaction?
  2. 2.Your wallet app wants a "swap USDC on Arbitrum to SOL" button with the least integration work. What do you use?
  3. 3.What is the mainnet account of the MPC signer contract used by Chain Signatures?