RToken Deployment Guide
Reserve’s mission is to increase accessibility to sustainable, inflation-proof currency.
To facilitate this, the Reserve protocol permissionlessly allows anyone to create RTokens backed 1:1 by collateral assets of their choosing. The options for governance design and RToken operational parameters available to deployers are essentially limitless.
This guide walks through the main steps and considerations to deploying an RToken using the Reserve Register app..
Before You Begin
Step 0: Before You Begin
Before deploying, it’s important to consider what goes into creating a successful RToken. Each RToken will have its own ecosystem use-cases, community, and unique go-to-market strategies.
Just because anyone can deploy and/or mint and RToken does not mean adoption is guaranteed.
Questions to consider
Important factors to consider include:
- Is the collateral backing of your RToken diverse and/or attractive to users? (Find available collateral plugins here; alternatively, learn how to create a custom plugin)
- What are the yield targets (if any) for your RToken? (Get inspiration from DefiLlama, and fork this model to model your basket yield)
- Is there an interesting or unique revenue-sharing approach for your RToken? (Fork this model to help with calculation)
- What is the brand name, ticker, and one-line marketing hook for your RToken?
- What will the RToken’s mandate be? (The 256-character mandate describes what goals its governors should try to achieve)
If you’re unsure how to answer any or all of these questions, the Reserve community is welcoming and willing to help! Jump in the Reserve Discord server here.
Collateral and revenue
To explore different RToken collateral basket mixes, deployers are encouraged to fork the model here, using DefiLlama to identify desirable pools. Additionally, we have created a backtester that allows deployers to visualize aggregate yield with different basket compositions.
RToken revenue-sharing is multi-faceted and should be carefully considered. It is possible to direct underlying revenue in a number of ways. Consider the following advantages of sharing revenue with different entities:
- RToken holders: incentivizes minting and holding as a savings vehicle
- RSR stakers: incentivizes decentralized governance and overcollateralization
- Arbitrary address: can incentivize a DAO to actively manage/advise the RToken or send revenue for use in other ways such as incentivizing liquidity
Checklist review
- I know what network I wish to deploy on (Ethereum, Base, Arbitrum)
- I know what assets will comprise the collateral basket
- I know what the revenue distribution configuration will look like
- I have selected a token name and ticker
- I know what the RToken’s mandate will be
- I have studied and know what the RToken’s parameters will be (section 5 below)
Getting Started
Step 1: Getting Started
- Navigate to the Reserve Register app
- Connect your wallet using the Connect button in the top right
- Scroll down to “Deploy your own RToken” and click Go to the RToken Deployer
Define your RToken
Step 2: Define your RToken
An RToken’s name, ticker, and mandate are important as unique identifiers which serve to convey its core purpose and set it apart from other products in the marketplace.
- Network - The RToken’s native blockchain
- Token Name - The RToken’s full name
- Ticker - The RToken’s abbreviated symbol (Staking token name and ticker are auto-generated)
- Mandate - Description of the goals the RToken’s governors should try to achieve. By briefly explaining the RToken’s purpose and what the RToken is intended to do, it provides common ground for the governors to decide upon priorities and how to weigh tradeoffs.
Configure RToken Basket
Step 3: Configure RToken Basket
Now it’s time to define what collateral assets back your RToken, and in what proportions. Emergency collateral can also be defined as fallbacks in the event any primary collateral defaults.
A number of collateral plugins can be employed “out-of-the-box.” If a desired collateral plugin doesn’t already exist, developers may create and deploy custom plugins.
- Under “Primary Basket,” click the “Add to basket” button
- Select your desired collateral assets. In this example, a number of yield bearing stablecoin positions will be used.
Note: In order to mint the RToken after it’s created, deployers must either have the selected collateral assets in their wallet, or use the “Zap Minting” utility, which enables minting using just 1 asset (e.g., mint eUSD using just USDC).
- Once satisfied with the selected assets, click “Add to basket”.
- Select your asset distributions, as well as the number of target units (e.g. USD, BTC, ETH) your “Target Basket” comprises.
Configure Backup Basket
Step 4: Configure Backup Basket
- It’s generally recommended to configure Emergency Collateral in a backup basket. These are defined separately for each target unit.
- The ‘Diversity factor’ of your backups dictates the number of backup assets the RToken will scale into when exiting defaulted collateral (split evenly if there are multiple backups).
Configure Parameters
Step 5: Configure Parameters
This section discusses what each configuration parameter does, and why it’s important.
Note that the Reserve Register app provides sensible defaults and unless you’re an advanced user, you can deploy your RToken using the defaults and skip this section.
Backing Manager Parameters
- Trading delay - how many seconds should pass after the basket has been changed, before a rebalancing trade can be opened. This helps to avoid losses due to poor liquidity.
- Batch Auction length - defines how long (in seconds) Gnosis EasyAuction auctions should be. Gnosis EasyAuction is a platform enabling fair price discovery for tokens through the use of batch auctions. Read more here.
- Dutch Auction length - defines how long (in seconds) Dutch auctions should be. Dutch auctions are the preferred auction mechanism. Read more here.
- Backing buffer - percentage value that describes how much additional collateral tokens to keep in the BackingManager before forwarding tokens to the RevenueTraders. The RevenueTraders here refers to the RToken and RSR traders. It provides a buffer to prevent RSR seizure after trading slippage. See more info here.
- Max trade slippage - maximum deviation from oracle prices that any trade (during protocol operations, such as recollateralization auctions) can clear at. This is important because it acts as a form of slippage protection.
- Issuance throttle rate - limits the amount of RTokens that can be issued per hour based on a percentage of the current RToken market cap. This matters in the event of an attacker front-running the detection of bad collateral.
- Issuance throttle amount - similar to the ‘Issuance throttle rate’ above, but rather than being expressed as a percentage, the throttle limit is set as an absolute number of RTokens. The maximum of the 2 numbers is used to limit issuance.
- Redemption throttle rate - limits the amount of RTokens that can be redeemed per hour based on a percentage of the current RToken market cap. This matters in the event of an exploit where an attacker tries to redeem RTokens. This buys time for users with pause or freeze permissions to temporarily prevent RToken redemptions.
- Redemption throttle amount - similar to the ‘Redemption throttle rate’ above, but rather than being expressed as a percentage, the throttle limit is set as an absolute number of RTokens. The maximum of the 2 numbers is used to limit redemptions.
- Warmup Period - the number of seconds that a RToken waits after it has reached a status of
SOUND
(i.e., fully collateralized, with all collateral assets in a “sound” state) in order to begin allowing issuance and trading. - Unstaking Delay - the number of seconds that must pass after a user has unstaked their RSR before they can withdraw it. This is done to prevent stakers from frontrunning defaults. This should be longer than the "governance cycle" to ensure stakers participate during basket changes.
- Reward Ratio - a fraction that represents how much of the accmulated revenue to hand out each second. This applies both to RToken melting in the Furnace and the RSR reward drip in StRSR. It is an exponential decay with a corresponding known half-life.
- Withdrawal Leak - a fraction that represents how much RSR could potentially leave StRSR before forcing an asset registry refresh. This is a gas optimization to help small unstakers.
Other Parameters
- Short freeze duration - Short freezers have the responsibility of freezing an RToken if anything dangerous or suspicious is happening. This is a one-shot freeze and the role will be revoked after a single use. This field determines how long the RToken will remain frozen until the freeze expires or is extended by another actor.
- Long freeze duration - freeze an RToken’s system for a longer period of time. A long-freezer has 6 charges before losing the ability to freeze any more.
- Withdrawal leak - the percentage of total RSR that can be unstaked from stRSR before the RToken is forced to refresh its status. This allows smaller stakers to avoid massive gas costs when unstaking smaller amounts of RSR.
- Unstaking delay - number of seconds that RSR stakers must wait before they are finally able to withdraw. This is done to prevent stakers from frontrunning defaults. This should be longer than the "governance cycle" to ensure stakers participate during basket changes.
- Reward ratio - amount of the current reward amount that should be handed out in a single block. The default corresponds to a half life of approximately 30 blocks
- Minimum trade volume - minimum sized trade that can be performed (during protocol operations, such as revenue auctions), in terms of the unit of account eg. USD
- Maximum trade volume - maximum sized trade for any trade involving RToken, in terms of the unit of account eg. USD
Deploy RToken
Step 6: Deploy RToken
Once you’re satisfied with your RToken’s name, basket composition, and other parameters, you can click “Deploy RToken” button which will prompt you to sign a transaction (“Tx1”).
Congratulations! You have successfully deployed your RToken. However, no governance system has yet been configured. Continue reading to learn how to set up decentralized governance on your RToken using Governor Anastasius.
Note that if you aren’t yet ready to set up governance, you can leave your RToken paused and return later to finish.
Set up Governance
Step 7: Set up Governance
- If you wish to use Governor Anastasius (default; recommended by Reserve), ensure the following toggle is active
- Carefully select addresses for Guardian and Pauser roles. See here for more details on system roles.
- Guardian - the Guardian has the permissions of the Pauser, the ability to invoke a
LONG_FREEZE
, and the ability to cancel any active proposals prior to execution. The Guardian is a highly permissioned role which should be entrusted to a multi-sig wallet - Pauser - the Pauser can
PAUSE
andSHORT_FREEZE
. When an RToken is paused, all interactions besides redemption, issuance cancellation, ERC20 functions and staking of RSR are disabled. When an RToken is frozen, all interactions besides ERC20 functions and staking of RSR are disabled
Next, configure the ‘Governance parameters’
Note that the Reserve Register app provides sensible defaults and unless you’re an advanced user, you can deploy Governance using the defaults and skip this section
Governance parameters
- Snapshot delay - Delay (in number of blocks) — Delay between when the proposal is submitted until voting power is fixed and voting starts. This can be used to enforce a delay after a proposal is published allowing for users to stake more RSR, or delegate their votes
- Voting period - Length (in number of blocks) from when the proposal starts until voting ends
- Proposal execution delay - The minimum amount of time (in hours) after a proposal passes before it can be executed
- Proposal Threshold - The minimum stRSR ownership on an RToken required (in percent) to be able to create a proposal
- Quorum - The minimum stRSR voter participation (either For or Abstain) on a proposal (in percent) before it can be passed
Select whether your RToken will be left in a paused state or whether it will be functional after configuring governance (In other words, the deployer decides whether the RToken should be active immediately post-deployment, or whether governors should decide to start in a paused state.)
Once you’ve made a selection, click “Deploy Governance”. Once that transaction confirms, the RToken is live onchain with the RToken live state parameters you chose above.
Closing
All of the RToken’s relevant contracts can be viewed under the “Related Contracts” section of the UI. The RToken is now ready to accept collateral assets and be used throughout the ecosystem.
The deployment process is complete! That said, your new RToken’s journey has just begun — ongoing attention and marketing are required for RToken’s to distinguish themselves in a crowded marketplace and truly flourish.
Join the Reserve Discord server to share knowledge with and learn from other RToken deployers in the ecosystem.
Appendix
How to create custom RToken collateral plugins
Deployers have the option to create and use custom collateral plugins for an RToken by adding a custom plugin contract address in the Primary Basket or Emergency Collateral during the deployment process.
The following resources will be of use to those wishing to create custom collateral plugins:
- Collateral Plugin Overview describes what a developer needs to know to begin writing and contributing collateral plugins. Familiarity with this material is crucial before jumping into writing a plugin.
- Writing Collateral Plugins describes the general process a developer should follow when writing a new collateral plugin. Filling this out accomplishes 90% of the work necessary before any coding is required.
- Reserve’s Solidity Style details practices and conventions relevant to reading and writing Solidity source code in the Reserve house style.
Troubleshooting questions and feedback are always welcome in the Reserve Discord server. The #🔧|technical-discussions channel is actively monitored by core team engineers.
RToken deployer video tutorial
How to Deploy an RToken in about 5 minutes
This video demonstrates how to deploy an RToken on the Reserve Protocol using register.app. The process involves defining the RToken name, ticker, primary and emergency collateral baskets, revenue distribution, and governance parameters, followed by deploying the RToken and governance smart contracts.
06:46Coingecko / CoinMarketCap listings
CoinGecko and CoinMarketCap (CMC) are some of the largest information aggregators for crypto. Users considering buying a token will often first consult the relevant pages from these sites. Therefore, it is important for new RTokens to be listed on these sites, to increase the amount of trust and accessible information for prospective users.
View the CoinGecko/CoinMarketCap listing guide here.
Deploy a Curve pool
Creating a Curve pool for your RToken is an excellent way to provide liquidity and trading opportunities for users. The Deploying a Curve Pool guide outlines the necessary considerations for deploying a factory pool for your RToken.
Create Curve/Frax gauges
Liquidity gauges allow projects like Curve and Frax to incentivize liquidity with their own governance tokens, CRV and FXS, respectively.
Creating Curve/Frax Gauges walks through the process of creating a Curve gauge and a Frax gauge for your RToken’s Curve pool. Note that you should have a Curve pool deployed before embarking on this.
Anyone can create an RToken
In a similar way as how anyone can create a new trading pair on Uniswap, anyone can permissionlessly create a new Reserve stablecoin (RToken) by interacting with Reserve Protocol’s smart contracts. The protocol applies a system of factory smart contracts that allows anyone to deploy their own smart contract instance.
Creating an RToken can be done either by interacting directly with the Reserve Protocol’s smart contracts or any user interface that gets built on top of it. The first user interface for these smart contracts will be released by ABC Labs the company that's leading protocol development. Besides the creation of RTokens, this user interface will also support exploring usage and stats related to RTokens, RToken minting & redeeming, and RSR staking.
Non-compatible ERC20 assets
The following types of ERC20s are not supported to be used directly in an RToken system. These tokens should be be wrapped into a compatible ERC20 token to be used within the protocol. A concrete example is the use of Static ATokens for Aave V2.
- Rebasing Tokens that return yields by increasing the balances of users
- Tokens that take a "fee" on transfer
- Tokens that do not expose the decimals() in their interface. Decimals should always be between 1 and 18.
- ERC777 tokens which could allow reentrancy attacks
- Tokens with multiple entry points (multiple addresses)
- Tokens with multiple entry points (multiple addresses)
- Tokens that do not adhere to the ERC20 standard in general
Advanced RToken parameters
When deploying an RToken, the deployer has the ability to configure many different advanced parameters. The following list goes into detail about what these parameters do and some of the factors the deployer should keep in mind to set them.
As many of these parameters concern the Protocol Operations, we advise reading through that section of the documentation first—as it will give the deployer the necessary context to fully understand all parameters.
Trading delay(s)
The trading delay defines how many seconds should pass after the basket has been changed before a trade can be opened.
A collateral asset can instantly default if one of the invariants of the underlying DeFi protocol breaks. If that would happen, and we would not apply a trading delay, the protocol would react instantly by opening an auction. This would give only auctionLength seconds for people to bid on the auction, making it very possible for the protocol to lose value due to slippage.
The trading delay parameter may only be needed in the early days - before we get to a point where there is a robust market of MEV searchers. We expect that this parameter can be set to zero later on (once a robust market of MEV searchers is established).