Skip to main content
After a successful deposit, tokens are assigned to your account in the Verifier contract. You retain full ownership and control, and can withdraw at any time.

Withdrawal methods

There are two ways to withdraw tokens:
  1. Direct function call on the Verifier contract
  2. Signed intent submitted via execute_intents
When using direct function calls, the token ID is used without a prefix (e.g., wrap.near).When using signed intents, the token ID is prefixed (e.g., nep141:wrap.near).

Withdrawing fungible tokens (NEP-141)

The Verifier contract exposes ft_withdraw for direct withdrawals and FtWithdraw for intent-based withdrawals.

Via direct function call

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

Via signed intent

Submit a signed FtWithdraw intent through execute_intents. Withdraw intents (ft_withdraw, nft_withdraw, mt_withdraw) use unprefixed token IDs (e.g., usdc.near). Token prefixes like nep141: are only used in transfer and token_diff intents.
Your public key must be registered with the Verifier contract before you can submit signed intents. For named accounts, call add_public_key on intents.near. Implicit accounts skip this step. See Account Abstraction for details.
See Intent Types and Execution for the full signed intent format and how to submit intents.

Real transaction examples

View these withdrawal and intent transactions on NEAR mainnet:

Withdrawal functions by token type

Withdrawing non-fungible tokens (NEP-171)

To withdraw NFTs from the Verifier contract, use nft_withdraw for direct calls or NftWithdraw for intent-based withdrawals, following the same patterns as fungible token withdrawals above.

Refunds on failed withdrawals

Important: This section applies to all withdrawal types except NativeWithdraw, since native NEAR transfers cannot fail.
A refund restores your balance when a withdrawal fails on the target smart contract. The behavior depends on the msg parameter in your withdrawal request.

How msg affects refunds

The withdraw function has a msg parameter from the NEP-141 standard:
An empty string ("") still counts as a specified msg value and will use ft_transfer_call with no refund. Only omitting msg entirely or setting it to null enables refund protection.
This same logic applies to Multi Token and NFT transfers with their corresponding functions: nft_transfer, nft_transfer_call, mt_transfer, and mt_transfer_call.

Why refunds don’t always work

Due to the asynchronous and sharded nature of the NEAR blockchain, refunds can only be processed when ft_transfer is used (i.e., when msg is not specified or is null). The refund issue occurs when an asynchronous call to another smart contract (e.g., a USDC contract) fails. If an error happens within the Verifier contract itself, your balance won’t change.

Summary

Recommendation: To ensure a successful withdrawal with refund protection, avoid specifying msg or set it explicitly to null. For programmable actions on the receiving contract, perform them from your own account using ft_transfer_call.