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 {
abi,
address,
receipt
} = 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
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
Start a local node and deploy the top-level contracts:
$ yarn start
NOTE: When you run this command it will reset the local blockchain.
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))
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.