@defisaver/sdk 0.1.8 → 0.1.12

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.
Files changed (44) hide show
  1. package/ACTIONS.md +236 -19
  2. package/AccessLists/AaveAccessLists.js +28 -0
  3. package/AccessLists/BalancerAccessLists.js +20 -0
  4. package/AccessLists/CompoundAccessLists.js +33 -0
  5. package/AccessLists/DyDxAccessLists.js +14 -0
  6. package/AccessLists/FlashLoanAccessLists.js +27 -0
  7. package/AccessLists/GuniAccessLists.js +15 -0
  8. package/AccessLists/InstaAccessLists.js +17 -0
  9. package/AccessLists/LidoAccessLists.js +21 -0
  10. package/AccessLists/LiquityAccessLists.js +81 -0
  11. package/AccessLists/MStableAccessLists.js +18 -0
  12. package/AccessLists/MakerAccessLists.js +44 -0
  13. package/AccessLists/RariAccessLists.js +12 -0
  14. package/AccessLists/ReflexerAccessLists.js +53 -0
  15. package/AccessLists/UniswapAccessLists.js +41 -0
  16. package/AccessLists/UtilsAccessLists.js +41 -0
  17. package/AccessLists/YearnAccessLists.js +14 -0
  18. package/AccessLists/index.js +41 -0
  19. package/DEV.md +36 -0
  20. package/package.json +1 -1
  21. package/src/Action.js +18 -2
  22. package/src/Recipe.js +22 -0
  23. package/src/actions/aave/index.js +0 -2
  24. package/src/actions/basic/AutomationV2Unsub.js +2 -2
  25. package/src/actions/flashloan/BalancerFlashLoanAction.js +2 -2
  26. package/src/actions/flashloan/BalancerFlashLoanPaybackAction.js +2 -2
  27. package/src/actions/flashloan/MakerFlashLoanPaybackAction.js +2 -2
  28. package/src/actions/guni/GUniDeposit.js +43 -0
  29. package/src/actions/guni/GUniWithdraw.js +32 -0
  30. package/src/actions/guni/index.js +6 -0
  31. package/src/actions/index.js +6 -0
  32. package/src/actions/mstable/MStableClaimAction.js +38 -0
  33. package/src/actions/mstable/MStableDepositAction.js +63 -0
  34. package/src/actions/mstable/MStableWithdrawAction.js +66 -0
  35. package/src/actions/mstable/index.js +9 -0
  36. package/src/actions/rari/RariDepositAction.js +31 -0
  37. package/src/actions/rari/RariWithdrawAction.js +33 -0
  38. package/src/actions/rari/index.js +6 -0
  39. package/src/addresses.js +16 -2
  40. package/src/types.js +11 -0
  41. package/test/accessLists/MockAccessLists.json +1482 -0
  42. package/test/accessLists/Recipe.js +126 -0
  43. package/test/accessLists/access-lists.js +108 -0
  44. package/src/actions/aave/AaveMigrateLendAction.js +0 -18
@@ -0,0 +1,53 @@
1
+ const ReflexerAccessLists = {
2
+ ReflexerOpen: [
3
+ ['0xEfe0B4cA532769a3AE758fD82E1426a03A94F185', []], // GebSafeManager
4
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
5
+ ],
6
+
7
+ ReflexerSupply: [
8
+ ['0xCC88a9d330da1133Df3A7bD823B95e52511A6962', []], // SAFEEngine
9
+ ['0xEfe0B4cA532769a3AE758fD82E1426a03A94F185', []], // GebSafeManager
10
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
11
+ ],
12
+
13
+ ReflexerWithdraw: [
14
+ ['0xEfe0B4cA532769a3AE758fD82E1426a03A94F185', []], // GebSafeManager
15
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
16
+ ],
17
+
18
+ ReflexerGenerate: [
19
+ ['0xCC88a9d330da1133Df3A7bD823B95e52511A6962', []], // SAFEEngine
20
+ ['0xEfe0B4cA532769a3AE758fD82E1426a03A94F185', []], // GebSafeManager
21
+ ['0x0A5653CCa4DB1B6E265F47CAf6969e64f1CFdC45', []], // CoinJoin
22
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
23
+ ],
24
+
25
+ ReflexerPayback: [
26
+ ['0xCC88a9d330da1133Df3A7bD823B95e52511A6962', []], // SAFEEngine
27
+ ['0xEfe0B4cA532769a3AE758fD82E1426a03A94F185', []], // GebSafeManager
28
+ ['0x0A5653CCa4DB1B6E265F47CAf6969e64f1CFdC45', []], // CoinJoin
29
+ ['0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919', []], // Rai
30
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
31
+ ],
32
+
33
+ ReflexerNativeUniV2SaviourDeposit: [
34
+ ['0xEfe0B4cA532769a3AE758fD82E1426a03A94F185', []], // GebSafeManager
35
+ ['0xA9402De5ce3F1E03Be28871b914F77A4dd5e4364', []], // NativeUnderlyingUniswapV2SafeSaviour
36
+ ['0x8aE720a71622e824F576b4A8C03031066548A3B1', []], // UNIV2_RAI_WETH_ADDRESS
37
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
38
+ ],
39
+
40
+ ReflexerNativeUniV2SaviourWithdraw: [
41
+ ['0xA9402De5ce3F1E03Be28871b914F77A4dd5e4364', []], // NativeUnderlyingUniswapV2SafeSaviour
42
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
43
+ ],
44
+
45
+ ReflexerNativeUniV2SaviourGetReserves: [
46
+ ['0xA9402De5ce3F1E03Be28871b914F77A4dd5e4364', []], // NativeUnderlyingUniswapV2SafeSaviour
47
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
48
+ ],
49
+ };
50
+
51
+ module.exports = {
52
+ ReflexerAccessLists,
53
+ };
@@ -0,0 +1,41 @@
1
+ const UniswapAccessLists = {
2
+ UniSupply: [
3
+ ['0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D', []], // UniV2Router02
4
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
5
+ ],
6
+
7
+ UniWithdraw: [
8
+ ['0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f', []], // UniV2Factory
9
+ ['0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D', []], // UniV2Router02
10
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
11
+ ],
12
+
13
+ UniMintV3: [
14
+ ['0xC36442b4a4522E871399CD717aBDD847Ab11FE88', []], // NonfungiblePositionManager
15
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
16
+ ],
17
+
18
+ UniSupplyV3: [
19
+ ['0xC36442b4a4522E871399CD717aBDD847Ab11FE88', []], // NonfungiblePositionManager
20
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
21
+ ],
22
+
23
+ UniWithdrawV3: [
24
+ ['0xC36442b4a4522E871399CD717aBDD847Ab11FE88', []], // NonfungiblePositionManager
25
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
26
+ ],
27
+
28
+ UniCollectV3: [
29
+ ['0xC36442b4a4522E871399CD717aBDD847Ab11FE88', []], // NonfungiblePositionManager
30
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
31
+ ],
32
+
33
+ UniCreatePoolV3: [
34
+ ['0xC36442b4a4522E871399CD717aBDD847Ab11FE88', []], // NonfungiblePositionManager
35
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
36
+ ],
37
+ };
38
+
39
+ module.exports = {
40
+ UniswapAccessLists,
41
+ };
@@ -0,0 +1,41 @@
1
+ const UtilsAccessLists = {
2
+ WrapEth: [
3
+ ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', []], // WETH
4
+ ],
5
+
6
+ UnwrapEth: [
7
+ ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', []], // WETH
8
+ ],
9
+
10
+ DFSSell: [
11
+ ['0x25dd3F51e0C3c3Ff164DDC02A8E4D65Bb9cBB12D', []], // SaverExchangeRegistry
12
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
13
+ ],
14
+
15
+ DFSBuy: [
16
+ ['0x25dd3F51e0C3c3Ff164DDC02A8E4D65Bb9cBB12D', []], // SaverExchangeRegistry
17
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
18
+ ],
19
+
20
+ SendToken: [],
21
+
22
+ PullToken: [],
23
+
24
+ SumInputs: [],
25
+
26
+ SubInputs: [],
27
+
28
+ ChangeProxyOwner: [
29
+ ['0xF8f8B3C98Cf2E63Df3041b73f80F362a4cf3A576', []], // DFSProxyRegistryController
30
+ ],
31
+
32
+ TokenBalance: [],
33
+
34
+ AutomationV2Unsub: [
35
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
36
+ ],
37
+ };
38
+
39
+ module.exports = {
40
+ UtilsAccessLists,
41
+ };
@@ -0,0 +1,14 @@
1
+ const YearnAccessLists = {
2
+ YearnSupply: [
3
+ ['0x50c1a2eA0a861A967D9d0FFE2AE4012c2E053804', []], // YearnV2Registry
4
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
5
+ ],
6
+
7
+ YearnWithdraw: [
8
+ ['0x5c55B921f590a89C1Ebe84dF170E655a82b62126', []], // DefisaverLogger
9
+ ],
10
+ };
11
+
12
+ module.exports = {
13
+ YearnAccessLists,
14
+ };
@@ -0,0 +1,41 @@
1
+ const { MakerAccessLists } = require('./MakerAccessLists');
2
+ const { AaveAccessLists } = require('./AaveAccessLists');
3
+ const { BalancerAccessLists } = require('./BalancerAccessLists');
4
+ const { CompoundAccessLists } = require('./CompoundAccessLists');
5
+ const { ReflexerAccessLists } = require('./ReflexerAccessLists');
6
+ const { YearnAccessLists } = require('./YearnAccessLists');
7
+ const { RariAccessLists } = require('./RariAccessLists');
8
+ const { MStableAccessLists } = require('./MStableAccessLists');
9
+ const { DyDxAccessLists } = require('./DyDxAccessLists');
10
+ const { LidoAccessLists } = require('./LidoAccessLists');
11
+ const { GuniAccessLists } = require('./GuniAccessLists');
12
+ const { UniswapAccessLists } = require('./UniswapAccessLists');
13
+ const { InstaAccessLists } = require('./InstaAccessLists');
14
+ const { LiquityAccessLists } = require('./LiquityAccessLists');
15
+
16
+ const { FlashLoanAccessLists } = require('./FlashLoanAccessLists');
17
+ const { UtilsAccessLists } = require('./UtilsAccessLists');
18
+
19
+ const AccessLists = {
20
+ ...MakerAccessLists,
21
+ ...AaveAccessLists,
22
+ ...BalancerAccessLists,
23
+ ...CompoundAccessLists,
24
+ ...ReflexerAccessLists,
25
+ ...YearnAccessLists,
26
+ ...RariAccessLists,
27
+ ...MStableAccessLists,
28
+ ...DyDxAccessLists,
29
+ ...LidoAccessLists,
30
+ ...GuniAccessLists,
31
+ ...UniswapAccessLists,
32
+ ...InstaAccessLists,
33
+ ...LiquityAccessLists,
34
+
35
+ ...FlashLoanAccessLists,
36
+ ...UtilsAccessLists,
37
+ };
38
+
39
+ module.exports = {
40
+ AccessLists,
41
+ };
package/DEV.md CHANGED
@@ -29,6 +29,11 @@
29
29
  <dt><a href="#VaultId">VaultId</a> : <code>string</code> | <code>number</code></dt>
30
30
  <dd><p>Maker vault ID</p>
31
31
  </dd>
32
+ <dt><a href="#AccessListItem">AccessListItem</a> : <code>Object</code></dt>
33
+ <dd><p>Access list item</p>
34
+ </dd>
35
+ <dt><a href="#AccessList">AccessList</a> : <code><a href="#AccessListItem">Array.&lt;AccessListItem&gt;</a></code></dt>
36
+ <dd></dd>
32
37
  </dl>
33
38
 
34
39
  <a name="utils.module_uniswapLP"></a>
@@ -159,6 +164,7 @@ Single action that can be executed directly, or combined into a set (ie. supply
159
164
  * [.encodeForRecipe()](#Action+encodeForRecipe) ⇒ <code>Array.&lt;string&gt;</code>
160
165
  * [.getAssetsToApprove()](#Action+getAssetsToApprove) ⇒ <code>Promise.&lt;Array.&lt;{owner: string, asset: string}&gt;&gt;</code>
161
166
  * [.getEthValue()](#Action+getEthValue) ⇒ <code>Promise.&lt;string&gt;</code>
167
+ * [.getAccessList()](#Action+getAccessList) ⇒ [<code>AccessList</code>](#AccessList)
162
168
 
163
169
  <a name="new_Action_new"></a>
164
170
 
@@ -197,6 +203,12 @@ ETH value to be sent with transaction
197
203
 
198
204
  **Kind**: instance method of [<code>Action</code>](#Action)
199
205
  **Returns**: <code>Promise.&lt;string&gt;</code> - ETH value in wei
206
+ <a name="Action+getAccessList"></a>
207
+
208
+ ### action.getAccessList() ⇒ [<code>AccessList</code>](#AccessList)
209
+ Access list for single action
210
+
211
+ **Kind**: instance method of [<code>Action</code>](#Action)
200
212
  <a name="Recipe"></a>
201
213
 
202
214
  ## Recipe
@@ -211,6 +223,7 @@ Set of Actions to be performed sequentially in a single transaction
211
223
  * [._validateParamMappings()](#Recipe+_validateParamMappings)
212
224
  * [.getAssetsToApprove()](#Recipe+getAssetsToApprove) ⇒ <code>Promise.&lt;Array.&lt;{owner: string, asset: string}&gt;&gt;</code>
213
225
  * [.getEthValue()](#Recipe+getEthValue) ⇒ <code>Promise.&lt;string&gt;</code>
226
+ * [.getAccessList()](#Recipe+getAccessList) ⇒ [<code>AccessList</code>](#AccessList)
214
227
 
215
228
  <a name="new_Recipe_new"></a>
216
229
 
@@ -255,6 +268,12 @@ ETH value to be sent with transaction
255
268
 
256
269
  **Kind**: instance method of [<code>Recipe</code>](#Recipe)
257
270
  **Returns**: <code>Promise.&lt;string&gt;</code> - ETH value in wei
271
+ <a name="Recipe+getAccessList"></a>
272
+
273
+ ### recipe.getAccessList() ⇒ [<code>AccessList</code>](#AccessList)
274
+ Generates an access list for the recipe
275
+
276
+ **Kind**: instance method of [<code>Recipe</code>](#Recipe)
258
277
  <a name="EthAddress"></a>
259
278
 
260
279
  ## EthAddress : <code>string</code>
@@ -267,3 +286,20 @@ Ethereum address
267
286
  Maker vault ID
268
287
 
269
288
  **Kind**: global typedef
289
+ <a name="AccessListItem"></a>
290
+
291
+ ## AccessListItem : <code>Object</code>
292
+ Access list item
293
+
294
+ **Kind**: global typedef
295
+ **Properties**
296
+
297
+ | Name | Type |
298
+ | --- | --- |
299
+ | address | <code>string</code> |
300
+ | storageKeys | <code>Array.&lt;string&gt;</code> |
301
+
302
+ <a name="AccessList"></a>
303
+
304
+ ## AccessList : [<code>Array.&lt;AccessListItem&gt;</code>](#AccessListItem)
305
+ **Kind**: global typedef
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/sdk",
3
- "version": "0.1.8",
3
+ "version": "0.1.12",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/Action.js CHANGED
@@ -1,8 +1,10 @@
1
1
  const AbiCoder = require('web3-eth-abi');
2
- const Web3Utils = require('web3-utils');
2
+ const { keccak256, padLeft, toHex } = require('web3-utils');
3
3
 
4
4
  const ActionAbi = require('./abis/Action.json');
5
5
 
6
+ const { AccessLists } = require('../AccessLists');
7
+
6
8
  /**
7
9
  * Single action that can be executed directly, or combined into a set (ie. supply a vault)
8
10
  */
@@ -30,7 +32,7 @@ class Action {
30
32
  * @private
31
33
  */
32
34
  _getId() {
33
- return Web3Utils.keccak256(this.name);
35
+ return keccak256(this.name);
34
36
  }
35
37
 
36
38
  /**
@@ -132,6 +134,20 @@ class Action {
132
134
  async getEthValue() {
133
135
  return '0';
134
136
  }
137
+
138
+ /**
139
+ * Access list for single action
140
+ * @returns {AccessList}
141
+ */
142
+ getAccessList() {
143
+ return [
144
+ [this.contractAddress, []],
145
+ ...(AccessLists[this.name] || []),
146
+ ].map(([address, storageKeys]) => ({
147
+ address: address,
148
+ storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)),
149
+ }));
150
+ }
135
151
  }
136
152
 
137
153
  module.exports = Action;
package/src/Recipe.js CHANGED
@@ -4,6 +4,7 @@ const {getAssetInfo, utils: {compare}} = require("@defisaver/tokens");
4
4
  const Action = require('./Action');
5
5
  const {getAddr} = require('./addresses');
6
6
  const RecipeAbi = require('./abis/Recipe.json');
7
+ const { AccessLists } = require('../AccessLists');
7
8
 
8
9
  /**
9
10
  * Set of Actions to be performed sequentially in a single transaction
@@ -99,6 +100,27 @@ class Recipe {
99
100
  .reduce((acc, val) => acc.add(new BN(val)), new BN(0))
100
101
  .toString();
101
102
  }
103
+
104
+ /**
105
+ * Generates an access list for the recipe
106
+ * @returns {AccessList}
107
+ */
108
+ getAccessList() {
109
+ const addressMapping = {
110
+ [getAddr('TaskExecutor')]: [],
111
+ [getAddr('DFSRegistry')]: [],
112
+ };
113
+ this.actions.forEach((action) => {
114
+ const accessList = action.getAccessList();
115
+ accessList.forEach(({ address, storageKeys }) => {
116
+ addressMapping[address] = new Set([...storageKeys, ...(addressMapping[address] || [])]);
117
+ })
118
+ });
119
+ return Object.keys(addressMapping).map((address) => ({
120
+ address,
121
+ storageKeys: [...addressMapping[address]],
122
+ }));
123
+ }
102
124
  }
103
125
 
104
126
  module.exports = Recipe;
@@ -2,7 +2,6 @@ const AaveBorrowAction = require('./AaveBorrowAction');
2
2
  const AaveSupplyAction = require('./AaveSupplyAction');
3
3
  const AavePaybackAction = require('./AavePaybackAction');
4
4
  const AaveWithdrawAction = require('./AaveWithdrawAction');
5
- const AaveMigrateLendAction = require('./AaveMigrateLendAction');
6
5
  const AaveClaimStkAaveAction = require('./AaveClaimStkAaveAction');
7
6
  const AaveCollateralSwitchAction = require('./AaveCollateralSwitchAction');
8
7
 
@@ -11,7 +10,6 @@ module.exports = {
11
10
  AaveSupplyAction,
12
11
  AavePaybackAction,
13
12
  AaveWithdrawAction,
14
- AaveMigrateLendAction,
15
13
  AaveClaimStkAaveAction,
16
14
  AaveCollateralSwitchAction
17
15
  };
@@ -1,5 +1,5 @@
1
- const Action = require("@defisaver/sdk/src/Action");
2
- const { getAddr } = require('@defisaver/sdk/src/addresses');
1
+ const Action = require("../../Action");
2
+ const {getAddr} = require("../../addresses.js");
3
3
 
4
4
  class AutomationV2Unsub extends Action {
5
5
  constructor(protocol, cdpId = 0) {
@@ -1,5 +1,5 @@
1
- const Action = require("@defisaver/sdk/src/Action");
2
- const { getAddr } = require('@defisaver/sdk/src/addresses');
1
+ const Action = require("../../Action");
2
+ const { getAddr } = require('../../addresses.js');
3
3
 
4
4
  /**
5
5
  * Gets a flashloan from Balancer
@@ -1,5 +1,5 @@
1
- const SendTokenAction = require("@defisaver/sdk/src/actions/basic/SendTokenAction");
2
- const { getAddr } = require('@defisaver/sdk/src/addresses');
1
+ const SendTokenAction = require("../basic/SendTokenAction");
2
+ const { getAddr } = require('../../addresses.js');
3
3
 
4
4
  /**
5
5
  * Pays back a flashloan from Balancer
@@ -1,5 +1,5 @@
1
- const SendTokenAction = require("@defisaver/sdk/src/actions/basic/SendTokenAction");
2
- const { getAddr } = require('@defisaver/sdk/src/addresses');
1
+ const SendTokenAction = require("../basic/SendTokenAction");
2
+ const { getAddr } = require('../../addresses.js');
3
3
 
4
4
  /**
5
5
  * Pays back a flashloan from Maker
@@ -0,0 +1,43 @@
1
+ const Action = require("../../Action");
2
+ const { getAssetInfo } = require("@defisaver/tokens");
3
+ const { getAddr } = require('../../addresses.js');
4
+
5
+ /**
6
+ * Action that adds liquidity to G-UNI pool of interest (mints G-UNI LP tokens)
7
+ */
8
+ class GUniDeposit extends Action {
9
+ /// @param pool address of G-UNI pool to add liquidity to
10
+ /// @param token0 address of token0
11
+ /// @param token1 address of token1
12
+ /// @param amount0Max the maximum amount of token0 msg.sender willing to input
13
+ /// @param amount1Max the maximum amount of token1 msg.sender willing to input
14
+ /// @param amount0Min the minimum amount of token0 actually input (slippage protection)
15
+ /// @param amount1Min the minimum amount of token1 actually input (slippage protection)
16
+ /// @param to account to receive minted G-UNI tokens
17
+ /// @param from account from which to pull underlying tokens from
18
+ constructor(pool, token0, token1, amount0Max, amount1max, amount0Min, amount1Min, to, from) {
19
+ super(
20
+ 'GUniDeposit',
21
+ getAddr('GUniDeposit'),
22
+ [['address', 'address', 'address', 'uint256', 'uint256', 'uint256', 'uint256', 'address', 'address']],
23
+ [[pool, token0, token1, amount0Max, amount1max, amount0Min, amount1Min, to, from]]
24
+ );
25
+ this.mappableArgs = [
26
+ this.args[0][3],
27
+ this.args[0][4],
28
+ this.args[0][5],
29
+ this.args[0][6],
30
+ ];
31
+ }
32
+
33
+ async getAssetsToApprove() {
34
+ const approveArr = [];
35
+
36
+ approveArr.push({asset: this.args[0][1], owner: this.args[0][8]});
37
+ approveArr.push({asset: this.args[0][2], owner: this.args[0][8]});
38
+
39
+ return approveArr;
40
+ }
41
+ }
42
+
43
+ module.exports = GUniDeposit;
@@ -0,0 +1,32 @@
1
+ const Action = require("../../Action");
2
+ const { getAssetInfo } = require("@defisaver/tokens");
3
+ const { getAddr } = require('../../addresses.js');
4
+
5
+ /**
6
+ * Action that removes liquidity from a G-UNI pool and burns G-UNI LP tokens
7
+ */
8
+ class GUniWithdraw extends Action {
9
+ /// @param pool address of G-UNI pool to remove liquidity from
10
+ /// @param burnAmount The number of G-UNI tokens to burn
11
+ /// @param amount0Min Minimum amount of token0 received after burn (slippage protection)
12
+ /// @param amount1Min Minimum amount of token1 received after burn (slippage protection)
13
+ /// @param to The account to receive the underlying amounts of token0 and token1
14
+ /// @param from Account from which to pull G-Uni LP tokens
15
+ constructor(pool, burnAmount, amount0Min, amount1Min, to, from) {
16
+ super(
17
+ 'GUniWithdraw',
18
+ getAddr('GUniWithdraw'),
19
+ [['address', 'uint256', 'uint256', 'uint256', 'address', 'address']],
20
+ [[pool, burnAmount, amount0Min, amount1Min, to, from]]
21
+ );
22
+ this.mappableArgs = [
23
+ this.args[0][1],
24
+ ];
25
+ }
26
+
27
+ async getAssetsToApprove() {
28
+ return [{asset: this.args[0][0], owner: this.args[0][5]}];
29
+ }
30
+ }
31
+
32
+ module.exports = GUniWithdraw;
@@ -0,0 +1,6 @@
1
+ const GUniDeposit = require('./GUniDeposit');
2
+ const GUniWithdraw = require('./GUniWithdraw.js');
3
+ module.exports = {
4
+ GUniDeposit,
5
+ GUniWithdraw,
6
+ }
@@ -12,6 +12,9 @@ const yearn = require('./yearn');
12
12
  const lido = require('./lido');
13
13
  const insta = require('./insta');
14
14
  const balancer = require('./balancer');
15
+ const guni = require('./guni');
16
+ const mstable = require('./mstable');
17
+ const rari = require('./rari');
15
18
 
16
19
  module.exports = {
17
20
  maker,
@@ -28,4 +31,7 @@ module.exports = {
28
31
  lido,
29
32
  insta,
30
33
  balancer,
34
+ guni,
35
+ mstable,
36
+ rari,
31
37
  };
@@ -0,0 +1,38 @@
1
+ const Action = require("../../Action");
2
+ const {requireAddress} = require("../../utils/general");
3
+ const { getAddr } = require('../../addresses.js');
4
+
5
+ /**
6
+ * MStableClaimAction
7
+ */
8
+ class MStableClaimAction extends Action {
9
+ /**
10
+ * @param vaultAddress
11
+ * @param to
12
+ * @param first
13
+ * @param last
14
+ */
15
+ constructor(
16
+ vaultAddress,
17
+ to,
18
+ first,
19
+ last,
20
+ ) {
21
+ requireAddress(vaultAddress);
22
+ requireAddress(to);
23
+
24
+ super(
25
+ 'MStableClaim',
26
+ getAddr('MStableClaim'),
27
+ [['address', 'address', 'uint256', 'uint256']],
28
+ [[...arguments]],
29
+ );
30
+
31
+ this.mappableArgs = [
32
+ this.args[0][0],
33
+ this.args[0][1],
34
+ ];
35
+ }
36
+ }
37
+
38
+ module.exports = MStableClaimAction;
@@ -0,0 +1,63 @@
1
+ const Action = require("../../Action");
2
+ const {requireAddress} = require("../../utils/general");
3
+ const { getAddr } = require('../../addresses.js');
4
+
5
+ /**
6
+ * MStableDepositAction
7
+ */
8
+ class MStableDepositAction extends Action {
9
+ /**
10
+ * @param bAsset
11
+ * @param mAsset
12
+ * @param saveAddress
13
+ * @param vaultAddress
14
+ * @param from
15
+ * @param to
16
+ * @param amount
17
+ * @param minOut
18
+ * @param stake
19
+ */
20
+ constructor(
21
+ bAsset,
22
+ mAsset,
23
+ saveAddress,
24
+ vaultAddress,
25
+ from,
26
+ to,
27
+ amount,
28
+ minOut,
29
+ stake,
30
+ ) {
31
+ requireAddress(bAsset);
32
+ requireAddress(mAsset);
33
+ requireAddress(saveAddress);
34
+ requireAddress(vaultAddress);
35
+ requireAddress(from);
36
+ requireAddress(to);
37
+
38
+ super(
39
+ 'MStableDeposit',
40
+ getAddr('MStableDeposit'),
41
+ [['address', 'address', 'address', 'address', 'address', 'address', 'uint256', 'uint256', 'bool']],
42
+ [[...arguments]],
43
+ );
44
+
45
+ this.mappableArgs = [
46
+ this.args[0][0],
47
+ this.args[0][1],
48
+ this.args[0][2],
49
+ this.args[0][3],
50
+ this.args[0][4],
51
+ this.args[0][5],
52
+ this.args[0][6],
53
+ this.args[0][7],
54
+ this.args[0][8],
55
+ ];
56
+ }
57
+
58
+ async getAssetsToApprove() {
59
+ return [{ asset: this.args[0][0], owner: this.args[0][4]}];
60
+ }
61
+ }
62
+
63
+ module.exports = MStableDepositAction;