Private Assets Transfer

What is a private transfer?

Private Transfer is an operation that converts the Private Assets to Private Assets with a different Mystiko Address. Private Transfer takes the locally generated zkSnark proofs as inputs and submits a smart contract for verifying the authenticity of the input Private Assets. Private transfer is a pure private-to-private asset transfer - the source address, destination address and amount are all private in this case. In Mystiko web wallet, users can also use the JoinSplit feature to withdraw an arbitrary amount within a given range. Users could transfer the same types of available deposits from different accounts within the same wallet at once.

Private Transfer in Mystiko Wallet

In this demo, we will demonstrate how to privately transfer 50 USDT (out of 100 USDT available balance) from “Account 1” to “Account 2” within the same wallet.
  • Switch your metamask network to the destination chain (Ethereum mainnet in this demo). ❗️Please make sure assets balance are in 'Available' state, because pending balances cannot be transferred.
  • Fill in transfer info in the “Transfer” tab of “Transaction” section:
    • Choose a chain with assets that you would like to transfer from (Ethereum in this demo)
    • Choose the type of assets (we chose USDT out of the three options - USDC/USDT/ETH);
    • Choose the bridge which the assets originated from. If assets were not deposited via cross-chain bridge, choose the ‘No Bridge’ option.
    • Amount of assets. With Mystiko Join-Split feature, users could transfer any amount that doesn’t exceed the sum of two maximum commitments of the same assets via the same bridge. However, please note that the minimal gas fee for rollup will be double x2, if users choose to use JoinSplit feature, i.e. transferring 10 USDT from a 30 USDT available deposit commitment). Please make sure you have enough gas fees for an arbitrary amount transfer. If the balance of your assets is too low to pay for the rollup, users will not be able to use the transfer function. (We chose to use JoinSplit features to transfer 50 USD out of a 100 USDT deposit commitment, and pay double rollup gas)
    • Type in recipient Mystiko address. Users could choose their other existing mystiko accounts in their wallets if users would like to separate their private assets in different accounts; or manually type in other users’ Mystiko account addresses (we chose to transfer 50 USDT from “Account 1” to “Account 2” in this demo);
    • Rollup Fee. Rollup fee is deducted from the tokens to be transferred, i.e. users shall pay a certain amount of USDT, instead of ETH, to miners if users chose to privately transfer USDT. Rollup fee will be doubled if the JoinSplit feature is activated. Users could increase rollup fees to speed up the rollup process. (In this demo, we will need to pay 30 USDT out of the 50 USDT to be transferred, since we split the 100 USDT deposit commitment from “Account 1”)
    • Type in your Mystiko wallet password
  • Confirm transfer details in pop-up and click “confirm” to proceed.
  • Once the transferring transaction is confirmed, the “pending” and “available” balances in both of the sender and receiver accounts will be updated. In this demo, after successfully transferring 50 USDT out of 100 USDT from Account 1 to Account 2 (with 30 USDT rollup gas fee), 50 USDT will be pending in Account 1, and 20 USDT pending in Account 2. These assets statuses will shift from “pending” to “available” once their rollups are completed. Users can review transferring transaction history in the “Transaction History” page’s Transfer History section. Click id number for transfer transaction details.
​