Welcome to Crypto
π Virtual Accounts
2025.01.09 10:23Jump to Content Home Guides API Reference Changelog Support Status Sign Up Login Guides Support Status Sign Up Login Home Guides API Reference Changelog π Virtual Accounts Search
Getting Started
Getting Started π Authentication & Security Authentication Errors Keeping API Keys Secure Managing Mnemonics and PrivateKeys Malicious Addresses Compromised Assets - Exposed Mnemonics and PrivateKeys SOC 2, InfoSec Questionnaires, and Other Security Certifications π Plans & Limits Teams - Create and Invite Members π° Testnet Faucets βοΈ API Reference π§° JavaScript SDK Build your first web3 app Configuration options Submodules Logging π Learn Blockchain Blockchain & Crypto Mainnet vs Testnet Coins & Tokens The meaning of owning crypto Wallets Blockchain Addresses UTXO vs Account Model Blockchain Gas Fees The Nonce (EVM) Tatum's Derivation PathBLOCKCHAIN RPC NODES
Blockchain RPC Nodes π Supported Blockchains βοΈ Batch Calls ποΈ Archival data π« Block Finality (Reorgs)Blockchain Data
Blockchain Data π Notifications Attributes address and counterAddress Attribute contractAddress returning a symbol Attribute type and values Handling Re-Orgs with Notifications Mempool Notifications Notifications and Ignoring Multisig Transactions Notifications and Bulk Operations Stop Notifications Webhook Retry Service Notifications Pricing UTXO - Get Confirmations from a Transaction Authenticating with HMAC and Whitelisting IPs Authenticating Notification Webhooks v4 Notification Workflow Start monitoring of the address Stop monitoring of the address Get all sent notifications Get all existing monitoring subscriptions π Data Insights Get all assets the wallet holds Get all transactions of a wallet Get all fungible tokens the wallet holds Show fungible token history of a wallet Get metadata of a fungible token π NFTs Get all NFTs the wallet holds Get all NFTs in the NFT collection Trace the history of a specific NFT Show the NFT history of a wallet Retrieve the owner of the NFT Check if the wallet owns a specific NFT Get the metadata of a specific NFTBlockchain Operations
Blockchain Operations π° Wallet Operations π» EVM (like Ethereum) Ethereum - Getting Started (REST API) Ethereum - Getting Started (SDK) Celo - Getting Started (REST API) Polygon - Getting Started (REST API) π» UTXO (like Bitcoin) Bitcoin - Getting Started (REST API) Bitcoin - Getting Started (SDK) π» Tron Tron - Getting Started (REST API) Tron - Getting Started (SDK) π» Tezos Generate Mnemonic Generate Private Key Generate Address Get Private Key, Address, and Mnemonic π» MetaMask Connect a wallet Transfer native assets Transfer your NFT Create your NFT Collection Create your Fungible Token (ERC-20) Create your NFT (ERC-1155 MultiToken) Collection Transfer fungible tokens like USDT Approve the transfer of a fungible token like USDT Build your own custom transaction π» Others Algorand - Getting started (REST API) Solana - Getting started (REST API) π Smart Contracts πͺ Fungible Tokens (ERC-20 and compatible) EVM - Create a Fungible Token EVM - Transferring Fungible Tokens Solana - Create a Fungible Token Solana - Transferring Tokens TRON - Transferring Fungible Tokens (TRC-10 & TRC-20) Get the Token Balance of an Address (ERC-20 or compatible) Get the Token Balance of an address - RPC Call About Token Decimals (ERC-20 or compatible) π Non-Fungible Tokens (ERC-721) EVM - Create a NFT Collection (REST API) EVM - Create a NFT Collection (SDK) Metadata storage in NFTs, IPFS and Limits EVM - Mint NFTs (ERC-721) Algorand - Token URI: IPFS and max size Algorand - NFTs Mint and Transfer to Recipient Flow - Mint and Transfer NFTs Solana - Mint and Transfer NFTs π NFT Express ποΈ NFT Auction π NFT Marketplace Multi Tokens (ERC-1155) How to Create Multi Token Collections (REST API) How to Create MultiToken Collections (SDK) How to Mint Multi Tokens (ERC-1155) How to transfer Multi Tokens Tatum Smart Contract Verification & Audit Developing with Hardhat, Truffle and Foundry Fork or Recompile Tatum Smart Contracts Invoke method in a Smart Contract Get the contractaddress or tokenaddress from a transaction hash πΆ Fee Estimation EVM - How Fee Estimate Works BTC - How Fee Estimate Works BCASH - How Fee Estimate Works LTC - How Fee Estimate Works JS SDK - Tatum Fee Submodule UTXO - Minimum Relay Fee π² Exchange Rate Get current exchange rate of the crypto asset Get current rates for multiple crypto assets at once Supported Crypto Currencies Supported Fiats πΎ Storage Upload FileBlockchain Abstraction
Blockchain Abstraction π Virtual Accounts General Use Case Setting up an Exchange or Application Creating End User Accounts Creating End User Accounts: Introduction Creating End User Accounts: UTXO (like Bitcoin) Creating End User Accounts: EVM (like Ethereum) Creating End User Accounts: Gas Pump (EVM) Creating End User Accounts: XRP and XLM Adding FIAT Currencies Deposit Addresses Generating a Deposit Address: Introduction Assign an external Address as a Deposit Address Find all Deposit Addresses within an Account Find all Deposits from a Virtual Account Handling Tokens (EVM) MATIC_ETH to POL_ETH Migration Supported tokens (default) Adding more tokens to the VA ledger Handling Trading (Order Book) Introducing Trading (1/4) Opening a new Trade (2/4) Listing Open Trades (3/4) Listing Closed Trades (4/4) Order Book: Future Trade and sealDate Handling Transactions across Accounts (off-chain) Send a Payment across Accounts (off-chain) Retrieve a Payment Log Handling Withdrawals (on-chain) Withdrawing Assets: Introduction On chain Asset Management and Withdrawals Withdrawing From a Deposit Address Withdrawing From a Master Exchange Address Creating a Manual Withdrawal Delete Withdrawals in the VA Ledger Handling Gas Pump Assign an Gas Pump Address as a Deposit Address Withdrawing From a Gas Pump Address End User Journey and QoL Endpoints End User Journey Retrieve Account Details and Balances Retrieve Transactions and Withdrawals Block and Unblock Funds from an Account Deleting Unused Virtual Accounts Notifications and Virtual Accounts Security Basics and Virtual Accounts Virtual Accounts FAQ β½οΈ Gas Pump GP - Use Case and Functionalities GP - Setting Up Gas Pump from A to Z GP - Transferring out from a Gas Pump Address GP - Error invalid BigNumber string π KMS Use Case and Functionalities Download, Install, Setup & Run KMS Monitoring Broadcasted Transactions with KMS Getting Started KMS Environment Variables Checking Pending Transactions Bitcoin Flow from A to Z (KMS) Solana and Generating Addresses (KMS) KMS General FAQ KMS Security Basics π§Ύ Transaction Simulator Simulate Transfer Simulate Transfer Erc20TROUBLESHOOTING
Troubleshooting π RPC Nodes RPC - Troubleshooting RPC requests and Tatum Debug and Tracer error: reexec=128 EVM (like Ethereum) Arbitrum - Error: missing trie node Error Already Known Error: Max Fee Per Gas Less Than Block Base Fee EVM - rpc.txfeecap Node Configuration EVM based nodes - Unsupported methods EVM - Troubleshooting Reverted with trace_transaction IOTA - SDK and Empty Body Errors Optimism - tx hash 0x0000000000000000000000000000000000000000000000000000000000000000 Optimism - debug_trace and Node Performance Issues Optimism Update - Transition from Geth to Erigon Polkadot - Getting Extrinsics from a Block Removed totalDifficulty from Block Schema Retrieve Internal Transactions from a Transaction Hash UTXO (like Bitcoin) UTXO based nodes - Unsupported methods Others EOS - Chain API & Trace API URLs Solana - Long response times Solana - Error getProgramAccounts TON - getTransaction and Pagination TRON - eth JSON-RPC API βοΈ Blockchain Operations Transaction Unconfirmed, Pending, Dropped or Failed EVM (like Ethereum) Error - Contract Creation Code Storage Out of Gas Error - Fee cap less than block base fee Troubleshooting Execution Reverted Errors Replacement Transaction Underpriced Multi tokens (ERC-1155) name and symbol BNB - Beacon Chain Account Balance Attributes BNB - BEP2 and BEP20 Token Transfers BNB - Transactions over Beacon Chain and Smart Chain Stellar - Broadcast Transaction Timeout Stellar: Error xlm.account.not.found UTXO (like Bitcoin) Building a UTXO Transaction BTC - CPFP and stuck transactions in the mempool BTC - RBF and stuck transactions in the mempool BTC - Transaction already exists in mempool BTC - Transaction Broadcast Error BTC - About Mempool and Expiry Time Dust amount detected in one output Transactions sharing the same Transaction Hash Troubleshooting the Error: too-long-mempool-chain Algorand Algo - Get Account Transactions Solana Solana - Indexing and Confirmation Solana - Transaction has not been confirmed yet (Error 403) Solana - Dropped Transactions and Workarounds Solana - Error failed to deserialize solana_sdk Solana - Error processing Instruction 0: custom program error: 0x1 Solana - Error Too many accounts requested, limit is 10,000,000 Solana - KMS_FAILED_TX with Successful Transactions TRON TRON - Transaction could not be found TRON - Unable to find account TRON - Troubleshooting Tapos check error TRON - Error: Cannot send TRC-20 callback is not defined XRP XRP - Account not found πΆ Fees, Gas and Estimates EVM - Fee Estimate, GasPrice and Insufficient funds Error BTC - Maxfeerate Limit Error TRON - Estimate Fee and FeeLimit for TRX, TRC10 and TRC20 Refunding Gas Fees π Notifications Delivery error: networkError: true XRP, KMS and failed transactions UTXO and ADDRESS_TRANSACTION Missing counterAddress - UTXO chains and Solana π» Custodial π Virtual Accounts (VA) VA - Deposit address blockchain balance not reflected VA - Deposit not detected with BNB, XLM or XRP VA - Error XPUB not compatible VA - Withdrawals VA - How to find Withdrawal Logs VA - Withdrawal registered in ledger but failed in the blockchain VA - TRON withdrawal error: offchain.tron.tx.failed VA - Withdrawal from a Gas Pump deposit address VA - Withdrawal to Blockchain Troubleshooting VA - Unable to prepare withdrawal π KMS KMS - Malformed UTF-8 data error TRON - tron.tx.expired Error π NFTs Harmony One - NFTs not loading Transaction Pending OpenSea - NFTs listing issues Polygon Amoy - NFT Smart Contract π³ Billing Understanding Daily Charges Find the Invoice History High Credit Use and Overcharges Modify or Cancel a paid subscription Payment Declined Settle Outstanding Invoices Unrecognized Credit Card Charges from Tatum π οΈ Contacting Support Reporting issues or bugs - Error 40X, 50X Cancel or Replace a blockchain transaction Error 429π Virtual Accounts
Offchain Asset Management - Blockchains like Bitcoin and Ethereum are not exactly scalable. Bitcoin can send around 7 transactions per second, and Ethereum can do about 15 transactions per second globally. But what if you need to scale past the blockchain's limitations? That's where virtual accounts come in.
Suggest EditsVirtual accounts allow you to perform instant, feeless transactions separately from the blockchain, and periodically synchronize with it. It ensures minimal transaction fees and limitless scalability, even on older blockchains. Virtual Accounts also work with FIAT and virtual currencies and have a comprehensive suite of advanced developer tools built-in and ready. Furthermore, if your end-users want to send their crypto outside of your application, they can withdraw it from their Virtual Accounts to a blockchain deposit address of their choice.
In summary, Virtual Accounts allow you to build an off-chain crypto Exchange type of ledger parallel to the blockchain and bypass the slow and often congested transaction mechanism of the blockchain itself.
Virtual Accounts Benefits
1. No blockchain fees for off-chain transfers
Because transactions between virtual accounts do not happen on the blockchain, they do not incur blockchain transaction fees and happen instantly. This provides huge benefits for working with blockchains like Ethereum and Bitcoin, both of which have high transaction fees and slow transaction times.
2. Grouping multiple Virtual Accounts
Multiple virtual accounts of different currencies can be grouped using a customer ID . In this way, your customers can easily view the balances of all the currencies they hold with one API call, allowing you to build multi-currency wallets and various fintech applications.
3. Deposit addresses and automatic balance updates
A Virtual Account has at least one real blockchain address associated with it. This blockchain address is called a βDeposit Addressβ.
You can either connect an existing blockchain address (or addresses) to the Virtual Account or generate a new blockchain address and associate it with the account. In either case, the blockchain address becomes a deposit address for this virtual account.
Virtual Accounts automatically scan associated deposit addresses for incoming transactions and update their own balances to reflect the assets received. Whenever any blockchain address connected to a Virtual Account receives an incoming transaction, the virtual account's balance will be updated to reflect the newly received funds.
Virtual Account and deposit addresses
If you transfer assets from one Virtual Account to the other one, the total balance of all Virtual Accounts does not change.
Virtual Account off-chain transfers do not affect on-chain assets
4. Single currency per Virtual Account
Each Virtual Account is in a single currency. This can be either a cryptocurrency or a virtual fiat currency. Virtual Accounts can be connected to blockchain addresses or represent virtual currencies that can be pegged to a fiat currency. Virtual accounts can be in Bitcoin or Ethereum, Euro or U.S. dollar. Using Virtual Currencies (VC), you can use FIAT and cryptocurrencies in the same way with the same API calls.π
Virtual Accounts can only perform transactions with other Virtual Accounts of the same currency.
5. Running in the background
When a customer transfers assets from their virtual account to a real blockchain address, they do not know where the assets are withdrawn from in the background.
Imagine that you have three customers with their custodial accounts: A , B, and C , and each of them has a virtual account connected to the customerβs blockchain address.
The following scenario takes place:
Customer_A received 1 ETH. Customer_A transfers this 1 ETH to Customer_B . Customer_B receives 1 ETH and transfers it to Customer_C . Customer_C receives 1 ETH and uses it to pay for something (in other words, transfers it to a blockchain address that is outside of your custodial application).When Customer_C transfers 1 ETH to a blockchain address that is outside of your custodial application:
On the Virtual Account level , the amount is deducted from Customer_C 's virtual account. - This is what the customer sees. On the Blockchain level , the amount is deducted from Customer_A 's blockchain address because Customer_A is the one who owned that 1 ETH in the beginning. - This is what you see as the owner of the custodial application.π
Tatum Virtual Accounts back-end take care of calculating the balance and tracking the assets.
Disclaimer
Implementing Tatum's Virtual Accounts requires a strong foundational understanding of blockchain technology.
Users are expected to have a solid grasp of on-chain transactions, UTXO (Unspent Transaction Output) and account-based transaction models, gas fees, and other essential blockchain concepts. Proceeding with Virtual Accounts implementation without this knowledge can lead to mistakes, incorrect setups, and potentially irrecoverable issues.
Updated 2 months ago
Table of Contents Virtual Accounts Benefits 1. No blockchain fees for off-chain transfers 2. Grouping multiple Virtual Accounts 3. Deposit addresses and automatic balance updates 4. Single currency per Virtual Account 5. Running in the background Disclaimer