@dhedge/v2-sdk 1.9.7 → 1.9.9

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.
@@ -0,0 +1,164 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import BigNumber from "bignumber.js";
3
+ import { Dhedge, Pool } from "../entities";
4
+ import { AssetEnabled, Network } from "../types";
5
+ import {
6
+ TestingRunParams,
7
+ setTokenAmount,
8
+ testingHelper
9
+ } from "./utils/testingHelper";
10
+ import { Contract, ethers } from "ethers";
11
+ import { CONTRACT_ADDRESS, MAX_AMOUNT, TEST_POOL } from "./constants";
12
+ import { flatMoneyContractAddresses } from "../config";
13
+ import DelayedOrderAbi from "../abi/flatmoney/DelayedOrder.json";
14
+ import { allowanceDelta } from "./utils/token";
15
+ import { getKeeperFee } from "../services/flatmoney/keeperFee";
16
+
17
+ const RETH = "0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c";
18
+ const RETH_SLOT = 0;
19
+ const UNIT = "0xb95fB324b8A2fAF8ec4f76e3dF46C718402736e2";
20
+ // https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/master/contracts/token/ERC20/ERC20Upgradeable.sol#L31
21
+ // https://eips.ethereum.org/EIPS/eip-7201
22
+ const UNIT_SLOT =
23
+ "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00";
24
+
25
+ const testFlatMoney = ({
26
+ wallet,
27
+ network,
28
+ provider,
29
+ rpcUrl
30
+ }: TestingRunParams) => {
31
+ let dhedge: Dhedge;
32
+ let pool: Pool;
33
+ let delayOrderContract: Contract;
34
+ jest.setTimeout(200000);
35
+ describe(`flatmoney on ${network}`, () => {
36
+ beforeAll(async () => {
37
+ dhedge = new Dhedge(wallet, network);
38
+ pool = await dhedge.loadPool(TEST_POOL[network]);
39
+
40
+ const flatMoneyContracts = flatMoneyContractAddresses[pool.network];
41
+ if (!flatMoneyContracts) {
42
+ throw new Error("testFlatMoney: network not supported");
43
+ }
44
+ delayOrderContract = new Contract(
45
+ flatMoneyContracts.DelayedOrder,
46
+ DelayedOrderAbi,
47
+ pool.signer
48
+ );
49
+
50
+ // top up gas
51
+ await provider.send("hardhat_setBalance", [
52
+ wallet.address,
53
+ "0x10000000000000000"
54
+ ]);
55
+ await provider.send("evm_mine", []);
56
+
57
+ await setTokenAmount({
58
+ amount: new BigNumber(100).times(1e18).toString(),
59
+ provider,
60
+ tokenAddress: RETH,
61
+ slot: RETH_SLOT,
62
+ userAddress: pool.address
63
+ });
64
+ await setTokenAmount({
65
+ amount: new BigNumber(100).times(1e18).toString(),
66
+ provider,
67
+ tokenAddress: UNIT,
68
+ slot: UNIT_SLOT,
69
+ userAddress: pool.address
70
+ });
71
+
72
+ const currentAssets: any[] = await pool.managerLogic.getSupportedAssets();
73
+ const exisitingAssets = currentAssets.map(item => {
74
+ return {
75
+ asset: item[0],
76
+ isDeposit: item[1]
77
+ };
78
+ });
79
+
80
+ const newAssets: AssetEnabled[] = [
81
+ ...exisitingAssets,
82
+ { asset: CONTRACT_ADDRESS[network].USDC, isDeposit: true },
83
+ { asset: CONTRACT_ADDRESS[network].WETH, isDeposit: true },
84
+ {
85
+ asset: UNIT,
86
+ isDeposit: false
87
+ },
88
+ {
89
+ asset: RETH,
90
+ isDeposit: false
91
+ }
92
+ ];
93
+ await pool.changeAssets(newAssets);
94
+ });
95
+
96
+ it("mint UNIT", async () => {
97
+ //approve
98
+ await pool.approveSpender(delayOrderContract.address, RETH, MAX_AMOUNT);
99
+ const collateralAllowanceDelta = await allowanceDelta(
100
+ pool.address,
101
+ RETH,
102
+ delayOrderContract.address,
103
+ pool.signer
104
+ );
105
+ await expect(collateralAllowanceDelta.gt(0));
106
+
107
+ const depositAmountStr = new BigNumber(1).times(1e18).toString();
108
+ const tx = await pool.mintUnitViaFlatMoney(
109
+ depositAmountStr,
110
+ 0.5,
111
+ 10, // set higher to tolerate high gasPrice returned by forked local chain
112
+ null,
113
+ false
114
+ );
115
+ expect(tx).not.toBe(null);
116
+ const existingOrder = await delayOrderContract.getAnnouncedOrder(
117
+ pool.address
118
+ );
119
+ expect(existingOrder.orderType).toBe(1);
120
+ });
121
+
122
+ it("cancel order", async () => {
123
+ await provider.send("evm_increaseTime", [60 * 2]); // more than 1 min
124
+ await pool.cancelOrderViaFlatMoney();
125
+ const existingOrder = await delayOrderContract.getAnnouncedOrder(
126
+ pool.address
127
+ );
128
+ expect(existingOrder.orderType).toBe(0);
129
+ });
130
+
131
+ it("redeem UNIT", async () => {
132
+ const withdrawAmountStr = new BigNumber(2).times(1e18).toString();
133
+ const tx = await pool.redeemUnitViaFlatMoney(
134
+ withdrawAmountStr,
135
+ 0.5,
136
+ 10, // set higher to tolerate high gasPrice returned by forked local chain
137
+ null,
138
+ false
139
+ );
140
+ expect(tx).not.toBe(null);
141
+ const existingOrder = await delayOrderContract.getAnnouncedOrder(
142
+ pool.address
143
+ );
144
+ expect(existingOrder.orderType).toBe(2);
145
+
146
+ await provider.send("evm_increaseTime", [60 * 2]); // more than 1 min
147
+ await pool.cancelOrderViaFlatMoney();
148
+ });
149
+
150
+ it("keeperFee is small", async () => {
151
+ const provider = new ethers.providers.JsonRpcProvider(rpcUrl);
152
+ const walletOnChain = wallet.connect(provider);
153
+ const dhedge = new Dhedge(walletOnChain, network);
154
+ const pool = await dhedge.loadPool(TEST_POOL[network]);
155
+ const keeperFee = await getKeeperFee(pool, 3);
156
+ expect(keeperFee).toBeTruthy();
157
+ });
158
+ });
159
+ };
160
+
161
+ testingHelper({
162
+ network: Network.BASE,
163
+ testingRun: testFlatMoney
164
+ });
@@ -7,6 +7,7 @@ export type TestingRunParams = {
7
7
  network: Network;
8
8
  wallet: ethers.Wallet;
9
9
  provider: ethers.providers.JsonRpcProvider;
10
+ rpcUrl: string;
10
11
  };
11
12
 
12
13
  type TestHelperParams = {
@@ -17,8 +18,8 @@ export const testingHelper = ({
17
18
  network,
18
19
  testingRun
19
20
  }: TestHelperParams): void => {
20
- const { wallet, provider } = getWalletData(network);
21
- testingRun({ network, wallet, provider });
21
+ const { wallet, provider, rpcUrl } = getWalletData(network);
22
+ testingRun({ network, wallet, provider, rpcUrl });
22
23
  };
23
24
 
24
25
  export const beforeAfterReset = ({
@@ -52,7 +53,7 @@ export const setTokenAmount = async ({
52
53
  amount: string;
53
54
  userAddress: string;
54
55
  tokenAddress: string;
55
- slot: number;
56
+ slot: number | string;
56
57
  provider: ethers.providers.JsonRpcProvider;
57
58
  }): Promise<void> => {
58
59
  const toBytes32 = (bn: string) => {
@@ -38,12 +38,15 @@ export const getWalletData = (
38
38
  ): {
39
39
  wallet: ethers.Wallet;
40
40
  provider: ethers.providers.JsonRpcProvider;
41
+ rpcUrl: string;
41
42
  } => {
42
43
  const provider = new ethers.providers.JsonRpcProvider(
43
44
  `http://127.0.0.1:${networkPortMap[network]}/`
44
45
  );
46
+ const rpcUrl = process.env[`${network.toUpperCase()}_URL`] || "";
45
47
  return {
46
48
  wallet: new ethers.Wallet(process.env.PRIVATE_KEY as string, provider),
47
- provider
49
+ provider,
50
+ rpcUrl
48
51
  };
49
52
  };
package/src/types.ts CHANGED
@@ -23,7 +23,8 @@ export enum Dapp {
23
23
  VELODROMEV2 = "velodromeV2",
24
24
  LYRA = "lyra",
25
25
  ZEROEX = "0x",
26
- RAMSES = "ramses"
26
+ RAMSES = "ramses",
27
+ AERODROME = "aerodrome"
27
28
  }
28
29
 
29
30
  export enum Transaction {