Modified Perp Buyback Proposal to Support Affected v1 Users

Original post: Re-post: PERP Buyback Proposal to Support Affected v1 Users

Updated: 2022-09-21

In the previous vote, full compensation for the affected v1 users has won, however it didn’t get executed due to it not reaching the quorum. We re-posted it here via LeeKB’s suggestion to get some feedback and understanding on why the largest stake holders don’t vote.

Linked to the original post: PERP Buyback to Support Affected v1 Users and Boost User Confidence to prepare for the BULL run of PERP!

UPDATE: Below is the updated proposal based on Shao and LeeKB’s feedback:

Background and Problem statements:

During the market downturn in the past few months, the entire crypto industry has been facing a liquidity crisis. Users confidence collapsed, leading to massive sell-offs.

Despite best efforts from the PERP team to keep v1 running, it couldn’t escape shutdown as funds were being withdrawn at a high rate. The team responded by shutting down the v1 exchange and put the decision of how to distribute the remaining funds to a vote: Sunsetting Perp V1

The stake holders voted to make whole 99% of wallets (option2), which resulted in the remaining 1% wallets taking massive losses from hundreds of thousands to millions of dollars. Among the affected wallets, a group of mid-size low leverage users were especially outraged and felt that their funds are being taken away in an unjustified manner: Use PERP to provide max(op2, op4) to Perp v1 users ) They have been actively spreading the injustice and their negative experience as well as filing for law suits that could further damage the credibility and the user confidence of PERP.

In the v1 documentation, it’s mentioned that PERP will be sold to compensate affected users during exchange shortfall.


However, the PERP price is already too low at around $1/share at the time of this writing, and selling PERP to compensate at such a low price would result in a significant dilution. But if Perp doesn’t compensate the affected users, it will be perceived as they are not honoring their own documentation, and thus risk losing even more credibility and user confidence. This puts PERP holders in a very difficult spot. As Hana recently stated “The lifeblood of a DeFi project is its users and community.” Proposal: Community DAO Without users confidence, there will be no future for PERP.

Proposed Solution:

Herein, we propose a solution to this dilemma via a long-term PERP Buyback Plan that benefits both the PERP holders and the affected v1 users (credit to LeeKB):

The plan will use a portion (17.5%~25%) of the monthly treasury fee income to buy back PERP tokens (with a minimum locking period of 6 months) regularly over many years to fulfill its promise in the documentation to compensate the affected users with PERP.

The PERP price will receive a monthly price boost as a result of the buy back. The affected users who care enough to stake any amount of PERP in the new vePERP staking system will receive vePERP from the buyback each month with a locking period of at least 6 months as the compensation. Users who do not bother to lock any PERP to claim the compensation is basically taking PERP off the market and giving free money to the PERP holders. The locking period for the affected users can be longer than 6 months if the affected users choose to, so that they can earn more rewards from the staking system…

The source of the fund used to buy back PERP is coming from the treasury fee income, which is the portion of the trading fee income that got overflown into the treasury, and it’s only a tiny fraction (<2.5%) of the total trading fee income under the current fee structure. Thus this will NOT affect the LPs/insurance fund/stake rewards. Please refer to Proposal: Fee Distribution for the detail fee structure.


  • Regular monthly price boost to PERP.
  • Unclaimed PERP could be burnt to further boost PERP price
  • This tells the rest of the crypto community that Perpetual Protocol is indeed honoring its documentation to compensate affected users with PERP.
  • Adding tremendous credibility to the Perpetual Protocol platform.
  • Align interest of the affected users with PERP holders, so they can spread positive news rather than negatives.
  • Reinvigorate user confidence to both the Perpetual Protocol as well as the Crypto community as a whole.
  • The return of users confidence will likely result in further price increase of PERP.
  • The PERP price increase will likely prompt prospective investors on the side line to put more money to buy PERP (i.e. BULL run!)


Option A: Use 17.5% monthly treasury fee income to buy back PERP over the years to cover all op4>op2 users, for their op4-op2 amount.($3.59M), pro rata to compensation amount.

Option B: Use 25% monthly treasury fee income to buy back PERP over the years to cover all op4>op2 users, for their op4-op2 amount.($3.59M) , pro rata to compensation amount.

Option C: Do not compensate.

The amount of buybacks/compensations are calculated below in this csv:
IPFS version

Detailed Distribution Plan:
The implementation will be done via the vePERP reward system/interface similar to referral reward .

If Option A~B passes, the following plan will be executed step-by-step:

Step 1. In the beginning of each month, 17.5%~25 % (determined by the winning option) of the USDC from the monthly treasury fee income will be used to buy back PERP token at market price at the time. This is done manually by DAO Treasury Multisig. The Buyback will only start after DAO Treasury start to receive fee revenue from Perpetual Protocol V2 ( fee distribution is still WIP but will come from the surplus of the InsuranceFund (Dune)

Step 2. To distribute the bought-back PERP token to the affected users, contract admin calls vePERPRewardDistributor.seedAllocation() to store which user can get how much of the bought-back PERP according to the IPFS version of the payout csv (pro-rata by compensation amount). The required amount of PERP will be transferred from the caller into the vePERPRewardDistributor. The amount owe to the users will be reduced by that amount. The remainder of what’s owed to users will be logged in a new IPFS version of the csv each month.

Step 3. Once the affected users decide to claim the accumulated vePERP, they will need to first lock any non-zero amount of PERP for at least 26 weeks to be eligible to claim. Once they have a lock duration of 26 weeks or more, they can then simply click the “Claim” button on the interface or call vePERPRewardDistributor contract claimWeek or claimWeeks to claim their accumulated vePERP.

Step 4. Repeat step 1-3 until the USDC amount owed to the users reduces to 0 or less. If certain affected users were paid off earlier, they will be taken off the compensation list so the next round of pay off will be focused on the remaining affected users.

Note: If a particular user becomes inactive and did not claim any compensation for more than 1 year, or it becomes clear that the user doesn’t want to claim, then the DAO treasury multisig has the full right to decide whether to withdraw that PERP and redistribute to the other users to speed up their pay offs, or simply leave it as it. The determination is up to the DAO treasury multisig.


All in all, this is a win-win solution to both PERP holders and the affected v1 users, and it could have a far reaching implication for the entire Crypto community on its path to regain user confidence and reignite the excitement of DeFi!

1 Like
  • What is the source for your csv data? It doesn’t seem to match any values I have.
  • Your link for the insurance fund ( InsuranceFund ) is not complete because the insurance fund also has an account inside the clearinghouse where the majority of funds are held. It might be better to link to Dune.
  • Let’s also upload a csv to IPFS for this step

The amount owe to the users will be reduced by that amount, which can be updated to the google sheet for record keeping.


  1. The source of my csv data was from the original v1 Sunset vote: link

@LeeKB Are you suggesting we should use a different method of calculating the payout? I’m trying to use your values from your sheet to calculate, but there are multiple tabs in your sheet. Which one should I use?

  1. Will update the link of insurance to Dune.
  2. Will convert to IPFS and update.

gm sir

  1. Ok, sorry I was looking at a second set of data that was created at carview1987’s request. Since you’re using op4-op2 this data is the right one! Sorry for the mix up.
  2. :+1:
  3. It should be enough to mention in the proposal that IPFS versions will be created each month to record the remainder owed to each account.

Ok, updated. Please let me know if all looks good.

Looks good to me.

Please post the title, description, and vote options below and I will add your address to the whitelist. Previously we handled this on discord but I feel it’s more appropriate to handle everything here on the gov forum :pray:

Will you use the same address as last time? 0x89...39C

Please see below:

Title: Modified Perp Buyback Proposal to Support Affected v1 Users
In the previous Buyback vote, full compensation for the affected v1 users has won. However, it didn’t get executed due to it not reaching the quorum. We re-posted for feedback and worked with the team to come up with the following modified version utilizing the new vePERP system for implementation: Modified Perp Buyback Proposal to Support Affected v1 Users

Vote options:

Option A: Use 17.5% monthly treasury fee income to buy back PERP over the years to cover all op4>op2 users, for their op4-op2 amount.($3.59M), pro rata to compensation amount.

Option B: Use 25% monthly treasury fee income to buy back PERP over the years to cover all op4>op2 users, for their op4-op2 amount.($3.59M), pro rata to compensation amount.

Option C: Do not compensate.

Yes, I will use the same address 0x89…39C to initiate the vote. Thanks.

Your address is whitelisted. Welcome to launch the vote.

The vote is up. Thanks to Shao, LeeKB and the rest of the team for working on this together:

Snapshot vote

Thank you sir, your professionalism is appreciated!

Snapshot block and quorum details (quorum is 10% of total voting power)

Query timestamp:
- Fri, 23 Sep 2022 05:49:11 GMT
- UTC timestamp: 1663912151000
- Mainnet block number: 15594060
- Mainnet timestamp: 1663912151
- Mainnet UTC: Fri, 23 Sep 2022 05:49:11 GMT
- Optimism block number: 24750972
- Optimism timestamp: 1663912161
- Optimism UTC: Fri, 23 Sep 2022 05:49:21 GMT
- Circulating Supply: 84,035,144.928
- Circulating Voting Power: 102,756,249.13```

The current story to be told about PERP is:
There was an opportunity for the team to pay a small cost over time to fix a black mark on their reputation due to a failure of their software design. And instead they blamed their users and avoided voting on the issue to fix it. The team and the product cannot be trusted.

The story could instead turn a negative into a positive:
When PERP had a problem, they fixed it with their users. The team and the product can be trusted.

To me it’s clear what should be done. If PERP is successful then this amount of money at only 17% of income will be a tiny amount. If PERP is not successful, then this cost wouldn’t have mattered anyway. So we’ll see what happens with the v1 situation. I don’t think that stories like this go away easily. Reputation is critical in a product that deals with user funds.

@shao @hanamizuki @LeeKB and all who have voted to support the proposal: Thank you all for the support of the Buyback proposal. Thanks for making suggestions and modifications along the way to make things right for the remaining v1 victims. I appreciate all your hard work. Now I have faith in Perp’s future and its leadership, I wish this platform will return to its former glory and beyond soon!



Hi, we finished the contract and deployed it to Optimism mainnet, please help review it!

There’re 2 contracts deployed to Optimism mainnet:

  1. PerpBuyback contract 0x4Ea48CE3339c9D33743E1ee640F50f44989c19c5
  2. PerpBuybackPool contract 0x23e440a6a792d3161e963b9ff6bdaa005c06ca03

We propose the following process on a monthly basis (it will be a manual process):

  1. Treasury multisig transfer 17.5% of USDC protocol revenue from unclaimed weeks ( usually 4-5 weeks ) to PerpBuyback contract
  2. Another multisig ( let’s call it Treasury Operations, with less signer so it’s easier to operate ) transfer the same notional value of the PERP to PerpBuybackPool contract
  3. call Perpbuyback.swapInPerpBuybackPool to swap USDC to PERP based on Chainlink oracle price. ( This is to mitigate potential sandwiched attacks and reduce the complexity of smart contracts )
  4. Treasury Operations multisig take the USDC in PerpBuybackPool contact and buy PERP on open market.

We suggest executing this manually on the first Wednesday of each month. It may be delayed if not enough multisig signers are available that day (eg. the first claimable date is Jan 22 - a month after the first time Treasury receive protocol revenue, but we may not have enough signers during that time due to Lunar New Year vacation so we’ll postpone to Feb. 1 )

The 19 users can claim their vePERP with the following instructions:

  1. Confirm the address own some vePERP (locked for 26 weeks) . According to the proposal, users need to first lock any non-zero amount of PERP for at least 26 weeks (6 months) to be eligible to claim.
  2. Go to PerpBuyback contract etherscan
    1. click contract tab
    2. click “Write as Proxy” tab
    3. click “Connect to Web3” button
    4. click “claim” toggle
    5. click “write” button - then your claimable PERP will convert to vePERP

We strongly suggest those 19 users help to review the smart contract (GitHub repo). There’re 2 things you may want to check at least:

  1. check whether the initial value of PerpBuyback’s getRemainingBuybackUsdcAmount is correct ( 3587633630000 - divide by USDC’s 6 decimals it’s 3587633.63 ) this will keep decreasing every time it swapped to PERP
  2. the 19 receiver address and shares are correct. You can check by scrolling down to “File 10 of 14 : PerpBuyback.sol” start from line 45, check if the address and shares are correct. shares are in 6 decimals, eg. 215717 = 215717 / 10^6 = 21.5717% )

We propose a 2 week review period starting today. If there’s no other feedback in 2 weeks, this smart contract will be considered the final version and the team will not modify it.

Thanks @abdulla for pointed out an issue, we just fixed it and upgrade the contract.


Thank you Shao and the dev team for all your hard work. We’re glad that the community and the team are finally coming together to make this happen.

We checked the total amount and the shares in your link, they look accurate.

We only have a couple of remaining questions:

  1. In the case where any of the manual transfers are delayed due to signers’ unavailability, would the amount transfer be adjusted accordingly? (For example, Feb 1st’s claim amount would consider the period of Dec 22nd~ Jan 31st.)

  2. We’re not experts in smart contracts, so we are not qualified to check the code thoroughly. In the case where there is any unintended bug(s) discovered, would the team still be able to modify it after the 2 weeks? because we won’t know if it works or not until Feb 1st.

Hi @RDL thanks for checking!

  1. I suggest the DAO treasury adjust the amount if it’s delayed, eg. if DAO treasury multisig finishes the transfer until Feb 8, the amount would consider the period of Dec 22 - Feb 7
  2. Yes, if there is any unintended critical bug, the core team will try our best to fix it ASAP. We’ll keep the contract upgrade permission for at least 2 more weeks after the first distribution
1 Like

Sounds good, thanks! I know it’s only an example, but Feb 8 is too much delay as the first distribution in my opinion considering that January 22nd was the original promised date. Having timeliness for the first distribution is monumental and will add more credibility to the protocol. We agree with the first Wednesday of every month (eg. Feb 1st) being the timing for the distribution; it’s easier to remember.

Thanks Shao, that’s reassuring.

How do I check the remaining balance as we get paid out? At least the total remaining is needed, I can calculate my own based on share %. Will the getRemainingBuybackUsdcAmount from the read proxy changes as we move along?

Yes, we can also use Etherscan to query the value:

  1. Go to PerpBuyback contract etherscan
  2. click “Contract” tab
  3. click “Read as Proxy” tab
  4. click “getRemainingBuybackUsdcAmount”

Then you can see the current value.
It (getRemainingBuybackUsdcAmount) will decrease every time swap to PERP.