@dhedge/v2-sdk 1.9.2 → 1.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dhedge/v2-sdk",
3
- "version": "1.9.2",
3
+ "version": "1.9.3",
4
4
  "license": "MIT",
5
5
  "description": "🛠 An SDK for building applications on top of dHEDGE V2",
6
6
  "main": "dist/index.js",
@@ -1341,4 +1341,23 @@ export class Pool {
1341
1341
  const tx = await this.poolLogic.execTransaction(market, txData, options);
1342
1342
  return tx;
1343
1343
  }
1344
+
1345
+ /**
1346
+ * mintManagerFee
1347
+ * @param {any} options Transaction options
1348
+ * @returns {Promise<any>} Transaction
1349
+ */
1350
+ async mintManagerFee(options: any = null): Promise<any> {
1351
+ const tx = await this.poolLogic.mintManagerFee(options);
1352
+ return tx;
1353
+ }
1354
+
1355
+ /**
1356
+ * getAvailableManagerFee
1357
+ * @returns {Promise<BigNumber>} fee
1358
+ */
1359
+ async getAvailableManagerFee(): Promise<BigNumber> {
1360
+ const fee = await this.poolLogic.availableManagerFee();
1361
+ return BigNumber.from(fee);
1362
+ }
1344
1363
  }
@@ -56,6 +56,7 @@ export const CONTRACT_ADDRESS = {
56
56
  USDC: "0x7F5c764cBc14f9669B88837ca1490cCa17c31607",
57
57
  SUSD: "0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9",
58
58
  WETH: "0x4200000000000000000000000000000000000006",
59
+ WBTC: "0x68f180fcCe6836688e9084f035309E29Bf0A2095",
59
60
  KWENTA_ETH_PERP_V2: "0x2b3bb4c683bfc5239b029131eef3b1d214478d93"
60
61
  },
61
62
  [Network.ARBITRUM]: {
@@ -1,60 +1,104 @@
1
+ import { BigNumber } from "ethers";
1
2
  import { Dhedge, ethers, Pool } from "..";
2
3
  import { AssetEnabled, Network } from "../types";
3
4
  import { CONTRACT_ADDRESS, TEST_POOL } from "./constants";
5
+
6
+ import {
7
+ beforeAfterReset,
8
+ testingHelper,
9
+ TestingRunParams
10
+ } from "./utils/testingHelper";
4
11
  import { allowanceDelta, balanceDelta } from "./utils/token";
5
- import { wallet } from "./wallet";
6
12
 
7
- let dhedge: Dhedge;
8
- let pool: Pool;
13
+ const testPool = ({ wallet, network, provider }: TestingRunParams) => {
14
+ let dhedge: Dhedge;
15
+ let pool: Pool;
9
16
 
10
- jest.setTimeout(100000);
17
+ jest.setTimeout(200000);
11
18
 
12
- const network = Network.POLYGON;
19
+ describe(`pool on ${network}`, () => {
20
+ beforeAll(async () => {
21
+ dhedge = new Dhedge(wallet, network);
22
+ pool = await dhedge.loadPool(TEST_POOL[network]);
23
+ });
24
+ beforeAfterReset({ beforeAll, afterAll, provider });
13
25
 
14
- describe("pool", () => {
15
- beforeAll(async () => {
16
- dhedge = new Dhedge(wallet, network);
17
- pool = await dhedge.loadPool(TEST_POOL[network]);
18
- });
26
+ it("checks fund composition", async () => {
27
+ const result = await pool.getComposition();
28
+ expect(result.length).toBeGreaterThan(0);
29
+ });
19
30
 
20
- it("checks fund composition", async () => {
21
- const result = await pool.getComposition();
22
- expect(result.length).toBeGreaterThan(0);
23
- });
31
+ it("approves USDC balance of User for Deposit", async () => {
32
+ await pool.approveDeposit(
33
+ CONTRACT_ADDRESS[network].USDC,
34
+ ethers.constants.MaxUint256
35
+ );
36
+ const UsdcAllowanceDelta = await allowanceDelta(
37
+ pool.signer.address,
38
+ CONTRACT_ADDRESS[network].USDC,
39
+ pool.address,
40
+ pool.signer
41
+ );
42
+ expect(UsdcAllowanceDelta.gt(0));
43
+ });
24
44
 
25
- it("approves USDC balance of User for Deposit", async () => {
26
- await pool.approveDeposit(
27
- CONTRACT_ADDRESS[network].USDC,
28
- ethers.constants.MaxUint256
29
- );
30
- const UsdcAllowanceDelta = await allowanceDelta(
31
- pool.signer.address,
32
- CONTRACT_ADDRESS[network].USDC,
33
- pool.address,
34
- pool.signer
35
- );
36
- expect(UsdcAllowanceDelta.gt(0));
37
- });
45
+ it("deposits 1 USDC into Pool", async () => {
46
+ await pool.deposit(CONTRACT_ADDRESS[network].USDC, (1e6).toString());
47
+ const poolTokenDelta = await balanceDelta(
48
+ pool.signer.address,
49
+ pool.address,
50
+ pool.signer
51
+ );
52
+ expect(poolTokenDelta.gt(0));
53
+ });
38
54
 
39
- it("deposits 1 USDC into Pool", async () => {
40
- await pool.deposit(CONTRACT_ADDRESS[network].USDC, (1e6).toString());
41
- const poolTokenDelta = await balanceDelta(
42
- pool.signer.address,
43
- pool.address,
44
- pool.signer
45
- );
46
- expect(poolTokenDelta.gt(0));
47
- });
55
+ it("adds WBTC to enabled assets", async () => {
56
+ const assetsBefore = await pool.getComposition();
48
57
 
49
- it("adds WBTC to enabled assets", async () => {
50
- const assetsBefore = await pool.getComposition();
51
- const newAssets: AssetEnabled[] = [
52
- { asset: CONTRACT_ADDRESS[network].USDC, isDeposit: true },
53
- { asset: CONTRACT_ADDRESS[network].WETH, isDeposit: false },
54
- { asset: CONTRACT_ADDRESS[network].WBTC, isDeposit: false }
55
- ];
56
- await pool.changeAssets(newAssets);
57
- const assetsAfter = await pool.getComposition();
58
- expect(assetsAfter.length).toBeGreaterThan(assetsBefore.length);
58
+ const newAssets: AssetEnabled[] = [
59
+ { asset: CONTRACT_ADDRESS[network].USDC, isDeposit: true },
60
+ { asset: CONTRACT_ADDRESS[network].WETH, isDeposit: false },
61
+ { asset: CONTRACT_ADDRESS[network].WBTC, isDeposit: false }
62
+ ];
63
+ await pool.changeAssets(newAssets);
64
+ const assetsAfter = await pool.getComposition();
65
+ if (assetsBefore.length < newAssets.length) {
66
+ expect(assetsAfter.length).toBeGreaterThan(assetsBefore.length);
67
+ } else {
68
+ expect(assetsAfter.length).toBeLessThanOrEqual(assetsBefore.length);
69
+ }
70
+ });
71
+
72
+ it("get available Manager Fee", async () => {
73
+ const result = await pool.getAvailableManagerFee();
74
+ expect(result).toBeInstanceOf(BigNumber);
75
+ });
76
+
77
+ it("mintManagerFee; should not revert", async () => {
78
+ const tx = await pool.mintManagerFee();
79
+ expect(tx).toHaveProperty("wait");
80
+ });
81
+
82
+ it("withdraw 0.1 pool token into Pool", async () => {
83
+ await provider.send("evm_increaseTime", [24 * 60 * 60]);
84
+ await provider.send("evm_mine", []);
85
+ await pool.withdraw((0.1 * 1e18).toString());
86
+ const poolTokenDelta = await balanceDelta(
87
+ pool.signer.address,
88
+ pool.address,
89
+ pool.signer
90
+ );
91
+ expect(poolTokenDelta.lt(0));
92
+ });
59
93
  });
94
+ };
95
+
96
+ testingHelper({
97
+ network: Network.POLYGON,
98
+ testingRun: testPool
60
99
  });
100
+
101
+ // testingHelper({
102
+ // network: Network.OPTIMISM,
103
+ // testingRun: testPool
104
+ // });
@@ -1,10 +1,11 @@
1
1
  import { ethers } from "ethers";
2
2
  import { Network } from "../../types";
3
- import { getWallet } from "../wallet";
3
+ import { getWalletData } from "../wallet";
4
4
 
5
5
  export type TestingRunParams = {
6
6
  network: Network;
7
7
  wallet: ethers.Wallet;
8
+ provider: ethers.providers.JsonRpcProvider;
8
9
  };
9
10
 
10
11
  type TestHelperParams = {
@@ -15,6 +16,27 @@ export const testingHelper = ({
15
16
  network,
16
17
  testingRun
17
18
  }: TestHelperParams): void => {
18
- const wallet = getWallet(network);
19
- testingRun({ network, wallet });
19
+ const { wallet, provider } = getWalletData(network);
20
+ testingRun({ network, wallet, provider });
21
+ };
22
+
23
+ export const beforeAfterReset = ({
24
+ beforeAll,
25
+ afterAll,
26
+ provider
27
+ }: {
28
+ beforeAll: jest.Lifecycle;
29
+ afterAll: jest.Lifecycle;
30
+ provider: ethers.providers.JsonRpcProvider;
31
+ }): void => {
32
+ let snapshot = "";
33
+ beforeAll(async () => {
34
+ snapshot = (await provider.send("evm_snapshot", [])) as string;
35
+ await provider.send("evm_mine", []);
36
+ });
37
+
38
+ afterAll(async () => {
39
+ await provider.send("evm_revert", [snapshot]);
40
+ await provider.send("evm_mine", []);
41
+ });
20
42
  };
@@ -1,61 +1,82 @@
1
1
  //import { ethers } from "ethers";
2
- import { Dhedge } from "..";
2
+ import { Dhedge, Pool } from "..";
3
3
  import { Network } from "../types";
4
+ import { CONTRACT_ADDRESS, TEST_POOL } from "./constants";
5
+ import {
6
+ TestingRunParams,
7
+ beforeAfterReset,
8
+ testingHelper
9
+ } from "./utils/testingHelper";
4
10
 
5
- import { wallet } from "./wallet";
6
-
7
- const myPool = "0xe3528a438b94e64669def9b875c381c46ef713bf";
11
+ // const myPool = "0xe3528a438b94e64669def9b875c381c46ef713bf";
8
12
 
9
13
  // const usdt = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F";
10
- const usdc = "0x2791bca1f2de4661ed88a30c99a7a9449aa84174";
11
- const weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
12
- const wbtc = "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6";
14
+
13
15
  // const lpUsdcWeth = "0x34965ba0ac2451A34a0471F04CCa3F990b8dea27";
14
16
 
15
- let dhedge: Dhedge;
17
+ const testUtils = ({ wallet, network, provider }: TestingRunParams) => {
18
+ let dhedge: Dhedge;
19
+ let pool: Pool;
20
+ const usdc = CONTRACT_ADDRESS[network].USDC;
21
+ const weth = CONTRACT_ADDRESS[network].WETH;
22
+ const wbtc = CONTRACT_ADDRESS[network].WBTC;
23
+ // const usdt = CONTRACT_ADDRESS[network].USDT;
16
24
 
17
- jest.setTimeout(100000);
25
+ jest.setTimeout(100000);
18
26
 
19
- describe("utils", () => {
20
- beforeAll(() => {
21
- dhedge = new Dhedge(wallet, Network.POLYGON);
22
- });
27
+ describe(`utils on ${network}`, () => {
28
+ beforeAll(async () => {
29
+ dhedge = new Dhedge(wallet, network);
30
+ pool = await dhedge.loadPool(TEST_POOL[network]);
31
+ });
32
+ beforeAfterReset({ beforeAll, afterAll, provider });
33
+
34
+ // it("gets lp ratio of the USDT/USDC pool", async () => {
35
+ // const result = await dhedge.utils.getLpReserves(Dapp.SUSHISWAP, usdc, usdt);
36
+ // expect(Number(result.assetA) / Number(result.assetB)).toBeGreaterThan(0.9);
37
+ // });
38
+
39
+ // it("gets pool id of sushi LP pool for USDC/WETH", async () => {
40
+ // const result = await dhedge.utils.getLpPoolId(Dapp.SUSHISWAP, lpUsdcWeth);
41
+ // expect(result).toBe(1);
42
+ // });
23
43
 
24
- // it("gets lp ratio of the USDT/USDC pool", async () => {
25
- // const result = await dhedge.utils.getLpReserves(Dapp.SUSHISWAP, usdc, usdt);
26
- // expect(Number(result.assetA) / Number(result.assetB)).toBeGreaterThan(0.9);
27
- // });
28
-
29
- // it("gets pool id of sushi LP pool for USDC/WETH", async () => {
30
- // const result = await dhedge.utils.getLpPoolId(Dapp.SUSHISWAP, lpUsdcWeth);
31
- // expect(result).toBe(1);
32
- // });
33
-
34
- // it("gets USDC balance of a pool", async () => {
35
- // const result = await dhedge.utils.getBalance(usdc, myPool);
36
- // expect(result.gt(0));
37
- // });
38
- // it("gets minumum amount out of WETH for 1 USDC", async () => {
39
- // const result = await dhedge.utils.getMinAmountOut(
40
- // Dapp.SUSHISWAP,
41
- // usdc,
42
- // weth,
43
- // "1000000",
44
- // 0.5
45
- // );
46
- // expect(result.gt(0));
47
- // });
48
-
49
- it("gets Balancer pool tx data", async () => {
50
- const pool = await dhedge.loadPool(myPool);
51
- const assets = [wbtc, usdc, weth];
52
- const amounts = ["0", "1000000", "0"];
53
- const result = await dhedge.utils.getBalancerJoinPoolTx(
54
- pool,
55
- "0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a",
56
- assets,
57
- amounts
58
- );
59
- expect(result);
44
+ // it("gets USDC balance of a pool", async () => {
45
+ // const result = await dhedge.utils.getBalance(usdc, myPool);
46
+ // expect(result.gt(0));
47
+ // });
48
+ // it("gets minumum amount out of WETH for 1 USDC", async () => {
49
+ // const result = await dhedge.utils.getMinAmountOut(
50
+ // Dapp.SUSHISWAP,
51
+ // usdc,
52
+ // weth,
53
+ // "1000000",
54
+ // 0.5
55
+ // );
56
+ // expect(result.gt(0));
57
+ // });
58
+
59
+ it("gets Balancer pool tx data", async () => {
60
+ // pool = await dhedge.loadPool(pool);
61
+ const assets = [wbtc, usdc, weth];
62
+ const amounts = ["0", "1000000", "0"];
63
+ const result = await dhedge.utils.getBalancerJoinPoolTx(
64
+ pool,
65
+ "0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a",
66
+ assets,
67
+ amounts
68
+ );
69
+ expect(result);
70
+ });
60
71
  });
72
+ };
73
+
74
+ testingHelper({
75
+ network: Network.POLYGON,
76
+ testingRun: testUtils
77
+ });
78
+
79
+ testingHelper({
80
+ network: Network.OPTIMISM,
81
+ testingRun: testUtils
61
82
  });
@@ -32,9 +32,17 @@ export const networkPortMap = {
32
32
  [Network.ARBITRUM]: 8540
33
33
  };
34
34
 
35
- export const getWallet = (network: Network): ethers.Wallet => {
35
+ export const getWalletData = (
36
+ network: Network
37
+ ): {
38
+ wallet: ethers.Wallet;
39
+ provider: ethers.providers.JsonRpcProvider;
40
+ } => {
36
41
  const provider = new ethers.providers.JsonRpcProvider(
37
42
  `http://127.0.0.1:${networkPortMap[network]}/`
38
43
  );
39
- return new ethers.Wallet(process.env.PRIVATE_KEY as string, provider);
44
+ return {
45
+ wallet: new ethers.Wallet(process.env.PRIVATE_KEY as string, provider),
46
+ provider
47
+ };
40
48
  };