Reserve Index DTFs: Liquidity Source Integration Proposal
Title
Reserve Index DTFs: Liquidity Source Integration Proposal
Author
Patrick McKelvy
tg: @pmckelvy1 (preferred)
Simple Summary
Reserve Index DTFs are tokenized baskets of assets, backed many:1 with an exact exchange rate of the underlying collateral. They are permissionlessly mintable and redeemable 24/7 for said exchange rate. Each DTF is governed and managed by it’s own DAO which manages the basket configuration and various other parameters.
Motivation
- What unique value does your liquidity source bring?
- Index DTFs provide instant access to a basket of assets at a one:many exchange rate.
- How will it improve settlement quality?
- Minting or redeeming an Index DTF opens up a new way to arbitrage across multiple assets at once.
- What trading pairs/assets are supported?
- The full list of Index DTFs and their collaterals can be found on https://app.reserve.org/
- Current trading volumes and liquidity depth
- There is about $3m in TVL across all Index DTFs.
- There is about $500k - $1m in daily DEX volume across all DTFs, but that number is trending upward (recently spiked to $3m)
- There is about $500k in daily mint/redeem volume across all DTFs.
Technical Specification
Price Discovery
- How can solvers obtain price information?
- The one:many exchange rate can be obtained by calling the
toAssets()
function on the DTF in question reserve-index-dtf/contracts/Folio.sol at main · reserve-protocol/reserve-index-dtf · GitHub - see the official Reserve docs
- The one:many exchange rate can be obtained by calling the
function toAssets(uint256 shares, Math.Rounding rounding) returns (address[] memory _assets, uint256[] memory _amounts);
- get the one:many exchange rate
- reserve-index-dtf/contracts/Folio.sol at main · reserve-protocol/reserve-index-dtf · GitHub
- INPUTS:
shares
{share} Amount of shares to quoterounding
enum, one of:- [0] Floor (Toward negative infinity)
- [1] Ceil (Toward positive infinity)
- [2] Trunc (Toward zero)
- [3] Expand (Away from zero)
- OUTPUTS:
_assets
Array of assets in the quote_amounts
Array of amounts of assets in the quote
Settlement Interface
-
Smart contract addresses
- all DTF addresses can be obtained from the DTF overview pages on https://app.reserve.org/
-
Function signatures
- see the official Reserve docs
function mint(uint256 shares, address receiver, uint256 minSharesOut) returns (address[] memory _assets, uint256[] memory _amounts);
- reserve-index-dtf/contracts/Folio.sol at main · reserve-protocol/reserve-index-dtf · GitHub
- INPUTS:
shares
{share} Amount of shares to mintreceiver
The address to receive the minted sharesminSharesOut
{share} Minimum amount of shares the caller must receive after fees
- OUTPUTS:
_assets
Array of assets sent to the DTF in order to mint it_amounts
{tok} Array of amounts of the assets used to mint the DTF
function redeem(uint256 shares, address receiver, address[] calldata assets, uint256[] calldata minAmountsOut) returns (uint256[] memory _amounts);
- reserve-index-dtf/contracts/Folio.sol at main · reserve-protocol/reserve-index-dtf · GitHub
- INPUTS:
shares
{share} Amount of shares to redeemreceiver
The address to receive the redeemed assetsassets
Assets to receive, must match basket exactlyminAmountsOut
{tok} Minimum amounts of each asset to receive
- OUTPUTS:
_amounts
{tok} Actual amounts transferred of each asset
- redeem DTF tokens to receive the defined number of basket tokens (given by
toAssets()
)
-
Example transactions
Additional Information
- Security audits
- Trail of Bits
- Cantina
- Trust Security
- Pashov (due late June)
- Known limitations
- Currently, the TVL fee is accounted for every second. This can cause small (deterministic) discrepancies between the amount of DTF the user expects to receive from a mint() transaction, and the amount that they actually receive. This will change with the release (and adoption) of 4.0.0, which will make it so the TVL fee is accounted for once every 24 hours.
- Future roadmap
- Release 4.0.0 is expected in July. Each DTF will need to adopt the release individually.
Contact Information
- Development team contacts
- tg: @pmckelvy1 (preferred), patrick.mckelvy@reserve.org
- I can bring in other engineers as needed
- tg: @pmckelvy1 (preferred), patrick.mckelvy@reserve.org
- Technical support channels
- Response time expectations
- 24hr (1hr if we setup a tg channel)