Withdrawing From a Deposit Address

Withdrawing From a Virtual Account Deposit Address

There are two withdrawal methods from a Virtual Account:

  • From each Virtual Account deposit address
  • From a Master Exchange Address

Workflow Example 1

  1. User_A: VirtualAccount_A balance is 0 MATIC.
  2. User_A: DepositAddress_A connected to VirtualAccount_A receives 3 MATIC (on-chain).
    1. VirtualAccount_A balance is now 3 MATIC.
  3. User_A: Transfers 3 MATIC from VirtualAccount_A to VirtualAccount_B owned by User_B (off-chain).
    1. v3 REST API Endpoint: Send payment
    2. VirtualAccount_A balance is now 0 MATIC.
    3. VirtualAccount_B balance is now 3 MATIC.
    4. User_A: DepositAddress_A connected to VirtualAccount_A still holds 3 MATIC (on-chain).
  4. User_B: Would like to withdraw 3 MATIC from VirtualAccount_B to an external blockchain address.
    1. User_B: DepositAddress_B connected to VirtualAccount_B has no assets! (on-chain).
    2. You must execute a withdrawal from DepositAddress_A - Check the following guide.

Workflow Example 2

  1. User_A: VirtualAccount_A balance is 0 MATIC.
  2. User_A: DepositAddress_A connected to VirtualAccount_A receives 3 MATIC (on-chain).
    1. VirtualAccount_A balance is now 3 MATIC.
  3. User_A: would like to withdraw 2.8 MATIC from VirtualAccount_A to an external blockchain address.
    1. You may execute a direct automated withdrawal from DepositAddress_A - v3 REST API endpoint.

Good to know

Withdrawals from Deposit addresses are the most cost-effective because the only blockchain transactions you are paying gas fees for are for when users withdraw funds to their deposit addresses from their virtual accounts.

However, you, as the Exchange owner, must keep track of which private key is associated with which assets at all times to allow your users to withdraw assets to their deposit addresses. This can be a lot of work to keep track of everything, which is why consolidating assets within a Master Exchange Address is recommended.


Important

The intended use case for Virtual Accounts (VA) is as a Self-Custodial Exchange, meaning all withdrawals are expected to be tracked in the VA ledger.

  • Tatum does not hold custody of mnemonics or private keys. As a result, it is technically possible to sign transactions using VA ledger deposit addresses outside the VA ledger and Tatum endpoints. For more details, refer to this article.
  • The blockchain’s on-chain balance takes precedence over the VA ledger. If unregistered transactions occur, the VA ledger will become misaligned, leading to liquidity inconsistencies between the on-chain balance and the off-chain VA ledger.
  • Virtual Accounts are designed to hold a limited number of deposit addresses (1-5). While adding many more deposit addresses may appear functional, this setup often leads to unrecoverable synchronisation issues across users over time.
  • Any on-chain assets already present in a blockchain address to bind to a Virtual Account will be ignored. More information HERE.
  • Deposits are only "recognized" as long as the "currency" of the VA matches the on-chain asset deposited
  • If a mistake occurs when creating or storing a withdrawal in the VA ledger, it can be deleted and retried. Check this article for addtional details.
  • Withdrawals from a VA deposit address can be automated using the VA Blockchain Operationsendpoints, ensuring they are properly logged in the VA ledger.

🚧

Attention

  • You are expected to hold 1:1 asset liquidity between the VA off-chain ledger and your end-users on-chain assets.
  • To avoid potential disruptions and ensure consistent performance, we recommend adhering to the intended usage of 1-5 deposit addresses per Virtual Account.
  • Be mindful of Tatum Derivation Path.

❗️

Warning

  • All withdrawals must be registered and executed through VA-specific endpoints.
  • Using standard blockchain transaction methods to sign and broadcast a transaction from a VA-linked deposit address bypasses the VA ledger, leadings to balance discrepancies. If this happens, the withdrawal must be manually registered.