Game Mechanics v1 (technical)
Getting into the detailed operation of our v1 savings pools
By making all your deposits, you earn a slice of the pool’s rewards! Players that miss a deposit still get their initial deposit back but do not earn any rewards. So the more people drop out, the greater the returns for the winners! 👻 💸
Each game consists of multiple rounds, each with a fixed time duration (e.g. one week). Players can join an existing game with other players that share the same goals by entering the same ‘savings pool’. To win, players need to make a deposit into the saving pool every round, prior to the round’s deadline. At the end of the game, all players get back their initial deposit, irrespective whether they win or not. Players that make all deposits (= winners), earn a slice of the pool’s rewards. This includes any interest generated through decentralized finance platforms as well as additional sponsorship and incentives. This means that all winners earn more than when they would save by themselves.
There is no fee charged to withdraw your initially deposited funds after the end of the game. Alternatively, to withdraw your funds prior to the end of the game there is an early withdrawal fee charged. Learn more about fees here.
All deposits are automatically transferred to existing decentralized protocols (such as Aave or Moola) to generate rewards for the pool. After the final round, the earned rewards are split among all winning players. Players that happen to miss a deposit can still claim back their initial deposit after the end of the game. In this sense, one can consider it a friendly savings game powered by blockchain technology. Our smart contracts can be found here: https://github.com/Good-Ghosting/goodghosting-smart-contracts/
Detailed User Flow 🏄♂️
- 1.A saving pool smart contract is deployed by the GoodGhosting team on the Polygon blockchain. Each saving pool runs for a fixed amount of time, and accepts fixed periodic contributions (i.e. weekly or monthly, as determined at the time of pool creation) in one specific digital tokens (e.g. DAI). Pools create a social, gamified and incentivised environment to save.
- 2.Players join and therefore agree to attempt to save at the cadence and frequency the game mandates. For example: deposit 50 DAI each week, during one month. When the player joins the game, the funds are automatically deposited into an existing decentralized protocol (as Aave). This happens by calling the
joinGame()function on our smart contract.
- 3.Ideally, players are able to make their regular contributions prior to each round’s deadline, via
makeDeposit()on our smart contract. When the player makes the regular contribution, the funds are again automatically deposited into an existing decentralized protocol (as Aave). When funds are deposited into Aave, the protocol converts the player's contributions into digital tokens used by the underlying DeFi protocol (i.e. interest-bearing aDAI or mcUSD). This enables additional rewards to be generated compared to the original principal contributed (due to the accumulation of lending interest from the Aave lending market).
- 5.At the conclusion of the game (i.e. after the final round), our smart contract will use the same DeFi protocol to redeem the underlying tokens back into the contribution tokens, plus rewards generated. This happens via the
redeemFromExternalPool()function on our smart contract.Whenever there are additional rewards generated (e.g. WMATIC rewards due to liquidity mining on the Aave Polygon market), they will be claimed by the GoodGhosting smart contract and automatically distributed to all winning players. Thereby increasing rewards for all winning players.
Our smart contract contains three administrative functions (
adminFeeWithdraw()) that are accessible only to the admin (owner) of the contract (the GoodGhosting wallet that deployed the game to the blockchain). There's no intention of using these functions during the game, but they are coded into the smart contract for precaution - to be used as a safeguard in case something goes wrong (bugs, exploits, attacks, etc.).
Find below more information about each of these administrative functions and how they impact and limit the game. For full transparency, you'll also find the name of the functions in our smart contract:
pause()- this function allows the admin to pause the game (smart contract) for security reasons.
- These are all the functions that are unavailable to users when the game is paused:
- join the game (function
- make regular deposits (function
- make early withdraw (function
- The only functions that users can execute when the game is paused are
redeemFromExternalPoolafter the end of the game, to make sure players can get at least their principal back.
unpause()- this function allows the admin to resume the game (unpause the smart contract).
adminFeeWithdraw()- reserved for future usage. It allows the admin to withdraw the performance fee charged in the game (if any).