Need help with pooltogether-pool-contracts?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

272 Stars 149 Forks GNU General Public License v3.0 880 Commits 6 Opened issues


PoolTogether prize-linked savings game Solidity smart contracts.

Services available


Need anything else?

Contributors list

PoolTogether Brand

PoolTogether Prize Savings Protocol

<PoolTogether> Coverage Status built-with openzeppelin

The PoolTogether Prize Savings Protocol Ethereum smart contracts.

For an overview of the concepts and API please see the documentation


This project is available as an NPM package:

$ yarn add @pooltogether/pooltogether-contracts



There are deployment artifacts available in the

directory. For example, to pull in the PoolWithMultipleWinnersBuilder artifact:
const PoolWithMultipleWinnersBuilder = require('@pooltogether/pooltogether-contracts/deployments/rinkeby/PoolWithMultipleWinnersBuilder.json')
const {
 } = PoolWithMultipleWinnersBuilder


Application Binary Interfaces for all PoolTogether contracts and related contracts are available in the


For example, to pull in the PrizePool ABI:

const PrizePool = require('@pooltogether/pooltogether-contracts/abis/PrizePool.json')


First clone this repository and enter the directory.

Install dependencies:

$ yarn

We use direnv to manage environment variables. You'll likely need to install it.


We use Hardhat and hardhat-deploy

To run unit & integration tests:

$ yarn test

To run coverage:

$ yarn coverage

To run fuzz tests:

$ yarn echidna

Fork Testing

Ensure your environment variables are set up. Make sure your Alchemy URL is set. Now start a local fork:

$ yarn start-fork

Setup account impersonation and transfer eth:

$ ./scripts/


Deploy Locally

Start a local node and deploy the top-level contracts:

$ yarn start

NOTE: When you run this command it will reset the local blockchain.

Connect Locally

Start up a Hardhat Console:

$ hardhat console --network localhost

Now you can load up the deployed contracts using hardhat-deploy:

> await deployments.all()

If you want to send transactions, you can get the signers like so:

> let signers = await ethers.getSigners()

Let's mint some Dai for ourselves:

> let dai = await ethers.getContractAt('ERC20Mintable', (await deployments.get('Dai')).address, signers[0])
> await[0]._address, ethers.utils.parseEther('10000'))
> ethers.utils.formatEther(await dai.balanceOf(signers[0]._address))

Deploy to Live Networks

Copy over .envrc.example to .envrc

$ cp .envrc.example .envrc

Make sure to update the enviroment variables with suitable values.

Now enable the env vars using direnv

$ direnv allow

Now deploy to a network like so:

$ yarn deploy rinkeby

It will update the


We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.