# @jbx-protocol/juice-contracts-v3

> Protocol overview, architecture, and API documentation: https://info.juicebox.money/dev/ ## Develop

Latest version **5.0.1** (published 2024-02-19) · MIT license · 0 weekly downloads

## Install

```sh
npm install @jbx-protocol/juice-contracts-v3
pnpm add @jbx-protocol/juice-contracts-v3
yarn add @jbx-protocol/juice-contracts-v3
bun add @jbx-protocol/juice-contracts-v3
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; large bundle.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 5.0.1 |
| Published | 2024-02-19 |
| First published | 2022-09-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 35 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 16 |
| Maintainers | me.jango, odd-amphora |

## Links

- npm: https://www.npmjs.com/package/@jbx-protocol/juice-contracts-v3
- Repository: https://github.com/jbx-protocol/juice-contracts-v3
- Homepage: https://github.com/jbx-protocol/juice-contracts-v3#readme
- Issues: https://github.com/jbx-protocol/juice-contracts-v3/issues
- npm.io page: https://npm.io/package/@jbx-protocol/juice-contracts-v3

## Dependencies (3)

- [@chainlink/contracts](https://npm.io/package/@chainlink/contracts.md) ^0.1.6
- [@paulrberg/contracts](https://npm.io/package/@paulrberg/contracts.md) ^3.4.0
- [@openzeppelin/contracts](https://npm.io/package/@openzeppelin/contracts.md) ^4.5.0-rc.0

## Recent versions

- 5.0.1 (latest) — 2024-02-19
- 5.0.0 — 2023-08-11
- 4.0.2 — 2023-07-10
- 4.0.1 — 2023-07-03
- 4.0.0 — 2023-07-02
- 3.1.2 — 2023-04-02
- 3.1.1 — 2023-03-10
- 3.1.0 — 2023-02-22
- 2.0.5 — 2023-02-07
- 2.0.4 — 2023-02-06
- 2.0.3 — 2022-12-28
- 2.0.2 — 2022-10-04
- 2.0.1 — 2022-10-04
- 2.0.0 — 2022-09-20
- 1.0.1 — 2022-09-13
- … 1 more at https://npm.io/package/@jbx-protocol/juice-contracts-v3/versions

## README

# juice-contracts-v3

Protocol overview, architecture, and API documentation: https://info.juicebox.money/dev/
## Develop

### Unit Tests

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

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

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

```bash
yarn chain --network hardhat
```

then run the following:

```bash
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](https://github.com/gakonst/foundry).

```bash
curl -L https://foundry.paradigm.xyz | sh
```

2. Install external lib(s)

```bash
git submodule update --init --recursive
```

3. Run tests:

```bash
forge test
```

4. Update Foundry periodically:

```bash
foundryup
```

Resources:

- [The Forge-Book](https://onbjerg.github.io/foundry-book/forge)

### Coverage

To check current unit tests coverage:

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

A few notes:

- Hardhat doesn't support [esm](https://nodejs.org/api/esm.html) yet, hence running manually with node.
- We are currently using a forked version of [solidity-coverage](https://www.npmjs.com/package/solidity-coverage) that includes optimizer settings. Ideally we will move to the maintained version after this is fixed on their end.
- Juicebox V3 codebase being quite large, Solidity Coverage might run out of memory if you modify/add parts to it. Please check [Solidity-coverage FAQ](https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md) in order to address the issue.

## Deploy

Juicebox uses the [Hardhat Deploy](https://github.com/wighawag/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](https://github.com/itinance/mnemonics). Generate a mnemonic at your own risk.

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

```bash
npx hardhat deploy --network $network
```

\_You'll likely want to set the optimizer runs to 10000 in `./hardhat.config.js` before deploying to prevent contract size errors. The preset value of 1000000 is necessary for hardhat to run unit tests successfully. Bug about this opened [here](https://github.com/NomicFoundation/hardhat/issues/2657#issuecomment-1113890401).

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

## Verification

To verify the contracts on [Etherscan](https://etherscan.io), make sure you have an `ETHERSCAN_API_KEY` set in your `./.env` file. Then run the following:

```bash
npx hardhat --network $network etherscan-verify
```

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

---
_Source: https://npm.io/package/@jbx-protocol/juice-contracts-v3 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
