PoolManager Prize Linked Savings Account Pool Smart Contracts

Downloads in past


3.4.52 years ago3 years agoMinified + gzip package size for @pooltogether/pooltogether-contracts in KB


<img src="https://github.com/pooltogether/pooltogether--brand-assets/blob/977e03604c49c63314450b5d432fe57d34747c66/logo/pooltogether-logo--purple-gradient.png?raw=true" alt="PoolTogether Brand" style="max-width:100%;" width="200">

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 deployments/ 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 abis/ directory.
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/setup.sh

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 dai.mint(signers[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 deployments/ dir.