Introducing PoolTogether

PoolTogether is a protocol for prize savings; we gamify yield by rewarding it randomly as prizes. My name is Brendan, and I’m one of the co-founders of the protocol.

My goal is to illustrate how the protocol can be used for Token Programme Proposals. I’m going to detail the user experience and the token mechanics so that the reader has context, then I’ll describe ways that the protocol can be used for TPP.

User Experience

From an end user perspective, the PoolTogether experience looks like so:

  1. A user sees the prizes and wants to participate in PoolTogether
  2. They deposit tokens into a PoolTogether Prize Vault.
  3. There are daily prize drawings, so the user checks back every day to see if they’ve won. Prizes are automatically transferred to them, so they don’t need to actually do anything.
  4. When they’ve had their fill, they can withdraw all of their funds.

Users need only deposit and withdraw; everything else is automated. The core protocol is designed to be no-loss and fully liquid, so that they can withdraw their full deposit at any time.

Mechanism

Each chain has a single autonomous Prize Pool contract that is configured to use a specific prize token (such as WETH) and an RNG contract (such as Witnet). Any number of vaults, or vault-like contracts, can contribute to the Prize Pool for a chance to win.

The typical token flow is:

  1. User deposits USDC, for example, into a vault. This particular vault might deposit that into a yield-bearing protocol.
  2. As yield accrues it is sent to the Prize Pool contract. Generally prizes are denominated in WETH, so the yield is liquidated for WETH.
  3. Each day the Prize Pool auctions the RNG submission (the “draw”). Anyone can trigger the submission, and they receive a small portion of the prize pool to do so.
  4. After the RNG is done, prize claimer bots begin computing the winners and submitting prize claims on their behalf. Prizes are transferred directly to the winners. The bot claim fees are paid out from the prize itself. Costs are lower than the gas costs to individually claim because claims are batched!
  5. The user may withdraw their USDC at any time from the vault.

Dependencies

The protocol only has two dependencies:

  1. Random Number Generation service such as Witnet (which is our default)
  2. No-loss yield sources such as Aave or Morpho, or incentives to use as synthetic yield.

The protocol does not have any owners or admins; it is fully autonomous and permissionless. Each chain’s prize pool supports an infinite number of vaults; anyone can create new vaults or vault-like contracts that participate in the same prize pool.

Rewards

In addition to the core prize mechanic, we offer two permissionless incentives mechanisms that anyone can use to distribute tokens:

  • Twab Rewards that target individual vaults
  • Prize Pool Twab Rewards that target all vaults that contribute to a prize pool

Twab Rewards

The Twab Rewards contract allows anyone to distribute tokens retroactively or in a scheduled way to any specific vault. Using it retroactively is like airdrops, and scheduling in the future is like liquidity mining. The contract distributes tokens to users of a vault according to the balances they held.

Prize Pool Twab Rewards

An extension of the Twab Rewards, this allows anyone to distribute a token to all vaults that contribute to a prize pool. The distribution is similar to the Twab Rewards, but portions the rewards across vaults based on each vault’s prize contributions. If one vault contributes twice as much as another, then the users will receive twice as much.

We’re going to use this mechanism to distribute POOL to all vaults on a chain. The POOL will balance across vaults such that the top performers will receive the most POOL, and it means that anyone can create a vault and be eligible to receive POOL incentives. No governance proposal required.

Using PT for TPP

It’s probably best to illustrate the utility of PT with a few examples of what is possible out-of-the-box. Let’s assume PoolTogether has been deployed to zkSync with WETH as the prize token.

Staking Vaults for Memecoins

Memecoins is a loaded term, but imagine:

  1. Governance mints a “zkPrize” token and distributes it to contributors
  2. Governance sets up a simple PoolTogether Staking Vault for the zkPrize token, then uses our VaultBoosters to provide “synthetic yield” using ZK.
  3. Anyone who stakes their zkPrize tokens will have a chance to win WETH.

Distributing ZK Rewards

This one is probably the simplest, and most directly supported by us. Governance could use the Prize Pool Twab Rewards contract to permissionlessly distribute ZK across all vaults; the incentives would naturally flow to vaults that perform the best. New vaults can be created by anyone and start receiving rewards.

There are plenty of other variations once you get into custom code; especially with prize hooks.

At the end of the day, it would be great to see a PoolTogether deployment on zkSync. Incentives make bootstrapping much easier!