Skip to content

Commit 46a714b

Browse files
authored
Merge pull request #38 from SetProtocol/pranav/add-batch-trading-extension-deploy-scripts
chore(scripts): Add BatchTradeExtension deploy scripts [SIM-250]
2 parents 8f6e1c1 + 5c15336 commit 46a714b

15 files changed

+493
-38
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import "module-alias/register";
2+
3+
import { HardhatRuntimeEnvironment as HRE } from "hardhat/types";
4+
import { DeployFunction } from "hardhat-deploy/types";
5+
6+
import {
7+
prepareDeployment,
8+
findDependency,
9+
getContractAddress,
10+
getCurrentStage,
11+
saveContractDeployment,
12+
stageAlreadyFinished,
13+
trackFinishedStage,
14+
addExtensionToManagerCore,
15+
} from "@utils/index";
16+
17+
import { DEPENDENCY } from "../deployments/utils/dependencies";
18+
import { CONTRACT_NAMES } from "../deployments/constants/003_batch_trade_extension";
19+
20+
const { TRADE_MODULE } = DEPENDENCY;
21+
22+
const CURRENT_STAGE = getCurrentStage(__filename);
23+
24+
const func: DeployFunction = trackFinishedStage(CURRENT_STAGE, async function (bre: HRE) {
25+
const {
26+
deploy,
27+
deployer,
28+
} = await prepareDeployment(bre);
29+
30+
const managerCoreAddress = await getContractAddress(CONTRACT_NAMES.MANAGER_CORE);
31+
const tradeModuleAddress = await findDependency(TRADE_MODULE);
32+
33+
await deployBatchTradeExtension();
34+
35+
await addExtensionToManagerCore(CONTRACT_NAMES.BATCH_TRADE_EXTENSION, bre);
36+
37+
//
38+
// Helper Functions
39+
//
40+
41+
async function deployBatchTradeExtension(): Promise<void> {
42+
const checkBatchTradeExtensionAddress = await getContractAddress(CONTRACT_NAMES.BATCH_TRADE_EXTENSION);
43+
if (checkBatchTradeExtensionAddress === "") {
44+
const constructorArgs = [managerCoreAddress, tradeModuleAddress, ["ZeroExApiAdapterV5"]];
45+
const batchTradeExtensionDeploy = await deploy(
46+
CONTRACT_NAMES.BATCH_TRADE_EXTENSION,
47+
{ from: deployer, args: constructorArgs, log: true }
48+
);
49+
batchTradeExtensionDeploy.receipt && await saveContractDeployment({
50+
name: CONTRACT_NAMES.BATCH_TRADE_EXTENSION,
51+
contractAddress: batchTradeExtensionDeploy.address,
52+
id: batchTradeExtensionDeploy.receipt.transactionHash,
53+
description: `Deployed ${CONTRACT_NAMES.BATCH_TRADE_EXTENSION}`,
54+
constructorArgs,
55+
});
56+
}
57+
}
58+
});
59+
60+
func.skip = stageAlreadyFinished(CURRENT_STAGE);
61+
62+
export default func;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const CONTRACT_NAMES = {
2+
MANAGER_CORE: "ManagerCore",
3+
BATCH_TRADE_EXTENSION:"BatchTradeExtension",
4+
};

ethereum/test/deploys/002_delegated_manager_system.spec.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,11 @@ describe("Delegated Manager System", () => {
7979
expect(isInitialized).to.eq(true);
8080
});
8181

82-
it("should have one enabled factory", async () => {
83-
const factories = await managerCoreInstance.getFactories();
84-
expect(factories.length).to.eq(1);
85-
});
86-
87-
it("should have a valid factory", async () => {
82+
it("should have DelegatedManagerFactory as valid factory", async () => {
8883
const validFactory = await managerCoreInstance.isFactory(delegatedManagerFactoryInstance.address);
8984
expect(validFactory).to.eq(true);
9085
});
9186

92-
it("should have three enabled extensions", async () => {
93-
const extensions = await managerCoreInstance.getExtensions();
94-
expect(extensions.length).to.eq(3);
95-
});
96-
9787
it("should have IssuanceExtension as valid extension", async () => {
9888
const validIssuanceExtension = await managerCoreInstance.isExtension(issuanceExtensionInstance.address);
9989
expect(validIssuanceExtension).to.eq(true);
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import "module-alias/register";
2+
import { deployments } from "hardhat";
3+
4+
import { Account } from "@utils/types";
5+
6+
import {
7+
ManagerCore,
8+
ManagerCore__factory,
9+
BatchTradeExtension,
10+
BatchTradeExtension__factory,
11+
} from "@set/typechain/index";
12+
13+
import {
14+
addSnapshotBeforeRestoreAfterEach,
15+
getAccounts,
16+
getWaffleExpect,
17+
findDependency,
18+
getContractAddress,
19+
} from "@utils/index";
20+
import { DEPENDENCY } from "../../deployments/utils/dependencies";
21+
import { CONTRACT_NAMES } from "../../deployments/constants/003_batch_trade_extension";
22+
23+
const {
24+
TRADE_MODULE
25+
} = DEPENDENCY;
26+
27+
const expect = getWaffleExpect();
28+
29+
describe("Batch Trade Extension", () => {
30+
let deployer: Account;
31+
32+
let managerCoreInstance: ManagerCore;
33+
let batchTradeExtensionInstance: BatchTradeExtension;
34+
35+
before(async () => {
36+
[deployer] = await getAccounts();
37+
38+
await deployments.fixture();
39+
40+
const deployedManagerCoreContract = await getContractAddress(CONTRACT_NAMES.MANAGER_CORE);
41+
managerCoreInstance = new ManagerCore__factory(deployer.wallet).attach(deployedManagerCoreContract);
42+
43+
const deployedBatchTradeExtensionContract = await getContractAddress(CONTRACT_NAMES.BATCH_TRADE_EXTENSION);
44+
batchTradeExtensionInstance = new BatchTradeExtension__factory(deployer.wallet).attach(deployedBatchTradeExtensionContract);
45+
});
46+
47+
addSnapshotBeforeRestoreAfterEach();
48+
49+
describe("BatchTradeExtension", async () => {
50+
it("should have the correct ManagerCore address", async () => {
51+
const managerCore = await batchTradeExtensionInstance.managerCore();
52+
expect(managerCore).to.eq(managerCoreInstance.address);
53+
});
54+
55+
it("should have the correct TradeModule address", async () => {
56+
const tradeModule = await batchTradeExtensionInstance.tradeModule();
57+
expect(tradeModule).to.eq(await findDependency(TRADE_MODULE));
58+
});
59+
60+
it("should be a valid extension on the ManagerCore", async () => {
61+
const validBatchTradeExtension = await managerCoreInstance.isExtension(batchTradeExtensionInstance.address);
62+
expect(validBatchTradeExtension).to.eq(true);
63+
});
64+
65+
it("should have set the correct integrations length of 1", async () => {
66+
const integrations = await batchTradeExtensionInstance.getIntegrations();
67+
expect(integrations.length).to.eq(1);
68+
});
69+
70+
it("should have ZeroExApiAdapterV5 as a valid integration", async () => {
71+
const validZeroExApiAdapterV5 = await batchTradeExtensionInstance.isIntegration("ZeroExApiAdapterV5");
72+
expect(validZeroExApiAdapterV5).to.eq(true);
73+
});
74+
});
75+
});
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import "module-alias/register";
2+
3+
import { HardhatRuntimeEnvironment as HRE } from "hardhat/types";
4+
import { DeployFunction } from "hardhat-deploy/types";
5+
6+
import {
7+
prepareDeployment,
8+
findDependency,
9+
getContractAddress,
10+
getCurrentStage,
11+
saveContractDeployment,
12+
stageAlreadyFinished,
13+
trackFinishedStage,
14+
addExtensionToManagerCore,
15+
} from "@utils/index";
16+
17+
import { DEPENDENCY } from "../deployments/utils/dependencies";
18+
import { CONTRACT_NAMES } from "../deployments/constants/006_batch_trade_extension";
19+
20+
const { TRADE_MODULE } = DEPENDENCY;
21+
22+
const CURRENT_STAGE = getCurrentStage(__filename);
23+
24+
const func: DeployFunction = trackFinishedStage(CURRENT_STAGE, async function (bre: HRE) {
25+
const {
26+
deploy,
27+
deployer,
28+
} = await prepareDeployment(bre);
29+
30+
const managerCoreAddress = await getContractAddress(CONTRACT_NAMES.MANAGER_CORE);
31+
const tradeModuleAddress = await findDependency(TRADE_MODULE);
32+
33+
await deployBatchTradeExtension();
34+
35+
await addExtensionToManagerCore(CONTRACT_NAMES.BATCH_TRADE_EXTENSION, bre);
36+
37+
//
38+
// Helper Functions
39+
//
40+
41+
async function deployBatchTradeExtension(): Promise<void> {
42+
const checkBatchTradeExtensionAddress = await getContractAddress(CONTRACT_NAMES.BATCH_TRADE_EXTENSION);
43+
if (checkBatchTradeExtensionAddress === "") {
44+
const constructorArgs = [managerCoreAddress, tradeModuleAddress, ["ZeroExApiAdapterV5"]];
45+
const batchTradeExtensionDeploy = await deploy(
46+
CONTRACT_NAMES.BATCH_TRADE_EXTENSION,
47+
{ from: deployer, args: constructorArgs, log: true }
48+
);
49+
batchTradeExtensionDeploy.receipt && await saveContractDeployment({
50+
name: CONTRACT_NAMES.BATCH_TRADE_EXTENSION,
51+
contractAddress: batchTradeExtensionDeploy.address,
52+
id: batchTradeExtensionDeploy.receipt.transactionHash,
53+
description: `Deployed ${CONTRACT_NAMES.BATCH_TRADE_EXTENSION}`,
54+
constructorArgs,
55+
});
56+
}
57+
}
58+
});
59+
60+
func.skip = stageAlreadyFinished(CURRENT_STAGE);
61+
62+
export default func;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const CONTRACT_NAMES = {
2+
MANAGER_CORE: "ManagerCore",
3+
BATCH_TRADE_EXTENSION:"BatchTradeExtension",
4+
};

optimism/test/deploys/003_delegated_manager_system.spec.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,11 @@ describe("Delegated Manager System", () => {
7979
expect(isInitialized).to.eq(true);
8080
});
8181

82-
it("should have one enabled factory", async () => {
83-
const factories = await managerCoreInstance.getFactories();
84-
expect(factories.length).to.eq(1);
85-
});
86-
87-
it("should have a valid factory", async () => {
82+
it("should have DelegatedManagerFactory as valid factory", async () => {
8883
const validFactory = await managerCoreInstance.isFactory(delegatedManagerFactoryInstance.address);
8984
expect(validFactory).to.eq(true);
9085
});
9186

92-
it("should have three enabled extensions", async () => {
93-
const extensions = await managerCoreInstance.getExtensions();
94-
expect(extensions.length).to.eq(3);
95-
});
96-
9787
it("should have IssuanceExtension as valid extension", async () => {
9888
const validIssuanceExtension = await managerCoreInstance.isExtension(issuanceExtensionInstance.address);
9989
expect(validIssuanceExtension).to.eq(true);
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import "module-alias/register";
2+
import { deployments } from "hardhat";
3+
4+
import { Account } from "@utils/types";
5+
6+
import {
7+
ManagerCore,
8+
ManagerCore__factory,
9+
BatchTradeExtension,
10+
BatchTradeExtension__factory,
11+
} from "@set/typechain/index";
12+
13+
import {
14+
addSnapshotBeforeRestoreAfterEach,
15+
getAccounts,
16+
getWaffleExpect,
17+
findDependency,
18+
getContractAddress,
19+
} from "@utils/index";
20+
import { DEPENDENCY } from "../../deployments/utils/dependencies";
21+
import { CONTRACT_NAMES } from "../../deployments/constants/006_batch_trade_extension";
22+
23+
const {
24+
TRADE_MODULE
25+
} = DEPENDENCY;
26+
27+
const expect = getWaffleExpect();
28+
29+
describe("Batch Trade Extension", () => {
30+
let deployer: Account;
31+
32+
let managerCoreInstance: ManagerCore;
33+
let batchTradeExtensionInstance: BatchTradeExtension;
34+
35+
before(async () => {
36+
[deployer] = await getAccounts();
37+
38+
await deployments.fixture();
39+
40+
const deployedManagerCoreContract = await getContractAddress(CONTRACT_NAMES.MANAGER_CORE);
41+
managerCoreInstance = new ManagerCore__factory(deployer.wallet).attach(deployedManagerCoreContract);
42+
43+
const deployedBatchTradeExtensionContract = await getContractAddress(CONTRACT_NAMES.BATCH_TRADE_EXTENSION);
44+
batchTradeExtensionInstance = new BatchTradeExtension__factory(deployer.wallet).attach(deployedBatchTradeExtensionContract);
45+
});
46+
47+
addSnapshotBeforeRestoreAfterEach();
48+
49+
describe("BatchTradeExtension", async () => {
50+
it("should have the correct ManagerCore address", async () => {
51+
const managerCore = await batchTradeExtensionInstance.managerCore();
52+
expect(managerCore).to.eq(managerCoreInstance.address);
53+
});
54+
55+
it("should have the correct TradeModule address", async () => {
56+
const tradeModule = await batchTradeExtensionInstance.tradeModule();
57+
expect(tradeModule).to.eq(await findDependency(TRADE_MODULE));
58+
});
59+
60+
it("should be a valid extension on the ManagerCore", async () => {
61+
const validBatchTradeExtension = await managerCoreInstance.isExtension(batchTradeExtensionInstance.address);
62+
expect(validBatchTradeExtension).to.eq(true);
63+
});
64+
65+
it("should have set the correct integrations length of 1", async () => {
66+
const integrations = await batchTradeExtensionInstance.getIntegrations();
67+
expect(integrations.length).to.eq(1);
68+
});
69+
70+
it("should have ZeroExApiAdapterV5 as a valid integration", async () => {
71+
const validZeroExApiAdapterV5 = await batchTradeExtensionInstance.isIntegration("ZeroExApiAdapterV5");
72+
expect(validZeroExApiAdapterV5).to.eq(true);
73+
});
74+
});
75+
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
"@indexcoop/index-coop-smart-contracts": "^0.2.0",
8787
"@perp/curie-contract": "^0.14.0-staging",
8888
"@setprotocol/set-protocol-v2": "^0.10.1",
89-
"@setprotocol/set-v2-strategies": "0.0.10",
89+
"@setprotocol/set-v2-strategies": "0.0.11",
9090
"ethers": "5.5.2",
9191
"fs-extra": "^5.0.0",
9292
"module-alias": "^2.2.2",

0 commit comments

Comments
 (0)