I could not find much information on how the buyback would happen on the P125 debt token, so let’s start a conversation about how things could be implemented.
Here is what I would like to see implemented:
- Ooki creates a staking vault where people stake their tokens and own a percentage of the pool.
- Whenever the DAO decides to buy back P125, they distribute the fees to stakers, relative to their percentage of ownership. And burn the equivalent of the P125 staked.
- If people want to get out early and sell, they can do it on a secondary market outside of Ooki.
This is very similar to how Ooki/Bzx fee staking works, except tokens in the vault are also burned on each payment.
The advantage of that proposal is that:
- we can start getting rent as early as the first payment without losing any value. We do not need to exit early if we need any cash flow.
- It’s fair, as everyone is getting the same percentage paid back each time.
- Ooki does not care about the price of the token, they will always burn 1 token for 1$ distributed. That makes the contract implementation dead simple.
Here’s a concrete example to make this crystal clear.
Let’s assume there is a vault of 10M P125 tokens.
UserA staked 1M token, owns 10% of the vault at the moment.
UserB staked 0.5M token, owns 5% of the vault at the moment.
DAO has 1M to buy back. It distributes 100k to UserA, 50k to UserB, … and burn 1M P125 tokens.
UserA is left with 0.9M P125 token staked & 100k in USD.
UserB is left with 0.45M P125 token staked & 50k in USD.
And the vault is left with 9M tokens to buy back at a later time.
DAO stops purchasing once there is no more token in the vault.
Updated on Dec 16th from conversations on Telegram:
Here is a possible implementation:
For the staking contract’s behavior:
deposit: Called by the user. Stake P125 token. This function transfer P125 token to the contract and updates the % of shares the user owns.
withdraw: Called by the user. Get back your P125 token. This function transfers the P125 token back to the wallet and updates the % of shares the user owns.
harvest: Called by the user. Transfer the USD paid back available on the contract back to the user’s address. Either by using the address on the contract or by using token tracking. This is important to allow users having low rent to only harvest when it makes sense to them.
earn: Call by Ooki with the 30% fees. Deposit the USD into the contract and distribute it by share % to the users for them to harvest at a later date.
The earn function should not allow depositing more USD than there is P125 staked. For every USD deposited to the contract & distributed, 1 p125 token is burned (transfer to 0xDead)
The DAO keeps using 30% of their fees until they reach 0 P125 tokens in the vault.
To avoid creating more tokens, the contract does not mint any token tracker in returns. We take the same implementation as Autofarm does for its vault. The contract tracks the amount of P125 token per address, and harvest/withdraw can only be done back to the same address that deposited the P125.
While that creates a small drawback, it makes the implementation a lot easier by only having one P125 token and one staking contract.
Once the number of P125 tokens reaches 0 in the staking contracts, Ooki will announce it to their users and give them x days/week (TBD) to stake their remaining P125 into the contract.
If no new P125 is staked into the contract before the deadline, then the entire reimbursement scheme stop and people still holding P125 (outside of the staking contract) will forfeit their reimbursement.
To address people wanting to sell early at a lower price, we could start with a telegram channel where people could announce/find bids and redirect them to use peer-to-peer swap (e.g: nfttrader.io/trade).
That would give the market a good idea of the price range people are looking at, allowing a secondary market to emerge (e.g: creating an LP if that makes sense).
This is not the responsibility of Ooki though.