Skip to content

Commit

Permalink
Merge pull request #53 from morpho-labs/test/hardhat
Browse files Browse the repository at this point in the history
Update hardhat tests
  • Loading branch information
Rubilmax committed Sep 13, 2023
2 parents d02a4d2 + 635d423 commit 28e0347
Show file tree
Hide file tree
Showing 23 changed files with 97 additions and 206 deletions.
38 changes: 38 additions & 0 deletions .github/workflows/hardhat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Hardhat

on:
push:
branches:
- main
pull_request:

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

jobs:
build-contracts:
name: Compilation
runs-on: ubuntu-latest

steps:
- name: Generate a token
id: generate-token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}

- name: Checkout
uses: actions/checkout@v3
with:
token: ${{ steps.generate-token.outputs.token }}
submodules: recursive

- uses: ./.github/actions/install

- name: Build contracts
run: yarn build:hardhat --force # don't use compilation cache

- name: Run hardhat tests
run: yarn test:hardhat
2 changes: 1 addition & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
names = true
sizes = true
via-ir = false
src = "contracts"
test = "test/forge"
evm_version = "paris"
fs_permissions = [
{ access = "read", path = "./config/"},
Expand Down
1 change: 1 addition & 0 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const config: HardhatUserConfig = {
chainId: 1,
gasPrice: 0,
initialBaseFeePerGas: 0,
allowBlocksWithSameTimestamp: true,
accounts: {
count: 153, // must be odd
},
Expand Down
5 changes: 2 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,17 @@
"scripts": {
"prepare": "husky install",
"postinstall": "forge install",
"build:ts": "tsc --build ./tsconfig.build.json",
"build:forge": "FOUNDRY_PROFILE=build forge build",
"build:hardhat": "npx hardhat compile",
"build:blue": "cd lib/morpho-blue/ && yarn build:forge && cd ../..",
"typecheck": "tsc --noEmit",
"test:forge": "yarn build:blue && FOUNDRY_PROFILE=test forge test",
"test:hardhat": "yarn build:blue && npx hardhat test",
"lint": "yarn lint:forge && yarn lint:ts",
"lint:ts": "prettier --check src test/hardhat",
"lint:ts": "prettier --check test/hardhat",
"lint:forge": "forge fmt --check",
"lint:fix": "yarn lint:forge:fix && yarn lint:ts:fix",
"lint:ts:fix": "prettier --write src test/hardhat",
"lint:ts:fix": "prettier --write test/hardhat",
"lint:forge:fix": "forge fmt",
"clean": "npx hardhat clean && forge clean"
},
Expand Down
5 changes: 1 addition & 4 deletions remappings.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
contracts/=contracts/
src/=src/
test/=test/

solmate/=lib/solmate/
openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/

@morpho-blue/=lib/morpho-blue/src/
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
File renamed without changes.
92 changes: 0 additions & 92 deletions src/allocation.ts

This file was deleted.

22 changes: 0 additions & 22 deletions src/compare.ts

This file was deleted.

37 changes: 0 additions & 37 deletions src/gradient-descent.ts

This file was deleted.

File renamed without changes.
File renamed without changes.
16 changes: 16 additions & 0 deletions src/interfaces/ISupplyVault.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.6.2;

import {MarketParams} from "@morpho-blue/interfaces/IMorpho.sol";

struct MarketAllocation {
MarketParams marketParams;
uint256 assets;
}

struct Pending {
uint128 value;
uint128 timestamp;
}

interface IMetaMorpho {}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
28 changes: 0 additions & 28 deletions src/utils.ts

This file was deleted.

8 changes: 4 additions & 4 deletions test/forge/helpers/BaseTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import {MorphoBalancesLib} from "@morpho-blue/libraries/periphery/MorphoBalances

import {ORACLE_PRICE_SCALE} from "@morpho-blue/libraries/ConstantsLib.sol";

import {IrmMock} from "contracts/mocks/IrmMock.sol";
import {ERC20Mock} from "contracts/mocks/ERC20Mock.sol";
import {OracleMock} from "contracts/mocks/OracleMock.sol";
import {IrmMock} from "src/mocks/IrmMock.sol";
import {ERC20Mock} from "src/mocks/ERC20Mock.sol";
import {OracleMock} from "src/mocks/OracleMock.sol";

import {MetaMorpho, IERC20, ErrorsLib, Pending, MarketAllocation} from "contracts/MetaMorpho.sol";
import {MetaMorpho, IERC20, ErrorsLib, Pending, MarketAllocation} from "src/MetaMorpho.sol";

import "forge-std/Test.sol";
import "forge-std/console2.sol";
Expand Down
42 changes: 33 additions & 9 deletions test/hardhat/MetaMorpho.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,13 @@ const identifier = (marketParams: MarketParamsStruct) => {
return Buffer.from(keccak256(encodedMarket).slice(2), "hex");
};

const forwardTimestamp = async () => {
const logProgress = (name: string, i: number, max: number) => {
if (i % 10 == 0) console.log("[" + name + "]", Math.floor((100 * i) / max), "%");
};

const randomForwardTimestamp = async () => {
const block = await hre.ethers.provider.getBlock("latest");
const elapsed = (1 + Math.floor(random() * 100)) * 12;
const elapsed = random() < 1 / 2 ? 0 : (1 + Math.floor(random() * 100)) * 12; // 50% of the time, don't go forward in time.

await setNextBlockTimestamp(block!.timestamp + elapsed);
};
Expand Down Expand Up @@ -110,7 +114,7 @@ describe("MetaMorpho", () => {

const IMetaMorphoFactory = await hre.ethers.getContractFactory("MetaMorpho", admin);

metaMorpho = await IMetaMorphoFactory.deploy(morphoAddress, borrowableAddress, "MetaMorpho", "mB");
metaMorpho = await IMetaMorphoFactory.deploy(morphoAddress, 0, borrowableAddress, "MetaMorpho", "mB");

const metaMorphoAddress = await metaMorpho.getAddress();

Expand All @@ -124,13 +128,23 @@ describe("MetaMorpho", () => {
await metaMorpho.setIsRiskManager(riskManager.address, true);
await metaMorpho.setIsAllocator(allocator.address, true);

await metaMorpho.acceptFee(BigInt.WAD / 5n);
await metaMorpho.setFeeRecipient(admin.address);
await metaMorpho.submitFee(BigInt.WAD / 5n);
await metaMorpho.acceptFee();

for (const marketParams of allMarketParams) {
await metaMorpho.connect(riskManager).setConfig(marketParams, { cap: MaxUint256 });
await metaMorpho
.connect(riskManager)
.submitMarket(
marketParams,
(BigInt.WAD * 100n * toBigInt(suppliers.length)) / toBigInt(allMarketParams.length),
);
await metaMorpho.connect(riskManager).enableMarket(identifier(marketParams));
}

await metaMorpho.connect(riskManager).setSupplyAllocationOrder(allMarketParams.map(identifier));
await metaMorpho.connect(riskManager).setWithdrawAllocationOrder(allMarketParams.map(identifier));

hre.tracer.nameTags[morphoAddress] = "Morpho";
hre.tracer.nameTags[collateralAddress] = "Collateral";
hre.tracer.nameTags[borrowableAddress] = "Borrowable";
Expand All @@ -141,19 +155,24 @@ describe("MetaMorpho", () => {

it("should simulate gas cost [main]", async () => {
for (let i = 0; i < suppliers.length; ++i) {
if (i % 20 == 0) console.log("[main]", Math.floor((100 * i) / suppliers.length), "%");

if (random() < 1 / 2) await forwardTimestamp();
logProgress("main", i, suppliers.length);

const supplier = suppliers[i];

let assets = BigInt.WAD * toBigInt(1 + Math.floor(random() * 100));

await randomForwardTimestamp();

await metaMorpho.connect(supplier).deposit(assets, supplier.address);

await randomForwardTimestamp();

await metaMorpho.connect(supplier).withdraw(assets / 2n, supplier.address, supplier.address);

await randomForwardTimestamp();

await metaMorpho.connect(allocator).reallocate(
[],
[{ marketParams: allMarketParams[0], assets: assets / 2n }],
allMarketParams.map((marketParams) => ({ marketParams, assets: assets / toBigInt(nbMarkets + 1) / 2n })),
);

Expand All @@ -165,7 +184,12 @@ describe("MetaMorpho", () => {

assets = liquidity / 2n;

await randomForwardTimestamp();

await morpho.connect(borrower).supplyCollateral(marketParams, assets, borrower.address, "0x");

await randomForwardTimestamp();

await morpho.connect(borrower).borrow(marketParams, assets / 3n, 0, borrower.address, borrower.address);
}
}
Expand Down
Loading

0 comments on commit 28e0347

Please sign in to comment.