Introduction to a trustless non-custodial Bitcoin bridge

Hi everyone, Portal comes back.

As mentioned in the previous post, we are building the Incognito’s trustless non-custodial bridge v4 (portal v4), and it’s available on the Testnet environment. We are planning to deploy it on Mainnet in a few days. Portal v4 will replace the centralized bridge for Bitcoin (BTC). In other words, after Portal v4 release, users can shield/unshield Bitcoin through the trustless non-custodial bridge instead of the current centralized bridge. We summarize the improvement details in the following table.


As you know, Portal v4 allows users to shield their BTC into pBTC to transfer, trade anonymously in Incognito, and unshield back to their external wallet anytime. We describe the shielding and unshielding flow details in the next lines.

The shielding flow

As usual, to shield BTC from the Incongito app, tap “Assets” and then press “Shield my crypto”. The shielding screen will look like the following image.


The shielding address is a multisig address (SegWit P2WSH) which is generated from seven master public keys of beacons and the Incognito address of the shielding user. Each Incognito address has a unique shielding address. The user can send Bitcoin to the shielding address multiple times in a row (no need to wait for the previous one to finish) as long as the shielding amount is not less than the minimum amount (0.0001 BTC). Moreover, there is no expiration time for shielding so the user could shield at any time.

After the public transaction (BTC transaction) is confirmed with at least 6 blocks, the Portal Worker (PW) will submit the shielding proof to the Incognito chain. If the shielding proof is valid, Incognito will mint the corresponding amount of pBTC to the user’s payment address (1BTC = 1pBTC).

And then, the user is able to transfer and trade Bitcoin anonymously.

The unshielding flow

If the user wants to get back his Bitcoin, as always, the user does the following steps to unshield: Tap the “Assets” menu, choose “BTC” token, press “Send” and input the unshielding amount and the external address that the user wants to receive back Bitcoin.

When unshielding, the user has to pay two fees, one for the Incognito network, one for the Bitcoin network:

  • Incognito network fee: only PRV, for the unshielding request transaction (aka. burning transaction),
  • Bitcoin network fee: only BTC, for the BTC transaction that Incognito sends back to the user’s external address. Notice that this is just an estimated fee (maybe the actual fee will be less than or greater than the estimated value), and it will be deducted from the received amount. For example, the user unshields 0.01 BTC, and the estimated fee is 0.00005 BTC, so the estimated received amount equals 0.01 - 0.00005 ~ 0.00995 BTC.**

20210819_153631 20210819_153707

To handle unshielding requests from users, Incognito applies a batching technique. It means that a new unshielding request from a user will be added to the list of waiting unshielding requests. And every 30 minutes, Incognito beacons will process the unshielding requests in the waiting list by creating the Bitcoin transaction(s) with each output corresponding to an unshielding request in the list, and inputs are picked from the list of available utxos (from shielding requests). In the meantime, the Portal Worker listens and gets raw unshielding Bitcoin transactions (signed by beacon nodes) and submits them into the Bitcoin network to release Bitcoin back to the users’ external wallets. After that, the PW will monitor the Bitcoin transactions, if the Bitcoin network is congested, the worker will request beacons to create a replace-by-fee transaction to speed up the confirmation time.

:point_right: Important notes when unshielding:
We recommend users unshield to their own wallet (such as Trust wallet) when unshielding. If the users unshield to another platform (such as centralized exchange, lending service) and the platform sends the funds back to the sender address (a multisig address from Portal v4) because of any issue of the platform. In this case, we can not do anything to get back their funds.

In conclusion, with Portal v4, we try to bring to the users the Incognito bridge that users can shield and unshield in a more trustless, decentralized, and convenient way. If you want to shield, just send Bitcoin to the shielding address corresponding to your payment address. If you want to unshield, press “Unshield” and wait for your Bitcoin to be sent to your external address. If there is any issue when you shield and unshield Bitcoin with the Portal v4, feel free to contact us. Hope you will have the best experience with the trustless non-custodial bridge of the Incognito chain. Thanks for your following Incognito! :heart:


This looks very good. It seems to make the network much more sustainable in the long term.

What I’m still asking myself is why the Bitcoin network fee cannot be changed… As far as I understood the fee for a Bitcoin payment is determined by the device that triggers the transaction. Wouldn’t it be an option to make that field adjustable by the user?

Hi @2Z85mg4825dX38Bbk , thanks for your question.

Bitcoin network fee is not adjustable because we process unshielding requests by batch processing. It means, the protocol collects unshielding requests in the same period and processes them in the Bitcoin transaction(s). The Bitcoin network fee will be divided equally among unshielding requests in the batch. So the unshielding fee of your request will be equal to the others in the same batch.

Moreover, the Bitcoin network fee you see on the app, which is an estimated fee from our services. The actually charged fee can be higher or lower than the estimated one depending on the Bitcoin network status.