/juice-contracts-v2

⚙️ Juicebox core V2 contracts.

Primary LanguageJavaScript

juice-contracts-v2

Develop

Unit Tests

To run the unit tests suite (in Javascript), you'll need to manually run Hardhat in order to enable ESM support:

node --require esm ./node_modules/.bin/hardhat test --network hardhat

Alternatively, you can run a local Hardhat node in another terminal using

yarn chain --network hardhat

then run the following:

yarn test

It might happens that Hardhat cannot resolve custom error (test failing on "Expecter nameOfTheError() but reverted without a reason string"), just restart yarn chain.

System Tests

End-to-end tests have been written in Solidity, using Foundry.

To get set up:

  1. Install Foundry.
curl -L https://foundry.paradigm.xyz | sh
  1. Install external lib(s)
git submodule update --init
  1. Run tests:
forge test
  1. Update Foundry periodically:
foundryup

Resources:

Coverage

To check current unit tests coverage:

node --require esm ./node_modules/.bin/hardhat coverage --network hardhat

A few notes:

  • Hardhat doesn't support esm yet, hence running manually with node.
  • We are currently using a forked version of solidity-coverage that includes optimizer settings. Ideally we will move to the maintained version after this is fixed on their end.
  • Juicebox V2 codebase being quite large, Solidity Coverage might run out of memory if you modify/add parts to it. Please check Solidity-coverage FAQ in order to address the issue.

Deploy

Juicebox uses the Hardhat Deploy plugin to deploy contracts to a given network. But before using it, you must create a ./mnemonic.txt file containing the mnemonic phrase of the wallet used to deploy. You can generate a new mnemonic using this tool. Generate a mnemonic at your own risk.

Then, to execute the ./deploy/deploy.js script, run the following:

npx hardhat deploy --network $network

Contract artifacts will be outputted to ./deployments/$network/** and should be checked in to the repo.

Verification

To verify the contracts on Etherscan, make sure you have an ETHERSCAN_API_KEY set in your ./.env file. Then run the following:

npx hardhat --network $network etherscan-verify

This will verify all of the deployed contracts in ./deployments.