NEAR Intents: Deposits
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
msgfield 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.