Private Assets Withdraw

What is Private Withdraw in Mystiko.Network?

Private Withdraw is an operation that converts the Private Assets to normal public assets i.e. viewable in MetaMask. Private Withdraw takes the locally generated zkSnark proofs as inputs and submits them to smart contract for verifying the authenticity of the requested Private Assets. Once Private Withdraw is successfully verified on-chain, the previously deposited assets will be transferred to the designated receiver's public address. Private Withdraw does not reveal any information about the corresponding Private Deposit. Therefore, it is extremely hard to link a deposit and a withdrawal, as long as you use two different public addresses for depositing and withdrawing.
In Mystiko web wallet, users can also use the JoinSplit feature to withdraw an arbitrary amount within a given range. Users could also withdraw the same type of available deposits from different accounts within the same wallet at once.
Note: It is always good to wait a significant amount of time before withdrawing the deposited Private Asset. It is recommended to wait at least 24 hours after your deposit is created. To further increase the level of privacy, it is also a good practice to use different addresses for depositing, withdrawing, and paying Ethereum gas.

❗️Compliance Notice❗️

However, Mystiko.Network only protects privacy for the good, not for the bad. Mystiko designed the first decentralized auditing system for on-chain private transactions. In Mystiko’s decentralized auditing system, a decentralized auditing committee will be established and such a committee will support auditing the transaction flow of suspicious deposits from bad actors while protecting the privacy of regular users. Read more:
  • "AuditableZK" Compliance design: https://medium.com/@Mystiko.Network/the-worlds-first-auditable-zero-knowledge-private-transaction-feature-is-now-live-on-mystiko-networ-df429d20e46

Private Withdrawal tutorial in Mystiko Wallet

In this demo, we will demonstrate how to privately withdraw 110 USDT (out of 120 USDT total available balance in “Account 1” and “Account 2”) at once, from the Mystiko private wallet to the public wallet (MetaMask) on the Ethereum mainnet.
  • Go to Mystiko withdraw page: Link: https://app.mystiko.network/transaction/withdraw
  • Switch your metamask network to the destination chain (Ethereum mainnet in this demo). ❗️Please make sure assets balance are in the “Available” state, the pending balances cannot be transferred.
  • Fill in withdraw info in the “Withdraw” tab of the “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 where the assets originated from. If no bridges were engaged, choose the ‘No Bridge’ option.
    • Amount of assets. With the 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. Users can also withdraw assets from various accounts at the same time ❗️ Please make sure you have enough gas fee for an arbitrary amount withdrawal. 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 withdraw 110 USD out of two deposit commitments from two accounts at once - 100 USDT in Account 1 and 10 USDT in Account 2).
    • Type in the recipient’s public address (❗️Please type in your or other users’ public wallet address, i.e. MetaMask address, NOT Mystiko private address)
    • Rollup Fee. Rollup fee is only required when users activate JoinSplit features, i.e. withdrawing 10 USDT from a 30 USDT deposit commitment. Rollup fee will be 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 withdraw USDT. Users could increase rollup fees to speed up the rollup process. However, rollup fee is not required if the user withdraws all assets from a deposit commitment, i.e. withdrawing 30 USDT from 30 USDT private deposit commitment. (In this demo, we will need to pay 5 USDT from the 110 USDT to be withdrawn as Mystiko rollup gas fee, since we are withdrawing all the assets in Account 1, and splitting the 20 USDT deposit commitment in “Account 2”)
    • Type in your Mystiko wallet password
  • Confirm withdrawal details in the pop-up and click “confirm” to proceed.
  • Grant access to Mystiko Wallet and pay transaction gas fee in Metamask. Notes: Processing time depends on the speed and stability of the source chain network.
  • Once the withdrawal is confirmed, the “pending” and “available” balances in both the sender and receiver accounts will be updated. In this demo, after successfully withdrawing 110 UST (100 USDT from “Account 1”, 10 USDT split from “Account 2” and 5 USDT for rollup gas), the balance in “Account 1’’ will be 0, and the balance in “Account 2” will be 10 USDT. The assets status will shift from “pending” to “available” once their rollups are completed. 105 USDT will be added to users’ MetaMask public wallet.
  • Users can review their withdrawal history in the “Transaction History” page’s Withdraw History section. Click id number for withdrawal details.