[App v4.3.11] ETH/ERC20 tokens decentralized shielding

Hey Incognito users,

We’re excited to introduce a new feature that allows you to shield ETH/ERC20 tokens into Incognito right from your personal crypto wallet. This works best on Metamask and Trust Wallet, the two best ones among wallets supporting the WalletConnect protocol. In case you don’t know yet, WalletConnect is an open protocol for connecting wallets (e.g. Metamask, Trust Wallet, etc) to dApps (e.g. Incognito app). You can also find the exhausted list here.

The following is a demonstration of how to use the feature:

You can also find a step-by-step walkthrough on the topic. This is the user guide for the staging app version we published last week but still applicable for the official one.

There are a few important notes you need to be aware of while using the feature:

  • With the feature, you will be able to shield ETH/ERC20 tokens in a decentralized manner and will no longer need to send funds to a temporary address managed by the Incognito team. In other words, you control your funds along with the possibility of boosting up a stuck transaction during Ethereum’s congestion yourself.

  • It is still beta and works best on iOS devices. On some Android devices, it’s unstable, we’ve tried our best to bring it to the same stability level as iOS’s but it’s a bit tricky since it requires interaction between the Incognito app and an external wallet via WalletConnect protocol. Unfortunately, we cannot control the connections as well as the behavior of external apps so once you encounter an issue, please kill both apps and retry again.

  • On Android devices, please turn off saving battery mode that may restrict background data. Technically, this mode may kill connections between apps to WalletConnect’s bridge server once one of the apps goes background.

  • The option of shielding with a temporary address is still existing, this is a fallback option for those who have issues with the new one. In terms of user behavior, the option is well-suited for users who want to shield their assets directly from other platforms like exchanges (not through a personal wallet such as Metamask or Trust Wallet). Please note that, in this process, Incognito background jobs are choosing a quite high Ethereum gas price to make sure the transactions go through as smoothly as possible, the gas price is usually higher than the common transactions in the Ethereum network, that’s why Incognito is covering 40% of shielding fees to make it fair with the decentralized one.

Please give this a try and share your thoughts.
Thank you!


:partying_face: :partying_face: :partying_face: Hurray!Thank you to the team!!! :partying_face: :partying_face: :partying_face:


Thanks for the update @duc , it is very encouraging to see more features and services being rolled out on Incognito.

I’m still a huge fan of this project despite the recent changes with the growth team, whom I really learnt a lot from and enjoyed the monthly PRV Holders calls. None-the-less, as long as there continues to be updates like this that expands the ease of use of the Incognito network this is a great sign that the project is still alive and well :slight_smile:

Also, a huge SHOUT OUT to incognito team for absorbing 40% of fees to make it more competitive versus other platforms.


Hi @Linnovations, thanks for still being around, the core team has been working together on the project for almost 3 years now, that is a strong commitment I think, the project must be alive and developing in a positive way.

Regarding fees, we totally understand its expensiveness would be a big barrier to onboard new users like what I discussed with @marko on this topic. That’s why we’re prioritizing building a bridge to Binance Smart Chain (BSC for short). Imagine that through BSC bridge, people can go Incognito for all popular crypto assets out there such as BTC, ETH, USDC, etc with much cheaper fees. Furthermore, looking into the market cap of wrapped tokens on BSC, it’s also interesting to figure out a way to utilize BSC’s ecosystem or bring Incognito mode to BSC’s dApps for more specifically.

Also, in case you don’t know yet, we’re following Ethereum’s London hard fork (especially EIP-1559) to see how it affects Ethereum’s fees scheme, hopefully, it will bring affordable fees to the community.


Does anyone know the flow and smart contract addresses of the new design?

It’s looking like about 40 days ago all ETH funds were sent into a new smart contract (by the way, was this announced? Who are the admins?). This new smart contract doesn’t look like it can be shielded directly to (probably smart for safety). What’s that smart contract?

(I want to try to figure out how to use etherscan’s “write contract” page to shield coins directly from PC instead of mobile.)

The smart contract could be found on etherscan at https://etherscan.io/address/0x43D037A562099A4C2c95b1E2120cc43054450629

This is the latest contract for fixes of reported issues by the audit.

In this smart contract, you’re still able to shield directly just like the previous versions. You can find the smart contracts’ code along with unit-tests at https://github.com/incognitochain/bridge-eth. I guess you can look into the unit-tests to figure out how to shield ETH/ERC20 tokens from your own scripts.

Finally, just curious that why you’d prefer to shield coins directly from PC instead of the mobile app we’ve built? Your answer definitely helps us understand and improve our products in the future. Thanks!

  • Most web3 dapps are not launched with a mobile experience in mind. Even if there is a mobile view it’s not something I personally like doing on mobile.
  • I also like to use hardware wallets sometimes or at minimum multiple wallets which is harder to manage on mobile.
  • As of now the new mobile experience requires I send funds to a different wallet on my mobile device and then send again to incognito.

I envisioned and now dream of a simple web interface that I can copy/paste my incognito address. In other words I would go to shield.incognito.org or something, connect web3 to my wallet like metamask, and then copy/paste my incognito address. Maybe it’s not that simple but I hope that it is.

Unfortunately what’s required to build that is beyond what I know. I was hoping there would be a shield command or something I would recognize at https://etherscan.io/address/0x43D037A562099A4C2c95b1E2120cc43054450629#writeContract

Keep up the good work. I’ll keep watching what the developments are :grinning:


Something strange is going on with the new shielding process. I’m here at the shielding screen:

  • Clicking Rainbow opens the app but does not prompt me to connect. Without connecting I can’t interact with incognito. I can go to other websites and it allows for walletconnect no problem
  • Clicking some of the other apps will launch the link to download the app.
  • Clicking some of the others brings me to the wallet website but not a link to download the app.
  • Clicking some others does nothing; not even launching the app (like imToken which I use a lot but it doesn’t launch).

Can you please fix Rainbow & imToken wallet specifically? And maybe double check that all the listed wallets are working? Maybe the walletconnect piece has an upgrade??

Hi @marko, thank you for using the new feature. This feature works best with Metamask and Trustwallet, so please try these external wallets instead to avoid bad experience. I tried on both Rainbow and imToken and it doesn’t work so well ( imToken run smoothly only on android device and Rainbow doesn’t work on both). We’re using WalletConnect’s latest version on the app side and when WalletConnect team releases new version, we will update it immediately and give you a notice. Sorry for this bad UX and hope to see more feedback from you on this feature. Cheers!!!


The shielding contract is a proxy contract–I don’t know what that means but Etherscan provides a feature marked as new: Read Proxy & Write Proxy Contract. (Link here)

Under that tab it’s very, very easy to shield and interact with the smart contract!!

For ETH you simply need the amount and the destination incognito address.

For ERC20 it’s almost just as easy. You need to know the token address and the amount as uint256 (add 6 zeros and do not use decimals).

This is great news and I wish i was smart enough to create a simple user friendly interface for the community.

My question is about withdraws: Withdrawing is not so straight forward for me to understand. To call withdraw it seems I need to input more variables and I don’t know what they are: Function: withdraw(bytes inst, uint256 heights, bytes32[] instPaths, bool[] instPathIsLefts, bytes32 instRoots, bytes32 blkData, uint256[] sigIdxs, uint8[] sigVs, bytes32[] sigRs, bytes32[] sigSs)

Any insights about what’s going on here and if a pro-user but non developer like me can figure out how to interact with the smart contract directly for withdraws?

1 Like