Skip to content
by Unity Nodes
docs.near-intents.orgintegration › verifier contract › deposits and withdrawals › deposits

NEAR Intents: Deposits

Updated 02-11-2026

Depositing fungible and non-fungible tokens into the Verifier contract

Before you can swap or transfer tokens on the Verifier contract, you need to deposit them. Depositing moves tokens from your NEAR account into the contract's internal ledger, where they can be used for intents.

The contract accepts:

[!CAUTION]

Do not send native NEAR directly to the Verifier contract.

You must wrap your NEAR into wNEAR first as the contract does not accept native NEAR. See "Using NEAR Tokens" for more details.

Depositing fungible tokens (NEP-141)

The Verifier contract implements the FungibleTokenReceiver interface, part of the NEP-141 standard.

To deposit tokens, call ft_transfer_call (function signature) on the token contract, with an msg parameter specifying who will own the tokens.

Any NEP-141 token can be deposited. For a list of NEP-141 token contract addresses deposited into the Verifier contract, run:

curl -s https://1click.chaindefuser.com/v0/tokens | jq -r '.[] | select(.blockchain == "near") | [.symbol, (.price | tostring), .contractAddress] | @tsv' | column -t -s $'\t'

How to deposit tokens

Replace <token-contract> with the token's contract address and adjust the amount for the token's decimal precision.

NEAR CLI

near call <token-contract> ft_transfer_call \
  '{"receiver_id": "intents.near", "amount": "<amount>", "msg": ""}' \
  --deposit 0.000000000000000000000001 \
  --gas 100000000000000 \
  --useAccount your-account.near \
  --networkId mainnet

NEAR API JS

import { Account, JsonRpcProvider, teraToGas, KeyPairString } from "near-api-js";

const accountId = "your-account.near";
const privateKey = "ed25519:3D4YudU..." as KeyPairString;

const provider = new JsonRpcProvider({ url: "https://rpc.fastnear.com" });
const account = new Account(accountId, provider, privateKey);

await account.callFunction({
  contractId: "<token-contract>",
  methodName: "ft_transfer_call",
  args: {
    receiver_id: "intents.near",
    amount: "<amount>",
    msg: "",
  },
  gas: teraToGas("100"),
  deposit: 1n, // 1 yoctoNEAR
});

See contract interaction example in near-api-examples repository.

Parameter Description
<token-contract> The NEP-141 token contract you're depositing from (e.g., wrap.near for wNEAR, eth.bridge.near for ETH). Any NEP-141 token can be deposited.
receiver_id Always intents.near (the Verifier contract).
amount The amount in the token's smallest unit. Each token has different decimals (e.g., wNEAR has 24, USDC has 6).
msg Controls token ownership after deposit. See The msg parameter below.
--deposit 1 yoctoNEAR, required by the NEP-141 standard for ft_transfer_call.
--gas Depends on the msg content. Should be calculated to cover the cross-contract call to the Verifier contract plus any promises triggered by the deposit (e.g., execute_intents). 100 TGas is sufficient for a simple deposit.

The msg parameter

The msg parameter supports three formats:

Empty (default)

Leave msg empty or omit it to assign ownership to the transaction sender.

{
  "receiver_id": "intents.near",
  "amount": "1000",
  "msg": ""
}

Account ID string

Specify an account ID to assign ownership to a different account.

{
  "receiver_id": "intents.near",
  "amount": "1000",
  "msg": "bob.near"
}

DepositMessage object

Use a JSON object for advanced options:

Field Description
receiver_id Account ID taking ownership
execute_intents List of intents to execute after deposit
refund_if_fails When false (default), executes intents as a detached promise, decoupling failures from the deposit
{
  "receiver_id": "intents.near",
  "amount": "1000",
  "msg": "{\"receiver_id\": \"charlie.near\", \"execute_intents\": [...], \"refund_if_fails\": false}"
}

[!WARNING]

The msg field is always a string, even when it contains a JSON-encoded object. Proper character escaping is required.

Real transaction examples

View these deposit transactions on NEAR mainnet:

Operation Transaction
Deposit tokens DWv4AkrL...
Deposit + execute intents Bn3iC9B1...
Deposit + swap + withdraw BMFcWFRe...

Depositing non-fungible tokens (NEP-171)

The Verifier contract implements the NonFungibleTokenReceiver interface (NEP-171 standard).

To transfer NFTs to the Verifier, use nft_transfer_call with the same msg format rules as fungible tokens.

Depositing multi tokens (NEP-245)

The Verifier contract implements the MultiTokenReceiver interface (NEP-245 standard).

To deposit multi tokens, use mt_batch_transfer_call with the same msg format rules as fungible tokens.