The Rico Reflex Bond System is a spiritual successor to the Dai and Rai systems, built with an emphasis on automation and market rate discovery.
A reflex bond is a synthetic asset that is mechanically similar to a collateralized stablecoin, but uses a moving par price relative to an external reference asset to balance supply and demand. See bank.dev/vox for details about price vs quantity rate and par price adjustment mechanism.
One of the primary design principles and differences from earlier iterations of the Rico system is an emphasis on minimalism. This makes it not only easier to audit, but easier to understand the entire system at once. Everyone using the system, and not just developers, should understand all the components and how they fit together.
There are only three core components:
vatis the main CDP accounting module
voxis the par price adjustment mechanism
vowis the liquidation and profit/loss mechanism
And three auxiliary systems, defined by interface:
feedsubsystem puts price feeds from oracle systems, AMMs, and other source, into one common base protocol
flowsubsystem implements the liquidation and profit/loss auctions
rulesubsystem is responsible for adding new CDP types and managing their parameters
Finally, there are two tokens:
RISK is the system’s risk-share. It represents the present value of future interest from all RICO loans, minus bad debt bailouts. All profits and losses are immediately realized via RISK buy/burn or mint/sell.
The model for ROI on RISK is buy/burn, offset by mint/sell when bad debt must be covered. Buy/burn is like a share buyback, and leads to the same present value as a dividend model. To see how they are equivalent, consider a strategy that sells a fraction of its risk share equal to the fraction of global risk share burned. The seller’s cashflow from these sales are analagous to receiving a dividend for their fraction of the risk share, on a recurring basis.
There is some nuance related to how interest is calculated and charged.
Interest is collected in real time. Every
drip (which anyone can call) charges interest to all CDPs of a given type.
drip adjusts the internal debt unit so that the amount owed reflects all interest up to present.
Because it can be called at any time, the debt owed can be considered a continuously prorated value.
A less efficient but “more correct” implementation could force a
drip before every single interaction,
which would make all values actually prorated in real time.
drip also results in the creation of rico equal to the amount charged,
which is immediately released into the market through the RISK buy/burn mechanism.
Effectively “principal plus interest” becomes just “principal” in real time, and this equals the amount of rico in existence. The value comes out of the value of the CDP. If the CDP becomes unsafe because the growing debt amount exceeds the minimum collateral ratio, it can be liquidated just like if the collateral value falls too much.
Again, the amount of credit and debt in the system are equal at all times.
In a naive implementation, the amount of debt owed exceeds the amount of credits in the system,
which combined with lack of
way for setting a negative effective rate, would cause the system
to inevitably collapse, when interest owed is greater than what the system can actually pay.
Vat is the main CDP accounting module. It holds collateral tokens and mints/burns rico.
froba CDP to adjust collateral balance and debt
flashto flash mint rico and/or flash borrow collateral
safeto determine if a CDP is safe, risky, or unknown
grabunsafe CDPs to liquidate them
dripaccumulated interest to buy-and-burn
healbad debt with its ability to mint-and-sell
prodthe par price
rulemodule can add new CDP types and set their risk parameters.
feedsubsystem to determine if a CDP is safe.
In the Dai and Rai systems, the
vat was carefully designed to perform all logic without external calls and without loss of precision.
In the Rico system, these two properties are broken, but in a controlled manner which mitigates their side effects:
gemcontracts, with known control flow.
Vow is the module responsible for keeping the system solvent.
It performs liquidations of unsafe CDPs and bails out bad debt with mint-and-sell, which is offset by the buy-and-burn flow from interest charged.
There are two big conceptual differences from the equivalent mechanics in the Dai system.
flipauction for a CDP that was not underwater results in surplus rico, which can be immediately released via
In this model,
flop auctions are not treated as rare, exceptional events.
Instead, buy/burn and mint/sell are two continuous processes, whose net flow determines the moment-to-moment NPV of RISK.
Vox is the par price adjustment mechanism.
The difference between a pegged stablecoin system like Dai and a reflex bond system like Rai or Rico is the moving par price,
which is the system’s internal definition of the price of the synthetic in terms of some external reference asset.
The rate of change of
way, is the primary monetary lever of the system used to balance supply and demand,
and is adjusted automatically in response to market price deviation from
Changes in this price rate adjust the present value of the asset in the same way that changes in the interest rate on a variable rate bond adjusts its present value.
This is in contrast to using the quantity rate or
fee, which is a per-collateral-type risk parameter which should be understood more like an insurance fee.
The main advantage of this model is that price rate be negative (
way < 1),
which gives the system the ability to deal with “squeezes” or “hoarding” without the problem of the quantity rate zero bound,
the inability of the bank to charge a negative quantity rate in a sustainable manner.
In other words, the system can make the effective rate of borrowing vs the external reference asset negative, while still maintaining positive cashflow for the system.
Vox calls the
feed subsystem to find the market price of rico in terms of REF,
way depending on the difference between the market price and
par, then calls
vat to prorate
par according to
Flow is the subsystem that contains implementations of the abstract auction interface used by
It is defined by interface, and can have different implementations for different collateral types.
There are three different auction types, serving different roles.
flipauctions are liquidations, they sell collateral for rico, possibly granting a refund.
flapauctions are the buy/burn auctions which buy RISK with rico interest collected in real time via
flopauctions are the mint/sell auctions which mint RISK to buy back rico to cover debt.
Note that a liquidation results in both a flip auction, selling collateral to buy rico, and a flop auction, minting RISK to buy rico.
Rico will initially use a naive “auction” implementation which simply trades through an AMM. This intentionally inefficient mechanism is designed to catch the attention of MEV seekers. Once keepers are aware that the Rico system is primarily driven by incentivized actions and a healthy competitive market develops, more efficient mechanisms like gradual dutch auctions can be used.
Part of the problem with the Maker system is that the actions designed for incentivized keepers were made opaque and not presented to the market in a way that incentivized competition. This was part of the problem on “black thursday”, when some collateral was sold for 0 dai.
Feed is the subsystem responsible for providing price feeds.
Feedbase is a generic object that serves as a point of coordination that makes it easier to compose various receivers, adapters, and combinators.
BasicReceiver. Another could be
ThresholdReceiver, which verifies a threshold signature.