Skip to content

Commit

Permalink
chore: testnet deployments (#5)
Browse files Browse the repository at this point in the history
* feat: sepolia deployment (not verified)

* chore: optimism sepolia

* fix: lint

* fix: naming

* fix: comments

* fix: lint

* fix: tests

* fix: deleting goerli and op goerli

* fix: rm gorli and op gorli constants

* fix: deployment fixture test

* fix: rm unused imports

* chore: cleanup

* chore: comments

* chore: pr cleanup

* fix: adding JobRatedForTest

* fix: e2e test

---------

Co-authored-by: Weißer Hase <[email protected]>
  • Loading branch information
ashitakah and wei3erHase authored Aug 26, 2024
1 parent 4f7b4e8 commit 3565a28
Show file tree
Hide file tree
Showing 72 changed files with 19,081 additions and 18,829 deletions.
11 changes: 5 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,21 @@ ENCRYPTED_PRIVATE_KEY=
MAINNET_HTTPS_URL=
OPTIMISM_HTTPS_URL=
POLYGON_HTTPS_URL=
GOERLI_HTTPS_URL=
OP_GOERLI_HTTPS_URL=
SEPOLIA_HTTPS_URL=
OP_SEPOLIA_HTTPS_URL=

# Account's private keys
MAINNET_PRIVATE_KEY=
OPTIMISM_PRIVATE_KEY=
POLYGON_PRIVATE_KEY=
GOERLI_PRIVATE_KEY=
OP_GOERLI_PRIVATE_KEY=
SEPOLIA_PRIVATE_KEY=
OP_SEPOLIA_PRIVATE_KEY=

# Etherscan (optional, only for verifying smart contracts)
ETHERSCAN_API_KEY=
ETHEREUM_ETHERSCAN_API_KEY=
OPTIMISTIC_ETHERSCAN_API_KEY=
POLYGON_ETHERSCAN_API_KEY=
GOERLI_ETHERSCAN_API_KEY=
OP_GOERLI_ETHERSCAN_API_KEY=
OP_SEPOLIA_ETHERSCAN_API_KEY=

HARDHAT_DEPLOY_LOG=TRUE
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ cache
artifacts
deployments/hardhat
deployments/localhost
deployments/**/solcInputs

# Config files
.env
Expand Down
4 changes: 2 additions & 2 deletions deploy/0-mainnet/001_keep3r_v1.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { DeployFunction } from 'hardhat-deploy/types';
import { HardhatRuntimeEnvironment } from 'hardhat/types';
import IERC20 from '../../artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json';
import ERC20ForTest from '../../artifacts/solidity/for-test/ERC20ForTest.sol/ERC20ForTest.json';

const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { kp3rV1 } = await hre.getNamedAccounts();

await hre.deployments.save('KP3Rv1', {
address: kp3rV1,
abi: IERC20.abi,
abi: ERC20ForTest.abi,
});
};

Expand Down
3 changes: 1 addition & 2 deletions deploy/1-mainnet-test/101_uni_v3_pool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import IUniswapV3Factory from '../../artifacts/@uniswap/v3-core/contracts/interf
import IUniswapV3Pool from '../../artifacts/@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol/IUniswapV3Pool.json';

const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { deployer, weth } = await hre.getNamedAccounts();
const { deployer, weth, uniV3Factory } = await hre.getNamedAccounts();

const kp3RForTest = await hre.deployments.get('KP3Rv1');
const uniV3Factory = '0x1f98431c8ad98523631ae4a59f267346ea31f984';

await hre.deployments.save('WETH', {
address: weth,
Expand Down
44 changes: 30 additions & 14 deletions deploy/1-mainnet-test/110_job_for_test.ts
Original file line number Diff line number Diff line change
@@ -1,43 +1,54 @@
import { WETH_ADDRESS } from '@e2e/common';
import { toUnit } from '@utils/bn';
import { DeployFunction } from 'hardhat-deploy/types';
import { HardhatRuntimeEnvironment } from 'hardhat/types';

const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { deployer, kp3rV1 } = await hre.getNamedAccounts();
const { deployer } = await hre.getNamedAccounts();
const kp3RForTest = await hre.deployments.get('KP3Rv1');
const keep3rV2 = await hre.deployments.get('Keep3rForTestnet');
const pairManager = await hre.deployments.get('UniV3PairManager');

const jobForTest = await hre.deployments.deploy('BasicJob', {
const jobForTest = await hre.deployments.deploy('JobForTest', {
from: deployer,
contract: 'solidity/for-test/JobForTest.sol:JobForTest',
args: [keep3rV2.address],
log: true,
});

// register job
if (jobForTest.newlyDeployed) {
const jobs = await hre.deployments.read('Keep3rForTestnet', 'jobs');

if (!jobs.includes(jobForTest.address)) {
await hre.deployments.execute('Keep3rForTestnet', { from: deployer, log: true }, 'addJob', jobForTest.address);
}

const LIQUIDITY = await hre.deployments.read('Keep3rForTestnet', 'liquidityAmount', jobForTest.address, pairManager.address);
if (LIQUIDITY == 0) {
const liquidity = await hre.deployments.read('Keep3rForTestnet', 'liquidityAmount', jobForTest.address, pairManager.address);

if (liquidity == 0) {
// deployer needs to have KP3R and WETH balance
let klpBalance = await hre.deployments.read('UniV3PairManager', 'balanceOf', deployer);
if (klpBalance == 0) {
const wethBalance = await hre.deployments.read('WETH', 'balanceOf', deployer);
if (wethBalance < toUnit(1)) {
if (wethBalance < toUnit(0.1)) {
await hre.deployments.execute('WETH', { from: deployer, log: true, value: toUnit(0.1) }, 'deposit');
}
const kp3rBalance = await hre.deployments.read('KP3Rv1', 'balanceOf', deployer);
if (kp3rBalance < toUnit(100)) {
await hre.deployments.execute('KP3Rv1', { from: deployer, log: true }, 'mint(uint256)', toUnit(1));
if (kp3rBalance < toUnit(10)) {
await hre.deployments.execute('KP3Rv1', { from: deployer, log: true }, 'mint(uint256)', toUnit(100_000));
}

await hre.deployments.execute('KP3Rv1', { from: deployer, log: true }, 'approve', pairManager.address, toUnit(100));
await hre.deployments.execute('WETH', { from: deployer, log: true }, 'approve', pairManager.address, toUnit(100));
await hre.deployments.execute('WETH', { from: deployer, log: true }, 'approve', pairManager.address, toUnit(100_000));

let mintArguments: any[];

// Check if WETH is the first token in the pair
if (WETH_ADDRESS > kp3RForTest.address) {
mintArguments = [toUnit(0.1), toUnit(100_000), 0, 0, deployer];
} else {
mintArguments = [toUnit(100_000), toUnit(0.1), 0, 0, deployer];
}

const mintArguments: any[] = [toUnit(1), toUnit(0.1), 0, 0, deployer];
await hre.deployments.execute('UniV3PairManager', { from: deployer, log: true }, 'mint', ...mintArguments);

klpBalance = await hre.deployments.read('UniV3PairManager', 'balanceOf', deployer);
Expand All @@ -55,14 +66,19 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro
);
}

const IS_KEEPER = await hre.deployments.read('Keep3rForTestnet', 'isKeeper', deployer);
if (!IS_KEEPER) {
const isKeeper = await hre.deployments.read('Keep3rForTestnet', 'isKeeper', deployer);
if (!isKeeper) {
// register deployer as keeper
await hre.deployments.execute('Keep3rForTestnet', { from: deployer, log: true }, 'bond', kp3RForTest.address, 0);

// wait for bond to be processed
console.log('waiting for bond to be processed');
await new Promise((resolve) => setTimeout(resolve, 10_000));

await hre.deployments.execute('Keep3rForTestnet', { from: deployer, log: true }, 'activate', kp3RForTest.address);
}

await hre.deployments.execute('BasicJob', { from: deployer, log: true, gasLimit: 1e6 }, 'work');
await hre.deployments.execute('JobForTest', { from: deployer, log: true, gasLimit: 1e6 }, 'work');
};

deployFunction.dependencies = ['testnet-keep3r'];
Expand Down
2 changes: 1 addition & 1 deletion deploy/2-sidechain/203_keep3r_helper_and_sidechain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro

const keep3rV2Args = [governor, keep3rHelper.address, kp3rV1, keep3rEscrow.address];

const keep3r = await hre.deployments.deploy('Keep3rSidechain', {
await hre.deployments.deploy('Keep3rSidechain', {
contract: 'solidity/contracts/sidechain/Keep3rSidechain.sol:Keep3rSidechain',
from: deployer,
args: keep3rV2Args,
Expand Down
8 changes: 3 additions & 5 deletions deploy/3-sidechain-test/301_keep3r_helper_and_sidechain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@ import { DeployFunction } from 'hardhat-deploy/types';
import { HardhatRuntimeEnvironment } from 'hardhat/types';

const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { deployer, governor, kp3rV1, kp3rWethOracle, wethUsdOracle, usdDecimals } = await hre.getNamedAccounts();
const { kp3rV1: mainnetKp3rV1, weth: mainnetWeth } = await hre.companionNetworks['mainnet'].getNamedAccounts();

const { deployer, governor, kp3rV1, weth, kp3rWethOracle, wethUsdOracle, usdDecimals } = await hre.getNamedAccounts();
const keep3rEscrow = await hre.deployments.get('Keep3rEscrow');

// precalculate the address of Keep3rV2 contract
const currentNonce: number = await hre.ethers.provider.getTransactionCount(deployer);
const keeperV2Address: string = hre.ethers.utils.getContractAddress({ from: deployer, nonce: currentNonce + 1 });

const keep3rHelperArgs = [keeperV2Address, governor, mainnetKp3rV1, mainnetWeth, kp3rWethOracle, wethUsdOracle, usdDecimals];
const keep3rHelperArgs = [keeperV2Address, governor, kp3rV1, weth, kp3rWethOracle, wethUsdOracle, usdDecimals];

const keep3rHelper = await hre.deployments.deploy('Keep3rHelperSidechain', {
from: deployer,
Expand All @@ -22,7 +20,7 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro

const keep3rV2Args = [governor, keep3rHelper.address, kp3rV1, keep3rEscrow.address];

const keep3r = await hre.deployments.deploy('Keep3rSidechainForTestnet', {
await hre.deployments.deploy('Keep3rSidechainForTestnet', {
contract: 'solidity/for-test/testnet/Keep3rSidechainForTestnet.sol:Keep3rSidechainForTestnet',
from: deployer,
args: keep3rV2Args,
Expand Down
25 changes: 16 additions & 9 deletions deploy/3-sidechain-test/311_job_rated_for_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,41 +11,48 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro
abi: IERC20.abi,
});

const jobForTest = await hre.deployments.deploy('BasicJob', {
const jobForTest = await hre.deployments.deploy('JobRatedForTest', {
from: deployer,
contract: 'solidity/for-test/JobRatedForTest.sol:JobRatedForTest',
args: [keep3rV2.address],
log: true,
});

// register job
if (jobForTest.newlyDeployed) {
const jobs = await hre.deployments.read('Keep3rSidechainForTestnet', 'jobs');

if (!jobs.includes(jobForTest.address)) {
await hre.deployments.execute('Keep3rSidechainForTestnet', { from: deployer, log: true }, 'addJob', jobForTest.address);
}

const LIQUIDITY = await hre.deployments.read('Keep3rSidechainForTestnet', 'liquidityAmount', jobForTest.address, wkLP);
if (LIQUIDITY == 0) {
const liquidity = await hre.deployments.read('Keep3rSidechainForTestnet', 'liquidityAmount', jobForTest.address, wkLP);
if (liquidity == 0) {
// deployer needs to have kLP balance
const keep3rSidechain = await hre.deployments.get('Keep3rSidechainForTestnet');

await hre.deployments.execute('wkLP', { from: deployer, log: true }, 'approve', keep3rSidechain.address, toUnit(10));
await hre.deployments.execute(
'Keep3rSidechainForTestnet',
{ from: deployer, log: true },
'addLiquidityToJob',
jobForTest.address,
wkLP,
toUnit(1)
toUnit(10)
);
}

const IS_KEEPER = await hre.deployments.read('Keep3rSidechainForTestnet', 'isKeeper', deployer);
if (!IS_KEEPER) {
const isKeeper = await hre.deployments.read('Keep3rSidechainForTestnet', 'isKeeper', deployer);
if (!isKeeper) {
// register deployer as keeper
await hre.deployments.execute('Keep3rSidechainForTestnet', { from: deployer, log: true }, 'bond', kp3rV1, 0);

// wait for bond to be processed
console.log('waiting for bond to be processed');
await new Promise((resolve) => setTimeout(resolve, 10_000));

await hre.deployments.execute('Keep3rSidechainForTestnet', { from: deployer, log: true, gasLimit: 1e6 }, 'activate', kp3rV1);
}

await hre.deployments.execute('BasicJob', { from: deployer, log: true, gasLimit: 1e6 }, 'work');
await hre.deployments.execute('JobRatedForTest', { from: deployer, log: true, gasLimit: 1e6 }, 'work');
};

deployFunction.dependencies = ['approve-testnet-liquidity'];
Expand Down
2 changes: 1 addition & 1 deletion deploy/4-verify/421_verify_testnet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro
const keep3rV2 = await hre.deployments.get('Keep3rForTestnet');
await verifyContract(hre, keep3rV2);

const jobForTest = await hre.deployments.getOrNull('BasicJob');
const jobForTest = await hre.deployments.getOrNull('JobForTest');
if (jobForTest) {
await verifyContract(hre, jobForTest);
}
Expand Down
2 changes: 1 addition & 1 deletion deploy/4-verify/422_verify_testnet_sidechain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro
const keep3rV2 = await hre.deployments.get('Keep3rSidechainForTestnet');
await verifyContract(hre, keep3rV2);

const jobForTest = await hre.deployments.getOrNull('BasicJob');
const jobForTest = await hre.deployments.getOrNull('JobRatedForTest');
if (jobForTest) {
await verifyContract(hre, jobForTest);
}
Expand Down
1 change: 0 additions & 1 deletion deployments/goerli/.chainId

This file was deleted.

133 changes: 0 additions & 133 deletions deployments/goerli/BasicJob.json

This file was deleted.

Loading

0 comments on commit 3565a28

Please sign in to comment.