@pooltogether/pooltogether-contracts

    3.4.5 • Public • Published

    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

    Setup

    This project is available as an NPM package:

    $ yarn add @pooltogether/pooltogether-contracts

    Usage

    Artifacts

    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

    ABIs

    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')

    Development

    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.

    Testing

    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

    Deployment

    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.

    Keywords

    none

    Install

    npm i @pooltogether/pooltogether-contracts

    DownloadsWeekly Downloads

    55

    Version

    3.4.5

    License

    GPL-3.0

    Unpacked Size

    59.4 MB

    Total Files

    727

    Last publish

    Collaborators

    • asselstine
    • chuckbergeron
    • dylandesrosier
    • aodhgan
    • pierrick
    • kamesdev