How RenVM Actually Works
Bringing Bitcoin, Bitcoin Cash, and Zcash to Ethereum
What exactly is RenVM? And, how does it achieve interoperability without centralization or trust? This blog post dives into RenVM in a bit more detail, discussing some of the lower-level parts that make RenVM work.
First, let’s visualize RenVM and what it can do, then we’ll walk through the interoperability process. For the purpose of this blog, we’ll use minting an ERC20 representation of BTC on Ethereum as an example, but the process is the same for all cross-chain assets. RenVM currently supports Bitcoin, Bitcoin Cash, and Zcash and is capable of supporting any assets that use ECDSA private keys (which is almost all of them). For reference, the RenVM Mainnet ERC20 naming will be:
- renBTC for BTC on Ethereum
- renBCH for BCH on Ethereum, and
- renZEC for ZEC on Ethereum.
This differentiates the RenVM Mainnet tokens from zBTC/etc. tokens that we use in non-production environments (Devnet, Testnet, and Chaosnet).
What is RenVM?
A Versatile Decentralized, Trustless, and Permissionless Custodian
The easiest way to imagine RenVM is to first think of a trustless custodian that holds your digital assets as they move between blockchains. You give BTC to RenVM, it holds that BTC, and it mints that BTC as an ERC20 (a.k.a. renBTC) on Ethereum with 1:1 ratio to ensure your renBTC is always backed by the same amount of BTC.
Let’s look at an existing model that is similar: WBTC.
Under the hood, there is little technical similarity between WBTC and RenVM, but visualizing WBTC can help in understanding RenVM. With WBTC, a qualified entity gives BTC to BitGo, a centralized custodian. They hold it in cold storage, keep track of the cumulative balance received, and then create a 1:1 representation of that BTC on the Ethereum blockchain as an ERC-20 (a.k.a. WBTC). It’s then provided to merchants to sell WBTC on the open market. In general they take BTC, store it, and mint 1:1 WBTC on the Ethereum blockchain.
RenVM does the exact same thing, it takes BTC, stores it, and mints 1:1 renBTC on the Ethereum blockchain but on a much faster time scale.
Three Important Differences
1. Fluid Value Exchange
Instead of storing the BTC within a centralized or trusted custodial setup, RenVM stores the BTC in a network of decentralized nodes (called Darknodes). Once RenVM receives BTC, it immediately mints a 1:1 ERC20 representation, that individuals and DeFi apps can use. An important subtlety is that this value exchange (minting and burning) is fluid; it can be done hundreds of times per minute, at any time and in any amount without centralization, merchants, signatories, or friction, allowing the seamless movement of cross-chain digital assets (i.e. interoperability).
Another difference is that RenVM is composable (think DeFi lego blocks). It can be abstracted away from end-users, and integrated directly into DeFi apps. Using specialized adapters, DeFi apps can bring cross-chain functionality to their users without users needing to worry about minting/burning/wrapping/unwrapping. Any person — or app — can use and integrate RenVM. The end result is that users can swap BTC on a DEX, lend/borrow BTC on a lending platform, or collateralize synthetic assets using BTC, and only ever use real BTC to do it. The user never has to see renBTC, or in some cases even Ethereum itself.
3. Decentralized, Trustless, and Permissionless
The ECDSA private keys used within RenVM are completely secret, even from the nodes themselves. RenVM generates and signs data with its ECDSA private keys using a secure multi-party computation algorithm. No party can prevent users from minting renBTC with their BTC, burning their renBTC to get back BTC, or using their renBTC in any way they want to.
These three core differences set RenVM far apart from any similar solution in existence today by providing universal interoperability.
Okay, so I understand what RenVM is but how do these cross-chain movements work?
Any asset minted on Ethereum by RenVM is a 1:1 backed ERC-20. This means that if you have 1 renBTC (an ERC-20), you can always redeem it for 1 BTC. It’s a direct supply peg. renBTC isn’t a synthetic, it doesn’t rely on a liquidation mechanism, and it’s not the price of Bitcoin on Ethereum. It is a one to one representation of Bitcoin on Ethereum that can be redeemed for BTC at any time, in any amount.
Minting BTC on Ethereum
To mint renBTC, you simply need to send BTC to a Bitcoin address:
1) Bob wants to use his BTC in DeFi, so he finds an app that’s integrated RenVM and when prompted, the app will generate a unique Bitcoin address (this is the address of a Bitcoin script that is only spendable by one of RenVM’s secret ECDSA private keys).
2) Bob sends 1 BTC to the address provided, and waits for 6 Bitcoin confirmations. Once 6 Bitcoin confirmations have passed, RenVM immediately produces a minting signature using one of its secret ECDSA private keys, and Bob takes this signature and uses it to mint 1 renBTC (minus the RenVM fee) to Bob’s designated web3 wallet (e.g. MetaMask).
*Note: these steps are usually taken automatically by the UI and do not need to involve explicit action by Bob.
3) Now Bob can take that renBTC and use it in any DeFi app that he pleases. He can take out loans, trade on Uniswap, margin trade, collateralize Dai, and earn interest on his BTC. Notably, this renBTC is completely fungible and can be broken down into any amount and is indistinguishable from renBTC minted by others.
Redeeming BTC from Ethereum
Redeeming is as simple as minting, and X renBTC is always redeemable for X BTC. When Bob is ready to switch back into BTC, he burns his renBTC to redeem the same amount of real BTC:
1) Bob wants his real BTC back, so he finds an app that’s integrated RenVM and when prompted by the UI, Bob provides his Bitcoin address (the destination for the redeemed BTC). Once provided, he submits it as part of a burning transaction to Ethereum.
2) Bob pays a small amount of gas for the transaction on Ethereum, waits a short period for Ethereum confirmations. RenVM then sees that the renBTC has been burned, and releases the respective amount of BTC to his specified Bitcoin address (minus the RenVM fee).
3) Now Bob has his real BTC in his wallet and can do what he pleases with it.
*Note: All this is possible right now on Bitcoin/Ethereum Mainnet (albeit with unaudited deployment called Chaosnet). If you’d like to try out this process yourself, with a small amount of BTC, checkout Roundabout, an app that uses RenVM.
The New RenVM Wiki
For those who are technically inclined and would like an in-depth explanation of all RenVM components, please check out our new Wiki! It’s a work in progress, but any and all feedback is welcome!
RenVM AMA | January 10th
Still have questions about RenVM? Be sure to participate in our RenVM AMA which will be hosted on our Subreddit, January 10th, 2020. See you there!
Get Involved | Developer Center
Want to know more and interested in integrating RenVM with your DeFi protocol, app, or wallet? Join the Ren Alliance here and check out our Developer Center where our team will provide one on one development support!
— Loong Wang, CTO, Ren