chore: hardhat optimizer settings

This commit is contained in:
gitpusha 2020-11-02 15:52:03 +01:00 committed by Twin Fish
parent 71226fba45
commit 9e951120e8
19 changed files with 79 additions and 50 deletions

View File

@ -27,9 +27,18 @@ jobs: # a collection of steps
- run: # Linting - run: # Linting
name: ESLint name: ESLint
command: yarn eslint . && yarn lint:sol command: yarn eslint . && yarn lint:sol
- restore_cache: # special step to restore the Hardhat Network Fork Cache
# Read about caching dependencies: https://circleci.com/docs/2.0/caching/
name: Restore Hardhat Network Fork Cache
key: hardhat-network-fork
- run: # Tests - run: # Tests
name: Tests using hardhat mainnet fork name: Tests using hardhat mainnet fork
command: npx hardhat test command: npx hardhat test
- save_cache: # special step to save the Hardhat Network Fork cache
name: Save Hardhat Network Fork Cache
key: hardhat-network-fork
paths:
- ./cache/hardhat-network-fork
# - store_artifacts: # for display in Artifacts: https://circleci.com/docs/2.0/artifacts/ # - store_artifacts: # for display in Artifacts: https://circleci.com/docs/2.0/artifacts/
# path: coverage # path: coverage
# prefix: coverage # prefix: coverage

View File

@ -1,3 +1,4 @@
node_modules/ node_modules/
contracts/constants contracts/constants
contracts/functions
contracts/vendor contracts/vendor

View File

@ -22,7 +22,7 @@ Furtheremore the following contracts were added to showcase the automation of th
- `ConditionCompareUintsFromTwoSource`: a generic Gelato Condition that allows you to read and compare data from 2 arbitrary on-chain sources (returndata expected to be uint256 and normalized => hence MockDSR and MockCDAI). This Condition was used to compare DSR to CDAI rates and in the test suite we showcase how a change in the CDAI rate (it going above the DSR) can trigger an automatic rebalancing from DSR to CDAI via DSA Connectors. - `ConditionCompareUintsFromTwoSource`: a generic Gelato Condition that allows you to read and compare data from 2 arbitrary on-chain sources (returndata expected to be uint256 and normalized => hence MockDSR and MockCDAI). This Condition was used to compare DSR to CDAI rates and in the test suite we showcase how a change in the CDAI rate (it going above the DSR) can trigger an automatic rebalancing from DSR to CDAI via DSA Connectors.
- `ProviderModuleDSA`: this is needed for any Gelato integration. It tells Gelato how the execution payload should be formatted. In this prototype, it formats the payload for the `DSA.cast` function. - `ProviderModuleDsa`: this is needed for any Gelato integration. It tells Gelato how the execution payload should be formatted. In this prototype, it formats the payload for the `DSA.cast` function.
- `ConnectGelato`: this is a Connector needed for the DSA to be able to submit Tasks to Gelato. In the test suite we unlock the DSA MultiSig Master account at 0xfCD22438AD6eD564a1C26151Df73F6B33B817B56, in order to be able to enable this Connector in our mainnet fork running on the local hardhat network instance. - `ConnectGelato`: this is a Connector needed for the DSA to be able to submit Tasks to Gelato. In the test suite we unlock the DSA MultiSig Master account at 0xfCD22438AD6eD564a1C26151Df73F6B33B817B56, in order to be able to enable this Connector in our mainnet fork running on the local hardhat network instance.

View File

@ -0,0 +1,4 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.7.4;
address constant MCD_MANAGER = 0x5ef30b9986345249bc32d8928B7ee64DE9435E39;

View File

@ -42,12 +42,14 @@ contract DebtBridgeFromMakerForFullRefinance {
uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1933080 + ~2% (Estimated Value) uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1933080 + ~2% (Estimated Value)
// To retrieve when the connector is deployed and replace with the address of the deployed instance // To retrieve when the connector is deployed and replace with the address of the deployed instance
address public connectGelatoProviderPayment; address public immutable connectGelatoProviderPayment;
constructor(address _connectGelatoProviderPayment) { constructor(address _connectGelatoProviderPayment) {
connectGelatoProviderPayment = _connectGelatoProviderPayment; connectGelatoProviderPayment = _connectGelatoProviderPayment;
} }
/* solhint-disable function-max-lines */
/// @notice Generate Task for a full refinancing between Maker to Compound. /// @notice Generate Task for a full refinancing between Maker to Compound.
/// @param _vaultId Id of the unsafe vault of the client. /// @param _vaultId Id of the unsafe vault of the client.
/// @param _token vault's col token address . /// @param _token vault's col token address .
@ -166,6 +168,8 @@ contract DebtBridgeFromMakerForFullRefinance {
); );
} }
/* solhint-enable function-max-lines */
/// @notice Generate Data for calling execPayloadForFullRefinanceFromMakerToMaker via a static call. /// @notice Generate Data for calling execPayloadForFullRefinanceFromMakerToMaker via a static call.
/// @param _vaultId Id of the unsafe vault of the client. /// @param _vaultId Id of the unsafe vault of the client.
/// @param _token vault's col token address . /// @param _token vault's col token address .

View File

@ -59,12 +59,14 @@ contract DebtBridgeFromMakerForPartialRefinance {
uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1933080 + ~2% (Estimated Value) uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1933080 + ~2% (Estimated Value)
// To retrieve when the connector is deployed and replace with the address of the deployed instance // To retrieve when the connector is deployed and replace with the address of the deployed instance
address public connectGelatoProviderPayment; address public immutable connectGelatoProviderPayment;
constructor(address _connectGelatoProviderPayment) { constructor(address _connectGelatoProviderPayment) {
connectGelatoProviderPayment = _connectGelatoProviderPayment; connectGelatoProviderPayment = _connectGelatoProviderPayment;
} }
/* solhint-disable function-max-lines */
/// @notice Generate Task for a full refinancing between Maker to Compound. /// @notice Generate Task for a full refinancing between Maker to Compound.
/// @param _payload contain : /// @param _payload contain :
// @param _vaultId Id of the unsafe vault of the client. // @param _vaultId Id of the unsafe vault of the client.
@ -225,6 +227,8 @@ contract DebtBridgeFromMakerForPartialRefinance {
); );
} }
/* solhint-enable function-max-lines */
/// @notice Computes values needed for DebtBridge Maker->ProtocolB /// @notice Computes values needed for DebtBridge Maker->ProtocolB
/// @dev Use wad for colRatios. /// @dev Use wad for colRatios.
/// @param _vaultId The id of the makerDAO vault. /// @param _vaultId The id of the makerDAO vault.
@ -356,7 +360,7 @@ contract DebtBridgeFromMakerForPartialRefinance {
/// method e.g. the function selector of MakerOracle's read function. /// method e.g. the function selector of MakerOracle's read function.
/// @param _colType colType of the new vault, exemple : ETH-B, ETH-A. /// @param _colType colType of the new vault, exemple : ETH-B, ETH-A.
/// @param _provider address of the paying provider. /// @param _provider address of the paying provider.
/// @return a call data for a static call of execPayloadForPartialRefinanceFromMakerToMaker. /// @return payload for execPayloadForPartialRefinanceFromMakerToMaker.
function getDebtBridgePartialRefinanceMakerToMakerData( function getDebtBridgePartialRefinanceMakerToMakerData(
uint256 _vaultId, uint256 _vaultId,
address _token, address _token,

View File

@ -51,12 +51,18 @@ contract ProviderModuleDsaFromMakerToCompound is GelatoProviderModuleStandard {
bool gelatoCoreIsAuth bool gelatoCoreIsAuth
) { ) {
if (!gelatoCoreIsAuth) if (!gelatoCoreIsAuth)
return "ProviderModuleDSA.isProvided:GelatoCoreNotAuth"; return
"ProviderModuleDsaFromMakerToCompound.isProvided:GelatoCoreNotAuth";
} catch Error(string memory err) { } catch Error(string memory err) {
return return
string(abi.encodePacked("ProviderModuleDSA.isProvided:", err)); string(
abi.encodePacked(
"ProviderModuleDsaFromMakerToCompound.isProvided:",
err
)
);
} catch { } catch {
return "ProviderModuleDSA.isProvided:undefined"; return "ProviderModuleDsaFromMakerToCompound.isProvided:undefined";
} }
return OK; return OK;

View File

@ -51,12 +51,18 @@ contract ProviderModuleDsaFromMakerToMaker is GelatoProviderModuleStandard {
bool gelatoCoreIsAuth bool gelatoCoreIsAuth
) { ) {
if (!gelatoCoreIsAuth) if (!gelatoCoreIsAuth)
return "ProviderModuleDSA.isProvided:GelatoCoreNotAuth"; return
"ProviderModuleDsaFromMakerToMaker.isProvided:GelatoCoreNotAuth";
} catch Error(string memory err) { } catch Error(string memory err) {
return return
string(abi.encodePacked("ProviderModuleDSA.isProvided:", err)); string(
abi.encodePacked(
"ProviderModuleDsaFromMakerToMaker.isProvided:",
err
)
);
} catch { } catch {
return "ProviderModuleDSA.isProvided:undefined"; return "ProviderModuleDsaFromMakerToMaker.isProvided:undefined";
} }
return OK; return OK;

View File

@ -1,23 +1,16 @@
// SPDX-License-Identifier: UNLICENSED // SPDX-License-Identifier: UNLICENSED
pragma solidity 0.7.4; pragma solidity 0.7.4;
import {IManager} from "../../interfaces/Maker/IManager.sol"; import {MCD_MANAGER} from "../../constants/CMaker.sol";
import {IVat} from "../../interfaces/Maker/IVat.sol"; import {IMcdManager} from "../../interfaces/dapps/Maker/IMcdManager.sol";
import {IVat} from "../../interfaces/dapps/Maker/IVat.sol";
import {RAY, sub, mul} from "../../vendor/DSMath.sol"; import {RAY, sub, mul} from "../../vendor/DSMath.sol";
function _getMcdManager() pure returns (address) {
return 0x5ef30b9986345249bc32d8928B7ee64DE9435E39;
}
function _getManager() pure returns (IManager) {
return IManager(_getMcdManager());
}
function _getMakerVaultDebt(uint256 _vaultId) view returns (uint256 wad) { function _getMakerVaultDebt(uint256 _vaultId) view returns (uint256 wad) {
IManager cdpManager = _getManager(); IMcdManager manager = IMcdManager(MCD_MANAGER);
(bytes32 ilk, address urn) = _getVaultData(cdpManager, _vaultId); (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);
IVat vat = IVat(cdpManager.vat()); IVat vat = IVat(manager.vat());
(, uint256 rate, , , ) = vat.ilks(ilk); (, uint256 rate, , , ) = vat.ilks(ilk);
(, uint256 art) = vat.urns(ilk, urn); (, uint256 art) = vat.urns(ilk, urn);
uint256 dai = vat.dai(urn); uint256 dai = vat.dai(urn);
@ -32,19 +25,19 @@ function _getMakerVaultCollateralBalance(uint256 _vaultId)
view view
returns (uint256) returns (uint256)
{ {
IManager cdpManager = _getManager(); IMcdManager manager = IMcdManager(MCD_MANAGER);
IVat vat = IVat(cdpManager.vat()); IVat vat = IVat(manager.vat());
(bytes32 ilk, address urn) = _getVaultData(cdpManager, _vaultId); (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);
(uint256 ink, ) = vat.urns(ilk, urn); (uint256 ink, ) = vat.urns(ilk, urn);
return ink; return ink;
} }
function _getVaultData(IManager cdpManager, uint256 vault) function _getVaultData(IMcdManager manager, uint256 vault)
view view
returns (bytes32 ilk, address urn) returns (bytes32 ilk, address urn)
{ {
ilk = cdpManager.ilks(vault); ilk = manager.ilks(vault);
urn = cdpManager.urns(vault); urn = manager.urns(vault);
} }

View File

@ -1,7 +1,7 @@
// SPDX-License-Identifier: UNLICENSED // SPDX-License-Identifier: UNLICENSED
pragma solidity 0.7.4; pragma solidity 0.7.4;
interface IManager { interface IMcdManager {
function ilks(uint256) external view returns (bytes32); function ilks(uint256) external view returns (bytes32);
function urns(uint256) external view returns (address); function urns(uint256) external view returns (address);

View File

@ -51,12 +51,14 @@ module.exports = {
CETH: "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5", CETH: "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5",
DssCdpManager: "0x5ef30b9986345249bc32d8928B7ee64DE9435E39", DssCdpManager: "0x5ef30b9986345249bc32d8928B7ee64DE9435E39",
GetCdps: "0x36a724Bd100c39f0Ea4D3A20F7097eE01A8Ff573", GetCdps: "0x36a724Bd100c39f0Ea4D3A20F7097eE01A8Ff573",
ProviderModuleDSA: "0x0C25452d20cdFeEd2983fa9b9b9Cf4E81D6f2fE2", ProviderModuleDsa: "0x0C25452d20cdFeEd2983fa9b9b9Cf4E81D6f2fE2",
}, },
}, },
solidity: { solidity: {
version: "0.7.4", version: "0.7.4",
optimizer: {enabled: process.env.DEBUG ? false : true}, settings: {
optimizer: {enabled: process.env.DEBUG ? false : true},
},
}, },
}; };

View File

@ -10,10 +10,10 @@
"compile": "npx hardhat compile", "compile": "npx hardhat compile",
"format": "prettier --write .", "format": "prettier --write .",
"lint": "eslint --cache . && yarn lint:sol", "lint": "eslint --cache . && yarn lint:sol",
"lint:sol": "solhint contracts/**/*.sol", "lint:sol": "solhint contracts/**/**/**/**/**/**/**/*.sol",
"lint:fix": "eslint --cache --fix . && solhint --fix contracts/**/*.sol", "lint:fix": "eslint --cache --fix . && solhint --fix contracts/**/*.sol",
"test": "yarn compile --force && npx hardhat test", "test": "yarn compile && npx hardhat test",
"debug": "DEBUG=true yarn compile --force && npx hardhat test" "debug": "DEBUG=true yarn compile && npx hardhat test"
}, },
"devDependencies": { "devDependencies": {
"@gelatonetwork/core": "1.0.0", "@gelatonetwork/core": "1.0.0",

View File

@ -16,7 +16,7 @@ const InstaConnectors = require("../pre-compiles/InstaConnectors.json");
const InstaAccount = require("../pre-compiles/InstaAccount.json"); const InstaAccount = require("../pre-compiles/InstaAccount.json");
const ConnectAuth = require("../pre-compiles/ConnectAuth.json"); const ConnectAuth = require("../pre-compiles/ConnectAuth.json");
const ConnectBasic = require("../pre-compiles/ConnectBasic.json"); const ConnectBasic = require("../pre-compiles/ConnectBasic.json");
const ProviderModuleDSA_ABI = require("../pre-compiles/ProviderModuleDSA_ABI.json"); const ProviderModuleDsa_ABI = require("../pre-compiles/ProviderModuleDsa_ABI.json");
describe("DSA setup with Gelato Tests", function () { describe("DSA setup with Gelato Tests", function () {
this.timeout(50000); this.timeout(50000);
@ -89,8 +89,8 @@ describe("DSA setup with Gelato Tests", function () {
hre.network.config.GelatoCore hre.network.config.GelatoCore
); );
providerModuleDSA = await ethers.getContractAt( providerModuleDSA = await ethers.getContractAt(
ProviderModuleDSA_ABI, ProviderModuleDsa_ABI,
hre.network.config.ProviderModuleDSA hre.network.config.ProviderModuleDsa
); );
}); });
@ -183,7 +183,7 @@ describe("DSA setup with Gelato Tests", function () {
).to.be.true; ).to.be.true;
}); });
it("#6: Gelato ProviderModuleDSA returns correct execPayload", async function () { it("#6: Gelato ProviderModuleDsa returns correct execPayload", async function () {
// Deposit 1 ETH into DSA // Deposit 1 ETH into DSA
await userWallet.sendTransaction({ await userWallet.sendTransaction({
to: dsaAddress, to: dsaAddress,

View File

@ -237,10 +237,10 @@ describe("Move DAI lending from DSR to Compound", function () {
// A GelatoProvider is an object with the address of the provider - in our case // A GelatoProvider is an object with the address of the provider - in our case
// the DSA address - and the address of the "ProviderModule". This module // the DSA address - and the address of the "ProviderModule". This module
// fulfills certain functions like encoding the execution payload for the Gelato // fulfills certain functions like encoding the execution payload for the Gelato
// protocol. Check out ./contracts/ProviderModuleDSA.sol to see what it does. // protocol. Check out ./contracts/ProviderModuleDsa.sol to see what it does.
const gelatoSelfProvider = new GelatoCoreLib.GelatoProvider({ const gelatoSelfProvider = new GelatoCoreLib.GelatoProvider({
addr: dsa.address, addr: dsa.address,
module: hre.network.config.ProviderModuleDSA, module: hre.network.config.ProviderModuleDsa,
}); });
// ======= Executor Setup ========= // ======= Executor Setup =========
@ -271,7 +271,7 @@ describe("Move DAI lending from DSR to Compound", function () {
inputs: [ inputs: [
userAddress, userAddress,
[], [],
[hre.network.config.ProviderModuleDSA], [hre.network.config.ProviderModuleDsa],
TASK_AUTOMATION_FUNDS, TASK_AUTOMATION_FUNDS,
0, // _getId 0, // _getId
0, // _setId 0, // _setId
@ -296,7 +296,7 @@ describe("Move DAI lending from DSR to Compound", function () {
expect( expect(
await gelatoCore.isModuleProvided( await gelatoCore.isModuleProvided(
dsa.address, dsa.address,
hre.network.config.ProviderModuleDSA hre.network.config.ProviderModuleDsa
) )
).to.be.true; ).to.be.true;

View File

@ -25,10 +25,10 @@ async function getAllContracts() {
); );
await debtBridgeFromMakerForFullRefinance.deployed(); await debtBridgeFromMakerForFullRefinance.deployed();
const ProviderModuleDSA = await ethers.getContractFactory( const ProviderModuleDsa = await ethers.getContractFactory(
"ProviderModuleDsaFromMakerToCompound" "ProviderModuleDsaFromMakerToCompound"
); );
dsaProviderModule = await ProviderModuleDSA.deploy( dsaProviderModule = await ProviderModuleDsa.deploy(
hre.network.config.GelatoCore, hre.network.config.GelatoCore,
contracts.connectGelatoProviderPayment.address contracts.connectGelatoProviderPayment.address
); );

View File

@ -25,10 +25,10 @@ async function getAllContracts() {
); );
await debtBridgeFromMakerForFullRefinance.deployed(); await debtBridgeFromMakerForFullRefinance.deployed();
const ProviderModuleDSA = await ethers.getContractFactory( const ProviderModuleDsa = await ethers.getContractFactory(
"ProviderModuleDsaFromMakerToMaker" "ProviderModuleDsaFromMakerToMaker"
); );
dsaProviderModule = await ProviderModuleDSA.deploy( dsaProviderModule = await ProviderModuleDsa.deploy(
hre.network.config.GelatoCore, hre.network.config.GelatoCore,
contracts.connectGelatoProviderPayment.address contracts.connectGelatoProviderPayment.address
); );

View File

@ -267,10 +267,10 @@ describe("Debt Bridge with External Provider", function () {
); );
await connectGelatoProviderPayment.deployed(); await connectGelatoProviderPayment.deployed();
const ProviderModuleDSA = await ethers.getContractFactory( const ProviderModuleDsa = await ethers.getContractFactory(
"ProviderModuleDSA" "ProviderModuleDsa"
); );
dsaProviderModule = await ProviderModuleDSA.deploy( dsaProviderModule = await ProviderModuleDsa.deploy(
hre.network.config.GelatoCore, hre.network.config.GelatoCore,
connectGelatoProviderPayment.address connectGelatoProviderPayment.address
); );