Skip to content

designDoc

zingleton edited this page Apr 29, 2021 · 3 revisions

LaunchPool design doc

This document explains the details related to LaunchPools. Feel free to contribute.

Problem

Access: Deals are negotiated with a small set of trusted parties. Launchpools allow us to run an open process that provides time to build trust.

Speed and cost: Launchpools allow fundraisers to validate investor interest early, before spending money on compliance structures.

Glossary

Stake: an amount of certain token that will be used to finance a pool.
Pool: synonim to launchpool. Keeps tracks of all stakes, commitments and times.
Investor: entity whose money will be staked and committed to a pool.
Sponsor: entity that is looking to raise funding.
Offer: terms and conditions of a funding.

Out of scope

  • Non stable coins. (We only allow stablecoins and interest-earning dollar coins for now).
  • Giving rewards out to investors.

Solution

Initially, a launchpool is created by a beneficiary. It specifies a min and max commitment amount, a set of allowed tokens, an expiration time and a number of days offer are available for. With the pool created, and before the expiration time is reached, investors are allowed to stake their coins (transfer to the LaunchPool contract from their balance). The order in which stakes are received is important, as it will determine eventual participation and rewards.

An offer is made to a pool by a sponsor, and it contains the terms and conditions for investors' participation on funding. Pools have only one active offer at any point in time. Investors are then given the opportunity to commit their stakes to the offer based in the order in which they were added. If the offer doesn't have the minimum commitment after some time, it uncommits all amounts. For hot deals, not everyone who staked will have the chance to participate.

After the commited amount has reached minCommitment, all the committed funds are available to be transfered to the beneficiary. Once these transfer happens, all unused stakes are returned, and the LaunchPool closes. If no proposal ever obtains the minCommitment, all stakes are returned and the LaunchPool is closed as well.

We need to be able to provide yield on stakes. That is important. An easy way to do this is to allow staking of coins like aUSDC which earn interest, and return a dollar value. We will have a way to update our stake value with a new value.

Administrator role

The system administrator and contract administrator have limited permissions that will make the system safer and more reliable:

  • They can close a launchpool and return all stakes
  • They can mark a launchpool as hidden
  • They can trigger actions like updating values

Sponsor role

Investor role

An investor can add stakes, remove his own stakes, or commit his own stakes

Security Considerations

  1. Contract might be buggy and trap peoples moneys.
  2. Contract admin misplaces their private key
  3. Contract admin has their private key stoken
  4. Ethereum gets hacked.
  5. User's metamaks or wallet gets hacked.
  6. Our backend server gets hacked.