SpankBank Upgrade Proposal

Introduction

The SpankBank, launched in 2018, has been operating as intended and delivering community rewards to SPANK stakers for several years. However, recent sustained spikes in Ethereum gas fees have rendered it unsustainable in its current form. It doesn’t make sense for every staker to pay $5-10 in fees for each check-in, BOOTY claim, and BOOTY redemption. While we previously announced our plans to migrate the SpankBank to xDAI, that may not be optimal due to cross-chain transfer fees. We now propose to a hybrid migration which maintains most of the core functionality of the SpankBank system, but attempts to minimize fees incurred.

Upgrade Summary

  • Keep the SpankBank contract on Ethereum mainnet as is
  • Retire the BOOTY token & burning mechanism
  • We still offer $1 buybacks for all existing BOOTY
  • Instead of buying & burning BOOTY, we do quarterly (3mo) DAI airdrops, like how we did UNI
  • DAI airdropped is still based on our earnings across all products, just like it is now
  • Airdrops require the user to claim, but since it’s every 3 months it’s fewer transaction total
  • Unclaimed airdrop earnings will be rolled into the next airdrop
  • First airdrop would be April 1st
  • Future airdrops on each 1st month of the quarter (July 1st, Oct 1st, Jan 1st…)
  • Note - this means no BOOTY burn for January!
  • Airdrops would enforce a minimum claim amount, similar to how we did for UNI
  • e.g. all staker claims below $20 will be re-distributed to the other stakers
  • Airdrop earnings are calculated based on your 3mo average SpankPoints in the SpankBank
  • So if you have 100 SPANK staked for 12 months, then 11 months, then 10 months
  • 100 * (12mo = 100%) + 100 * (11mo = 95%) + 100 * (10mo = 90%) = 9,500 SpankPoints
  • Compare with a 3-month staker:
  • 100 * (3mo = 55%) + 100 * (2mo = 50%) + 100 * (1mo = 45%) = 5,000 SpankPoints
  • results → 12-month stakers get ~2x the airdrop rewards than 3-month stakers
  • note - this is basically the same as it exists today
  • We still want to encourage longer staking lockups and stay true to the original mechanism
  • In a sense, we’re incentivizing self-vesting of SPANK tokens with additional
  • To get the absolute maximum rewards, you would still need to stake for 12 months and then check-in again and extend your stake by 1 month every month, which makes economic sense only if your increase in rewards (+5%) are worth the 2x check-in fees
  • Spank will also provide more detailed financial reporting on a quarterly basis

Community Q&A [Comment your ? and I’ll turn it into a bullet!]

  • What about divided stakes? Stakers may need to claim locked up stakes and merge them on a new account? I said this in regards to minimum 20 usd payment without doing any calculations btw
  • Solution: set the BootyBase of each stake to the same address, we'll combine rewards
  • The SpankBank currently tracks 3 addresses for each user:
  • Staker address -> used for stake, withdrawStake, splitStake
  • Delegate address -> used to check-in, claim BOOTY
  • BootyBase address -> destination for BOOTY claimed
  • By default the delegate/bootybase are the same address as the staker address, which is whatever address you stake from.
  • it would also be nice to not have to remember to extend by one month every month (to maximize earnings)
  • potential solution - Instead of 3-month average spankpoints, just use the highest spankpoints from the 3 month period → this allows the user to only need to check-in once every 3 months to maximize earnings
  • [Alternative points calculation] Having people lock for up to 12 months seems useful. If you lock for 12 month then you could get rewarded for a month 12 lock rate even if you only have 2 left for example. Then you only extend at end of the year and make 4 quarterly DAI claims. So 5 txs total for the whole year in that case and you get max bonus.
  • Ameen’s Note - I actually like this setup a lot, it hedges against gas prices going crazy this year, and it's fair by virtue of being transparent for all stakers.
  • What about the following setup?
  • You could select 1 to 12 month lock up. This would affect your points. And then your booty or Dai accumulates and you can claim it whenever you want. 
  • You could claim it 12 times a year. Or once. Up to the staker. 
  • Then at expiry you choose to withdrawal, or restake from 1 to 12 months. 
  • tl;dr, this doesn’t really work
  • the key issue is aggregating your balance every month, so if you earn 10 dai in month 1, then 20 dai in month 2, the system has to update your balance to 30, which means we would have to loop over every staker and update their balance for them
  • we could push the cost on to the user, so the user would "claim" once a month (which would update their balance), but then "withdraw" only at the end - but that's sort of an extra "claim" tx for no reason - so it's better to simply allow the user to withdraw
  • ^ this is basically how we did the UNI distribution
  • we publish a merkle tree hash of balances and let users push the button to withdraw, and we do this on a 3 month basis instead of on a 1 month basis to save tx fees
  • doing a straightforward airdrop where we push the tokens to everyone is also possible, but we want to avoid paying dead wallets, so having a 3 month window where users have to claim their dai or have the admin roll it over into the next distro contract solves the liveness issue
  • would depositing to spankpay work any better for those of us who want it?