Basis-Cash Improvement Proposals #4

Title: Modifications to bond redemption process and adding a bond-operation oracle
Author: DeFi Morty, @defibeth
Category: Economic

DeFiMorty
Basis Cash
2 min readDec 16, 2020

--

Summary

The current Basis Bond deflation policy is determined by the treasury’s BAC balance. We propose a new expansion mechanism by which:

  1. In cases of expansion, current bond supply-treasury balance BAC is sent to the treasury from allocated seigniorage for bond redemptions.
  2. Any excess seigniorage is sent to the Boardroom.

Furthermore, we suggest deploying an additional oracle with an epoch length of 1 hour, to be used when performing Bond-related operations by the Treasury.

Motivation

Newly minted Basis Cash has two possible destinations: the treasury or the boardroom.

The treasury is used for Basis Bond (BAB) holders to redeem BAB for BAC. The newly minted BAC that goes to the boardroom is distributed amongst Basis Share (BAS) holders. The Basis Cash protocol first mints BAC into the treasury if there is less than 1000 BAC within the treasury, regardless of the number of BAB tokens in circulation. If there is more than 1000 BAC within the treasury on next expansion, then the protocol mints BAC into the boardroom.

Currently, the Treasury’s BAC balance is set to 1001 by the initializer function. However, this can create a potential attack vector, involving the following steps:

  1. When the price of BAC sits below $1, bonds are issued
  2. Treasury balance falls below 1,000 due to bond redemption
  3. Seigniorage goes to the treasury
  4. If BAC price remains below $1, the attacker will be able to purchase a large amount of BAB
  5. Drain the BAC balance of the treasury upon next expansion

The attack described above has very low feasibility, but should it succeed it can potentially damage the value of the BAC token. Furthermore, as oracles currently use 24hr TWAP for peg valuation, this may allow the purchase of BAB at the 24H TWAP price window regardless of the current price of BAC.

The attack can be mitigated by changing two components of the contract:

  1. Allow BAC that goes to the Treasury to only be distributed proportional to the amount of bonds minted, and for any excess amount to be distributed to the Boardroom.
  2. Add a new oracle with an epoch length of one hour, and for the Treasury to utilize the oracle for bond-related operations.

Specification

We suggest modifying Treasury.sol as follows:

let treasuryReserve = min(seigniorage, bondSupply -seigniorageSaved);
sendTo(Treasury, treasuryReserve);
sendTo(Boardroom, seigniorage - treasuryReserve);

We suggest modifying the oracle mechanism as follows:

Deploy a new oracle with an epoch length of one hour, and modify the Treasury’s bond-related operations to use the new Oracle instead of the current TWAP oracle.

--

--

DeFiMorty
Basis Cash

Aw geez, Rick | Chief Marketing Intern @basiscash