Skip to content

Commit

Permalink
CI checks (#50)
Browse files Browse the repository at this point in the history
* chore: ci

* fmt: run forge fmt

* chore: link validation in ci

* chore: spell check

* chore: ci for tests and solhint

* fix: solhint ci

* fix: forge test ci

* chore: slither ci and triage

* feat: foundry-storage-check

* fix: remove tests from ci

* chore: add husky hooks

* Update README.md

---------

Co-authored-by: Alex Narvaez-Duckworth <58088634+anduckworth@users.noreply.github.com>
  • Loading branch information
HrikB and anduckworth committed Feb 19, 2024
1 parent c9d4e67 commit a4338e6
Show file tree
Hide file tree
Showing 25 changed files with 285 additions and 115 deletions.
165 changes: 165 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
on: [pull_request, workflow_dispatch]

concurrency:
group: ${{github.workflow}}-${{github.ref}}
cancel-in-progress: true

jobs:
prettify:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
node_version:
- 20

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node_version }}

- name: Run Prettier
run: npx prettier -c '**/*.{md,yml,yaml}'

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Check Solidity formatting with forge fmt
run: |
forge fmt --check
# Optional: Revert changes made by forge fmt to leave the working directory clean
- name: Revert formatting changes
if: failure()
run: git reset --hard $BEFORE_FMT

codespell:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Run codespell
uses: codespell-project/actions-codespell@v2.0
with:
check_filenames: true
ignore_words_list: we
skip: ./.git,./lib,./certora

validate-links:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
ruby_version:
- 3.3

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true

- name: Install awesome_bot
run: gem install awesome_bot

- name: Validate URLs
run: awesome_bot ./*.md src/**/*.sol --allow-dupe --allow-redirect --request-delay 0.4 --white-list mainnet.infura.io/v3,localhost

solhint:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
node_version:
- 20

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Run solhint
run: |
yarn install
yarn solhint
slither:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
node_version:
- 20

steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: "recursive"

- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: "3.10"

- name: Install dependencies
run: |
wget https://github.com/ethereum/solidity/releases/download/v0.8.7/solc-static-linux
chmod +x solc-static-linux
sudo mv solc-static-linux /usr/local/bin/solc
pip3 install slither-analyzer
pip3 inspect
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Run Slither
run: |
slither src
storage-check:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
node_version:
- 20

steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: "recursive"

- name: Install Foundry
uses: onbjerg/foundry-toolchain@v1
with:
version: nightly

- name: Check storage layout
uses: Rubilmax/foundry-storage-check@v3.7
with:
contract: src/IonPool.sol:IonPool
address: "0x00000000005a1de4c0eb34609e211ad8831707e0" # the address at which the contract check is deployed
34 changes: 0 additions & 34 deletions .github/workflows/test.yml

This file was deleted.

1 change: 1 addition & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
forge fmt --check
1 change: 1 addition & 0 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
forge test --ffi
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lib/
100 changes: 56 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,96 +1,108 @@
```
,-. .---. .-. .-. ,---. ,---. .---. _______ .---. ,--, .---. ,-.
|(|/ .-. ) | \| | | .-.\ | .-.\ / .-. )|__ __|/ .-. ) .' .') / .-. ) | |
(_)| | |(_)| | | | |-' )| `-'/ | | |(_) )| | | | |(_)| |(_)| | |(_)| |
| || | | | | |\ | | |--' | ( | | | | (_) | | | | | \ \ | | | | | |
| |\ `-' / | | |)| | | | |\ \ \ `-' / | | \ `-' / \ `-.\ `-' / | `--.
`-' )---' /( (_) /( |_| \)\ )---' `-' )---' \____\)---' |( __.'
(_) (__) (__) (__)(_) (_) (_) (_)
,-. .---. .-. .-. ,---. ,---. .---. _______ .---. ,--, .---. ,-.
|(|/ .-. ) | \| | | .-.\ | .-.\ / .-. )|__ __|/ .-. ) .' .') / .-. ) | |
(_)| | |(_)| | | | |-' )| `-'/ | | |(_) )| | | | |(_)| |(_)| | |(_)| |
| || | | | | |\ | | |--' | ( | | | | (_) | | | | | \ \ | | | | | |
| |\ `-' / | | |)| | | | |\ \ \ `-' / | | \ `-' / \ `-.\ `-' / | `--.
`-' )---' /( (_) /( |_| \)\ )---' `-' )---' \____\)---' |( __.'
(_) (__) (__) (__)(_) (_) (_) (_)
```

# Ion Protocol
Ion Protocol is a decentralized money market purpose-built for all types of staked and restaked assets. Ion protocol unlocks capital efficiency for yield-bearing staking collaterals using reactive interest rates, collateral-specific utilization, and price-agnostic liquidations. Borrowers can collateralize their yield-bearing staking assets to borrow WETH, and lenders can gain exposure to the boosted staking yield generated by borrower collateral.

## Documentation
Ion Protocol is a decentralized money market purpose-built for all types of staked and restaked assets. Ion protocol unlocks capital efficiency for yield-bearing staking collaterals using reactive interest rates, collateral-specific utilization, and price-agnostic liquidations. Borrowers can collateralize their yield-bearing staking assets to borrow WETH, and lenders can gain exposure to the boosted staking yield generated by borrower collateral.

## Documentation

To learn more about Ion Protocol without code, please visit:

- [Our website](https://ionprotocol.io)
- [User Docs](https://docs.ionprotocol.io)

To learn more about the protocol's technical details, please visit:

- [Audit Docs for Security Researchers](https://ionprotocol.notion.site/Ion-Protocol-Audit-Docs-c871ff178bf54447bd28018cd5a88f75?pvs=74)

## Audits
## Audits

> Please report any white hat findings for potential vulnerabilities to security@molecularlabs.io
- OpenZeppelin Audit December 2023
- [Open Zepplin Audit Report](https://blog.openzeppelin.com/ion-protocol-audit)
- [Hats Finance January 2024](https://app.hats.finance/audit-competitions)
- Regular Audit and Formal Verification Competition with Certora
- [Competition Completed]
- [Open Zepplin Audit Report](https://blog.openzeppelin.com/ion-protocol-audit)
- [Hats Finance January 2024](https://app.hats.finance/audit-competitions)
- Regular Audit and Formal Verification Competition with Certora
- [Competition Completed]

## Community

To engage in conversations around Ion Protocol and the staking/restaking ecosystem, please join the [Discord](https://t.co/6np4WvIx70) channel or follow [@ionprotocol](https://twitter.com/ionprotocol) on X.
To engage in conversations around Ion Protocol and the staking/restaking ecosystem, please join the [Discord](https://t.co/6np4WvIx70) channel or follow [@ionprotocol](https://twitter.com/ionprotocol) on X.

## Usage

### Installing Dependencies
### Installing Dependencies

Install Bun

Install Bun
```shell
curl -fsSL https://bun.sh/install | bash
curl -fsSL https://bun.sh/install | bash
```

Run Bun install for javascript dependencies

```shell
bun install
```

Install jq
Install jq

```shell
brew install jq
brew install jq
```

### Environmental Variables
### Environmental Variables

Copy .env.example to .env and add environmental variables.
Copy .env.example to .env and add environmental variables.

```bash
MAINNET_RPC_URL=https://mainnet.infura.io/v3/
MAINNET_ARCHIVE_RPC_URL= # Archive node used for creating fork environments
MAINNET_ARCHIVE_RPC_URL= # Archive node used for creating fork environments
MAINNET_ETHERSCAN_URL=https://api.etherscan.io/api
ETHERSCAN_API_KEY=
RPC_URL= # RPC of the desired testnet used in deployment scripts
```

### Test

1. The test suite includes fork tests that require foundry ffi.
2. Add RPC_URLs to the .env and run forge test with the --ffi flag.
1. The test suite includes fork tests that require foundry ffi.
2. Add RPC_URLs to the .env and run forge test with the --ffi flag.

```shell
forge test --ffi
forge test --ffi
```

### Testnet Setup
1. Set up anvil as a mainnet fork.
- For the contracts using mainnet contract addresses as constants to work properly, the testnet needs to be a fork of a mainnet environment.
```bash
anvil --fork-url $MAINNET_ARCHIVE_RPC_URL --chain-id 31337
```

1. Set up anvil as a mainnet fork.
- For the contracts using mainnet contract addresses as constants to work properly, the testnet needs to be a fork of a mainnet environment.
```bash
anvil --fork-url $MAINNET_ARCHIVE_RPC_URL --chain-id 31337
```
2. Set anvil as the target RPC for the deployment script in `.env`
```bash
# ...other environmental variables
RPC_URL=http://localhost:8545
```
3. Run the testnet deployment script
```bash
bash node.sh
```
4. Run the foundry script to verify that the contracts are working properly.
```bash
forge script script/__TestFlashLeverage.s.sol --rpc-url $RPC_URL
```

```bash
# ...other environmental variables
RPC_URL=http://localhost:8545

```

3. Run the testnet deployment script
```bash
bash node.sh
```
4. Run the foundry script to verify that the contracts are working properly.
```bash
forge script script/__TestFlashLeverage.s.sol --rpc-url $RPC_URL
```

### Format

Expand Down
Binary file modified bun.lockb
Binary file not shown.
Loading

0 comments on commit a4338e6

Please sign in to comment.