Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Take underflows when full pool debt repaid #551

Merged
merged 14 commits into from
Jan 31, 2023
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 0 additions & 55 deletions .github/workflows/forge-tests.yml

This file was deleted.

17 changes: 9 additions & 8 deletions .github/workflows/size-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ jobs:
submodules: recursive

- name: Cache compiler installations
uses: actions/cache@v2
id: cache-compiler
uses: actions/cache@v3
with:
path: |
~/.solcx
Expand All @@ -32,13 +33,13 @@ jobs:
- name: Set pip cache directory path
id: pip-cache-dir-path
run: |
echo "::set-output name=dir::$(pip cache dir)"
echo "PIP_CACHE_DIR=$(pip cache dir)" >> $GITHUB_ENV
- name: Restore pip cache
uses: actions/cache@v2
uses: actions/cache@v3
id: pip-cache
with:
path: |
${{ steps.pip-cache-dir-path.outputs.dir }}
${PIP_CACHE_DIR}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements-dev.txt') }}
restore-keys: |
${{ runner.os }}-pip-${{ hashFiles('**/requirements-dev.txt') }}
Expand All @@ -47,17 +48,17 @@ jobs:
run: pip install -r requirements-dev.txt

- name: Run check-size script
id: check-size
run: |
mkdir -p size-reports-${{ github.run_id }}
./check-size.sh | tee size-reports-${{github.run_id}}/size-report
echo "##[set-output name=size-report;]$(echo $(cat size-reports-${{github.run_id}}/size-report|tail -1))"
id: check-size
echo "SIZE_REPORT=$(echo $(cat size-reports-${{github.run_id}}/size-report|tail -1))" >> $GITHUB_OUTPUT

- name: Send size report to Discord
uses: appleboy/discord-action@master
with:
webhook_id: ${{ secrets.DISCORD_ID }}
webhook_token: ${{ secrets.DISCORD_TOKEN }}
username: "Contract Size Reporter"
message: Largest contract size for `${{ github.ref }}` ```${{ steps.check-size.outputs.size-report }}```
timeout-minutes: 2
message: Largest contract size for `${{ github.ref }}` ```${{ steps.check-size.outputs.SIZE_REPORT }}```
timeout-minutes: 3
6 changes: 6 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,9 @@ snapshot :; forge clean && forge snapshot

analyze:
slither src/. ; slither src/libraries/external/.


# Deployment
deploy-contracts:
forge script ./deploy.sol \
--rpc-url ${ETH_RPC_URL} --sender ${DEPLOY_ADDRESS} --keystore ${DEPLOY_KEY} --broadcast -vvv
44 changes: 23 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,35 +150,37 @@ Modifications to, or notices of actions by Licensor, contemplated above or under

## Deployment

A deployment script has been created to automate deployment of libraries and factory contracts.
To use it, set up an environment with the following:
- **AJNA_TOKEN** - address of the AJNA token on your target chain
- **ETH_RPC_URL** - node pointing to the target chain
- **DEPLOY_KEY** - path to the JSON keystore file for your deployment account
A deployment script has been created to automate deployment of libraries, factory contracts, and manager contracts.

Ensure your deployment account is funded with some ETH for gas.
To use it, ensure the following env variables are in your `.env` file or exported into your environment.
| Environment Variable | Purpose |
|----------------------|---------|
| `AJNA_TOKEN` | address of the AJNA token on your target chain
| `DEPLOY_ADDRESS` | address from which you wish to deploy
| `DEPLOY_KEY` | path to the JSON keystore file for the deployment address
| `ETHERSCAN_API_KEY` | required to verify contracts
| `ETH_RPC_URL` | node on your target deployment network

Since contract source has not yet been made public, the `--verify` switch has been omitted. To run:

The deployment script takes no arguments, and interactively prompts for your keystore password:
```
./deploy.sh
make deploy-contracts
```

Upon completion, contract addresses will be printed to `stdout`:
```
Deploying to chain with AJNA token address 0xDD576260ed60AaAb798D8ECa9bdBf33D70E077F4
Enter keystore password:
Deploying libraries...
Deployed Auctions to 0xDD576260ed60AaAb798D8ECa9bdBf33D70E077F4
Deployed LenderActions to 0x4c08A2ec1f5C067DC53A5fCc36C649501F403b93
Deployed PoolCommons to 0x8BBCA51044d00dbf16aaB8Fd6cbC5B45503B898b
Deploying factories...
Deployed ERC20PoolFactory to 0xED625fbf62695A13d2cADEdd954b23cc97249988
Deployed ERC721PoolFactory to 0x775D30918A42160bC7aE56BA1660E32ff50CF6dC
Deploying PoolInfoUtils...
Deployed PoolInfoUtils to 0xd8A51cE16c7665111401C0Ba2ABEcE03B847b4e6
== Logs ==
Deploying to chain with AJNA token address 0x34A1D3fff3958843C43aD80F30b94c510645C...
=== Deployment addresses ===
ERC20 factory 0x50EEf481cae4250d252Ae577A09bF514f224C...
ERC721 factory 0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD...
PoolInfoUtils 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70...
PositionManager 0xD718d5A27a29FF1cD22403426084bA0d47986...
RewardsManager 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0...

```

Record the factory addresses.
Record these addresses.

### Validation

Expand All @@ -203,4 +205,4 @@ cast send ${DAI_TOKEN} "approve(address,uint256)" ${WBTC_DAI_POOL} 50000ether \
--from ${DEPLOY_ADDRESS} --keystore ${DEPLOY_KEY}
cast send ${WBTC_DAI_POOL} "addQuoteToken(uint256,uint256)" 100ether 3232 \
--from ${DEPLOY_ADDRESS} --keystore ${DEPLOY_KEY}
```
```
63 changes: 0 additions & 63 deletions deploy.sh

This file was deleted.

36 changes: 36 additions & 0 deletions deploy.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.14;

import { Script } from "forge-std/Script.sol";
import "forge-std/console.sol";

import { ERC20PoolFactory } from 'src/ERC20PoolFactory.sol';
import { ERC721PoolFactory } from 'src/ERC721PoolFactory.sol';
import { PoolInfoUtils } from 'src/PoolInfoUtils.sol';
import { PositionManager } from 'src/PositionManager.sol';
import { RewardsManager } from 'src/RewardsManager.sol';

contract Deploy is Script {
address ajna;

function run() public {
ajna = vm.envAddress("AJNA_TOKEN");
console.log("Deploying to chain with AJNA token address %s", ajna);

vm.startBroadcast();
ERC20PoolFactory erc20factory = new ERC20PoolFactory(ajna);
ERC721PoolFactory erc721factory = new ERC721PoolFactory(ajna);
PoolInfoUtils poolInfoUtils = new PoolInfoUtils();

PositionManager positionManager = new PositionManager(erc20factory, erc721factory);
RewardsManager rewardsManager = new RewardsManager(ajna, positionManager);
vm.stopBroadcast();

console.log("=== Deployment addresses ===");
console.log("ERC20 factory %s", address(erc20factory));
console.log("ERC721 factory %s", address(erc721factory));
console.log("PoolInfoUtils %s", address(poolInfoUtils));
console.log("PositionManager %s", address(positionManager));
console.log("RewardsManager %s", address(rewardsManager));
}
}
1 change: 1 addition & 0 deletions docs/drawio/addCollateral.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2023-01-09T11:19:32.456Z" agent="5.0 (X11)" etag="q2IyEHYS9TFNI9EXhJNj" version="20.8.3" type="device"><diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">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</diagram></mxfile>
1 change: 1 addition & 0 deletions docs/drawio/addQuoteToken.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2023-01-09T09:53:51.091Z" agent="5.0 (X11)" etag="rkt2kI6TrAvtUDihvzXv" version="20.8.3" type="device"><diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">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</diagram></mxfile>
Loading