@defisaver/sdk 0.1.11 → 0.1.15
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/ACTIONS.md +127 -4
- package/DEV.md +26 -4
- package/package.json +1 -1
- package/src/Action.js +7 -4
- package/src/Recipe.js +7 -4
- package/src/actions/curve/CurveClaimFeesAction.js +31 -0
- package/src/actions/curve/CurveDepositAction.js +50 -0
- package/src/actions/curve/CurveGaugeDepositAction.js +36 -0
- package/src/actions/curve/CurveGaugeWithdrawAction.js +28 -0
- package/src/actions/curve/CurveMintCrvAction.js +25 -0
- package/src/actions/curve/CurveSwapAction.js +39 -0
- package/src/actions/curve/CurveWithdrawAction.js +53 -0
- package/src/actions/curve/index.js +19 -0
- package/src/actions/index.js +2 -0
- package/src/actions/mstable/MStableClaimAction.js +2 -2
- package/src/actions/mstable/MStableDepositAction.js +29 -9
- package/src/actions/mstable/MStableWithdrawAction.js +29 -13
- package/src/addresses.js +7 -2
- package/src/types.js +11 -0
- package/src/utils/index.js +2 -0
- package/src/utils/mstableAssetPairs.js +8 -0
- package/test/accessLists/Recipe.js +9 -6
- package/test/accessLists/access-lists.js +15 -8
package/ACTIONS.md
CHANGED
|
@@ -71,6 +71,20 @@
|
|
|
71
71
|
<dt><a href="#CompoundWithdrawAction">CompoundWithdrawAction</a></dt>
|
|
72
72
|
<dd><p>CompoundWithdrawAction - Withdraw token from an Compound position</p>
|
|
73
73
|
</dd>
|
|
74
|
+
<dt><a href="#CurveClaimFeesAction">CurveClaimFeesAction</a></dt>
|
|
75
|
+
<dd></dd>
|
|
76
|
+
<dt><a href="#CurveDepositAction">CurveDepositAction</a></dt>
|
|
77
|
+
<dd></dd>
|
|
78
|
+
<dt><a href="#CurveGaugeDepositAction">CurveGaugeDepositAction</a></dt>
|
|
79
|
+
<dd></dd>
|
|
80
|
+
<dt><a href="#CurveGaugeWithdrawAction">CurveGaugeWithdrawAction</a></dt>
|
|
81
|
+
<dd></dd>
|
|
82
|
+
<dt><a href="#CurveMintCrvAction">CurveMintCrvAction</a></dt>
|
|
83
|
+
<dd></dd>
|
|
84
|
+
<dt><a href="#CurveSwapAction">CurveSwapAction</a></dt>
|
|
85
|
+
<dd></dd>
|
|
86
|
+
<dt><a href="#CurveWithdrawAction">CurveWithdrawAction</a></dt>
|
|
87
|
+
<dd></dd>
|
|
74
88
|
<dt><a href="#DyDxSupplyAction">DyDxSupplyAction</a></dt>
|
|
75
89
|
<dd><p>DyDxSupplyAction - Supply token to an DyDx position</p>
|
|
76
90
|
</dd>
|
|
@@ -580,6 +594,115 @@ CompoundWithdrawAction - Withdraw token from an Compound position
|
|
|
580
594
|
- amount <code>string</code> - Wei amount in underlying asset decimals (not cAsset) - ie. 18 dec for cETH, not 8
|
|
581
595
|
- to <code>EthAddress</code>
|
|
582
596
|
|
|
597
|
+
<a name="CurveClaimFeesAction"></a>
|
|
598
|
+
|
|
599
|
+
## CurveClaimFeesAction
|
|
600
|
+
**Kind**: global class
|
|
601
|
+
<a name="new_CurveClaimFeesAction_new"></a>
|
|
602
|
+
|
|
603
|
+
### new CurveClaimFeesAction(claimFor, receiver)
|
|
604
|
+
**Params**
|
|
605
|
+
|
|
606
|
+
- claimFor <code>EthAddress</code>
|
|
607
|
+
- receiver <code>EthAddress</code>
|
|
608
|
+
|
|
609
|
+
<a name="CurveDepositAction"></a>
|
|
610
|
+
|
|
611
|
+
## CurveDepositAction
|
|
612
|
+
**Kind**: global class
|
|
613
|
+
<a name="new_CurveDepositAction_new"></a>
|
|
614
|
+
|
|
615
|
+
### new CurveDepositAction(sender, receiver, depositTarget, lpToken, sig, minMintAmount, amounts, tokens, useUnderlying)
|
|
616
|
+
**Params**
|
|
617
|
+
|
|
618
|
+
- sender <code>EthAddress</code>
|
|
619
|
+
- receiver <code>EthAddress</code>
|
|
620
|
+
- depositTarget <code>EthAddress</code>
|
|
621
|
+
- lpToken <code>EthAddress</code>
|
|
622
|
+
- sig <code>bytes4</code>
|
|
623
|
+
- minMintAmount <code>string</code>
|
|
624
|
+
- amounts <code>Array.<string></code>
|
|
625
|
+
- tokens <code>Array.<EthAddress></code>
|
|
626
|
+
- useUnderlying <code>boolean</code>
|
|
627
|
+
|
|
628
|
+
<a name="CurveGaugeDepositAction"></a>
|
|
629
|
+
|
|
630
|
+
## CurveGaugeDepositAction
|
|
631
|
+
**Kind**: global class
|
|
632
|
+
<a name="new_CurveGaugeDepositAction_new"></a>
|
|
633
|
+
|
|
634
|
+
### new CurveGaugeDepositAction(gaugeAddr, lpToken, sender, onBehalfOf, amount)
|
|
635
|
+
**Params**
|
|
636
|
+
|
|
637
|
+
- gaugeAddr <code>EthAddress</code>
|
|
638
|
+
- lpToken <code>EthAddress</code>
|
|
639
|
+
- sender <code>EthAddress</code>
|
|
640
|
+
- onBehalfOf <code>EthAddress</code>
|
|
641
|
+
- amount <code>string</code>
|
|
642
|
+
|
|
643
|
+
<a name="CurveGaugeWithdrawAction"></a>
|
|
644
|
+
|
|
645
|
+
## CurveGaugeWithdrawAction
|
|
646
|
+
**Kind**: global class
|
|
647
|
+
<a name="new_CurveGaugeWithdrawAction_new"></a>
|
|
648
|
+
|
|
649
|
+
### new CurveGaugeWithdrawAction(gaugeAddr, lpToken, receiver, amount)
|
|
650
|
+
**Params**
|
|
651
|
+
|
|
652
|
+
- gaugeAddr <code>EthAddress</code>
|
|
653
|
+
- lpToken <code>EthAddress</code>
|
|
654
|
+
- receiver <code>EthAddress</code>
|
|
655
|
+
- amount <code>string</code>
|
|
656
|
+
|
|
657
|
+
<a name="CurveMintCrvAction"></a>
|
|
658
|
+
|
|
659
|
+
## CurveMintCrvAction
|
|
660
|
+
**Kind**: global class
|
|
661
|
+
<a name="new_CurveMintCrvAction_new"></a>
|
|
662
|
+
|
|
663
|
+
### new CurveMintCrvAction(gaugeAddrs, receiver)
|
|
664
|
+
**Params**
|
|
665
|
+
|
|
666
|
+
- gaugeAddrs <code>Array.<EthAddress></code>
|
|
667
|
+
- receiver <code>EthAddress</code>
|
|
668
|
+
|
|
669
|
+
<a name="CurveSwapAction"></a>
|
|
670
|
+
|
|
671
|
+
## CurveSwapAction
|
|
672
|
+
**Kind**: global class
|
|
673
|
+
<a name="new_CurveSwapAction_new"></a>
|
|
674
|
+
|
|
675
|
+
### new CurveSwapAction(sender, receiver, pool, tokenA, tokenB, amount, expected)
|
|
676
|
+
**Params**
|
|
677
|
+
|
|
678
|
+
- sender <code>EthAddress</code>
|
|
679
|
+
- receiver <code>EthAddress</code>
|
|
680
|
+
- pool <code>EthAddress</code>
|
|
681
|
+
- tokenA <code>EthAddress</code>
|
|
682
|
+
- tokenB <code>EthAddress</code>
|
|
683
|
+
- amount <code>string</code>
|
|
684
|
+
- expected <code>string</code>
|
|
685
|
+
|
|
686
|
+
<a name="CurveWithdrawAction"></a>
|
|
687
|
+
|
|
688
|
+
## CurveWithdrawAction
|
|
689
|
+
**Kind**: global class
|
|
690
|
+
<a name="new_CurveWithdrawAction_new"></a>
|
|
691
|
+
|
|
692
|
+
### new CurveWithdrawAction(sender, receiver, depositTarget, lpToken, sig, burnAmount, minAmounts, tokens, withdrawExact, useUnderlying)
|
|
693
|
+
**Params**
|
|
694
|
+
|
|
695
|
+
- sender <code>EthAddress</code>
|
|
696
|
+
- receiver <code>EthAddress</code>
|
|
697
|
+
- depositTarget <code>EthAddress</code>
|
|
698
|
+
- lpToken <code>EthAddress</code>
|
|
699
|
+
- sig <code>bytes4</code>
|
|
700
|
+
- burnAmount <code>string</code>
|
|
701
|
+
- minAmounts <code>Array.<string></code>
|
|
702
|
+
- tokens <code>Array.<EthAddress></code>
|
|
703
|
+
- withdrawExact <code>boolean</code>
|
|
704
|
+
- useUnderlying <code>boolean</code>
|
|
705
|
+
|
|
583
706
|
<a name="DyDxSupplyAction"></a>
|
|
584
707
|
|
|
585
708
|
## DyDxSupplyAction
|
|
@@ -1145,7 +1268,7 @@ MStableDepositAction
|
|
|
1145
1268
|
**Kind**: global class
|
|
1146
1269
|
<a name="new_MStableDepositAction_new"></a>
|
|
1147
1270
|
|
|
1148
|
-
### new MStableDepositAction(bAsset, mAsset, saveAddress, vaultAddress, from, to, amount, minOut,
|
|
1271
|
+
### new MStableDepositAction(bAsset, mAsset, saveAddress, vaultAddress, from, to, amount, minOut, assetPair)
|
|
1149
1272
|
**Params**
|
|
1150
1273
|
|
|
1151
1274
|
- bAsset
|
|
@@ -1156,7 +1279,7 @@ MStableDepositAction
|
|
|
1156
1279
|
- to
|
|
1157
1280
|
- amount
|
|
1158
1281
|
- minOut
|
|
1159
|
-
-
|
|
1282
|
+
- assetPair
|
|
1160
1283
|
|
|
1161
1284
|
<a name="MStableWithdrawAction"></a>
|
|
1162
1285
|
|
|
@@ -1166,7 +1289,7 @@ MStableWithdrawAction
|
|
|
1166
1289
|
**Kind**: global class
|
|
1167
1290
|
<a name="new_MStableWithdrawAction_new"></a>
|
|
1168
1291
|
|
|
1169
|
-
### new MStableWithdrawAction(bAsset, mAsset, saveAddress, vaultAddress, from, to, amount, minOut,
|
|
1292
|
+
### new MStableWithdrawAction(bAsset, mAsset, saveAddress, vaultAddress, from, to, amount, minOut, assetPair)
|
|
1170
1293
|
**Params**
|
|
1171
1294
|
|
|
1172
1295
|
- bAsset
|
|
@@ -1177,7 +1300,7 @@ MStableWithdrawAction
|
|
|
1177
1300
|
- to
|
|
1178
1301
|
- amount
|
|
1179
1302
|
- minOut
|
|
1180
|
-
-
|
|
1303
|
+
- assetPair
|
|
1181
1304
|
|
|
1182
1305
|
<a name="RariDepositAction"></a>
|
|
1183
1306
|
|
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.<AccessListItem></a></code></dt>
|
|
36
|
+
<dd></dd>
|
|
32
37
|
</dl>
|
|
33
38
|
|
|
34
39
|
<a name="utils.module_uniswapLP"></a>
|
|
@@ -159,7 +164,7 @@ Single action that can be executed directly, or combined into a set (ie. supply
|
|
|
159
164
|
* [.encodeForRecipe()](#Action+encodeForRecipe) ⇒ <code>Array.<string></code>
|
|
160
165
|
* [.getAssetsToApprove()](#Action+getAssetsToApprove) ⇒ <code>Promise.<Array.<{owner: string, asset: string}>></code>
|
|
161
166
|
* [.getEthValue()](#Action+getEthValue) ⇒ <code>Promise.<string></code>
|
|
162
|
-
* [.getAccessList()](#Action+getAccessList) ⇒ <code>
|
|
167
|
+
* [.getAccessList()](#Action+getAccessList) ⇒ [<code>AccessList</code>](#AccessList)
|
|
163
168
|
|
|
164
169
|
<a name="new_Action_new"></a>
|
|
165
170
|
|
|
@@ -200,7 +205,7 @@ ETH value to be sent with transaction
|
|
|
200
205
|
**Returns**: <code>Promise.<string></code> - ETH value in wei
|
|
201
206
|
<a name="Action+getAccessList"></a>
|
|
202
207
|
|
|
203
|
-
### action.getAccessList() ⇒ <code>
|
|
208
|
+
### action.getAccessList() ⇒ [<code>AccessList</code>](#AccessList)
|
|
204
209
|
Access list for single action
|
|
205
210
|
|
|
206
211
|
**Kind**: instance method of [<code>Action</code>](#Action)
|
|
@@ -218,7 +223,7 @@ Set of Actions to be performed sequentially in a single transaction
|
|
|
218
223
|
* [._validateParamMappings()](#Recipe+_validateParamMappings)
|
|
219
224
|
* [.getAssetsToApprove()](#Recipe+getAssetsToApprove) ⇒ <code>Promise.<Array.<{owner: string, asset: string}>></code>
|
|
220
225
|
* [.getEthValue()](#Recipe+getEthValue) ⇒ <code>Promise.<string></code>
|
|
221
|
-
* [.getAccessList()](#Recipe+getAccessList) ⇒ <code>
|
|
226
|
+
* [.getAccessList()](#Recipe+getAccessList) ⇒ [<code>AccessList</code>](#AccessList)
|
|
222
227
|
|
|
223
228
|
<a name="new_Recipe_new"></a>
|
|
224
229
|
|
|
@@ -265,7 +270,7 @@ ETH value to be sent with transaction
|
|
|
265
270
|
**Returns**: <code>Promise.<string></code> - ETH value in wei
|
|
266
271
|
<a name="Recipe+getAccessList"></a>
|
|
267
272
|
|
|
268
|
-
### recipe.getAccessList() ⇒ <code>
|
|
273
|
+
### recipe.getAccessList() ⇒ [<code>AccessList</code>](#AccessList)
|
|
269
274
|
Generates an access list for the recipe
|
|
270
275
|
|
|
271
276
|
**Kind**: instance method of [<code>Recipe</code>](#Recipe)
|
|
@@ -281,3 +286,20 @@ Ethereum address
|
|
|
281
286
|
Maker vault ID
|
|
282
287
|
|
|
283
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.<string></code> |
|
|
301
|
+
|
|
302
|
+
<a name="AccessList"></a>
|
|
303
|
+
|
|
304
|
+
## AccessList : [<code>Array.<AccessListItem></code>](#AccessListItem)
|
|
305
|
+
**Kind**: global typedef
|
package/package.json
CHANGED
package/src/Action.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const AbiCoder = require('web3-eth-abi');
|
|
2
|
-
const
|
|
2
|
+
const { keccak256, padLeft, toHex } = require('web3-utils');
|
|
3
3
|
|
|
4
4
|
const ActionAbi = require('./abis/Action.json');
|
|
5
5
|
|
|
@@ -32,7 +32,7 @@ class Action {
|
|
|
32
32
|
* @private
|
|
33
33
|
*/
|
|
34
34
|
_getId() {
|
|
35
|
-
return
|
|
35
|
+
return keccak256(this.name);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/**
|
|
@@ -137,13 +137,16 @@ class Action {
|
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
139
|
* Access list for single action
|
|
140
|
-
* @returns {
|
|
140
|
+
* @returns {AccessList}
|
|
141
141
|
*/
|
|
142
142
|
getAccessList() {
|
|
143
143
|
return [
|
|
144
144
|
[this.contractAddress, []],
|
|
145
145
|
...(AccessLists[this.name] || []),
|
|
146
|
-
]
|
|
146
|
+
].map(([address, storageKeys]) => ({
|
|
147
|
+
address: address,
|
|
148
|
+
storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)),
|
|
149
|
+
}));
|
|
147
150
|
}
|
|
148
151
|
}
|
|
149
152
|
|
package/src/Recipe.js
CHANGED
|
@@ -103,7 +103,7 @@ class Recipe {
|
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Generates an access list for the recipe
|
|
106
|
-
* @returns {
|
|
106
|
+
* @returns {AccessList}
|
|
107
107
|
*/
|
|
108
108
|
getAccessList() {
|
|
109
109
|
const addressMapping = {
|
|
@@ -112,11 +112,14 @@ class Recipe {
|
|
|
112
112
|
};
|
|
113
113
|
this.actions.forEach((action) => {
|
|
114
114
|
const accessList = action.getAccessList();
|
|
115
|
-
accessList.forEach((
|
|
116
|
-
addressMapping[address] = new Set([...
|
|
115
|
+
accessList.forEach(({ address, storageKeys }) => {
|
|
116
|
+
addressMapping[address] = new Set([...storageKeys, ...(addressMapping[address] || [])]);
|
|
117
117
|
})
|
|
118
118
|
});
|
|
119
|
-
return Object.keys(addressMapping).map((
|
|
119
|
+
return Object.keys(addressMapping).map((address) => ({
|
|
120
|
+
address,
|
|
121
|
+
storageKeys: [...addressMapping[address]],
|
|
122
|
+
}));
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const { getAssetInfo } = require('@defisaver/tokens');
|
|
2
|
+
const Action = require('../../Action');
|
|
3
|
+
const { requireAddress } = require('../../utils/general');
|
|
4
|
+
const { getAddr } = require('../../addresses');
|
|
5
|
+
|
|
6
|
+
class CurveClaimFeesAction extends Action {
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @param {EthAddress} claimFor
|
|
11
|
+
* @param {EthAddress} receiver
|
|
12
|
+
*/
|
|
13
|
+
constructor(
|
|
14
|
+
claimFor,
|
|
15
|
+
receiver,
|
|
16
|
+
) {
|
|
17
|
+
requireAddress(claimFor);
|
|
18
|
+
requireAddress(receiver);
|
|
19
|
+
super('CurveClaimFeesAction',
|
|
20
|
+
getAddr('CurveClaimFeesAction'),
|
|
21
|
+
[['address', 'address']],
|
|
22
|
+
[[...arguments]]);
|
|
23
|
+
|
|
24
|
+
this.mappableArgs = [
|
|
25
|
+
this.args[0][0],
|
|
26
|
+
this.args[0][1],
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = CurveClaimFeesAction;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const { getAssetInfo } = require('@defisaver/tokens');
|
|
2
|
+
const Action = require('../../Action');
|
|
3
|
+
const { requireAddress } = require('../../utils/general');
|
|
4
|
+
const { getAddr } = require('../../addresses');
|
|
5
|
+
|
|
6
|
+
class CurveDepositAction extends Action {
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {EthAddress} sender
|
|
10
|
+
* @param {EthAddress} receiver
|
|
11
|
+
* @param {EthAddress} depositTarget
|
|
12
|
+
* @param {EthAddress} lpToken
|
|
13
|
+
* @param {bytes4} sig
|
|
14
|
+
* @param {string} minMintAmount
|
|
15
|
+
* @param {Array<string>} amounts
|
|
16
|
+
* @param {Array<EthAddress>} tokens
|
|
17
|
+
* @param {boolean} useUnderlying
|
|
18
|
+
*/
|
|
19
|
+
constructor(
|
|
20
|
+
sender,
|
|
21
|
+
receiver,
|
|
22
|
+
depositTarget,
|
|
23
|
+
lpToken,
|
|
24
|
+
sig,
|
|
25
|
+
minMintAmount,
|
|
26
|
+
amounts = [],
|
|
27
|
+
tokens = [],
|
|
28
|
+
useUnderlying
|
|
29
|
+
) {
|
|
30
|
+
requireAddress(sender);
|
|
31
|
+
requireAddress(receiver);
|
|
32
|
+
super('CurveDeposit',
|
|
33
|
+
getAddr('CurveDeposit'),
|
|
34
|
+
[['address', 'address', 'address', 'address', 'bytes4', 'uint256', 'uint256[]', 'address[]', 'bool']],
|
|
35
|
+
[[...arguments]]);
|
|
36
|
+
|
|
37
|
+
this.mappableArgs = [
|
|
38
|
+
this.args[0][0],
|
|
39
|
+
this.args[0][1],
|
|
40
|
+
this.args[0][5],
|
|
41
|
+
...this.args[0][6],
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async getAssetsToApprove() {
|
|
46
|
+
return this.args[0][7].map(_asset => Object({ asset: _asset, owner: this.args[0][0] }));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = CurveDepositAction;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const Action = require('../../Action');
|
|
2
|
+
const { requireAddress } = require('../../utils/general');
|
|
3
|
+
const { getAddr } = require('../../addresses');
|
|
4
|
+
|
|
5
|
+
class CurveGaugeDepositAction extends Action {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @param {EthAddress} gaugeAddr
|
|
10
|
+
* @param {EthAddress} lpToken
|
|
11
|
+
* @param {EthAddress} sender
|
|
12
|
+
* @param {EthAddress} onBehalfOf
|
|
13
|
+
* @param {string} amount
|
|
14
|
+
*/
|
|
15
|
+
constructor(gaugeAddr, lpToken, sender, onBehalfOf, amount) {
|
|
16
|
+
requireAddress(sender);
|
|
17
|
+
requireAddress(onBehalfOf);
|
|
18
|
+
super('CurveGaugeDeposit',
|
|
19
|
+
getAddr('CurveGaugeDeposit'),
|
|
20
|
+
[['address', 'address', 'address', 'address', 'uint256']],
|
|
21
|
+
[[...arguments]],
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
this.mappableArgs = [
|
|
25
|
+
this.args[0][2],
|
|
26
|
+
this.args[0][3],
|
|
27
|
+
this.args[0][4],
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async getAssetsToApprove() {
|
|
32
|
+
return { asset: this.args[0][1], owner: this.args[0][2] };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = CurveGaugeDepositAction;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const Action = require('../../Action');
|
|
2
|
+
const { requireAddress } = require('../../utils/general');
|
|
3
|
+
const { getAddr } = require('../../addresses');
|
|
4
|
+
|
|
5
|
+
class CurveGaugeWithdrawAction extends Action {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {EthAddress} gaugeAddr
|
|
9
|
+
* @param {EthAddress} lpToken
|
|
10
|
+
* @param {EthAddress} receiver
|
|
11
|
+
* @param {string} amount
|
|
12
|
+
*/
|
|
13
|
+
constructor(gaugeAddr, lpToken, receiver, amount) {
|
|
14
|
+
requireAddress(receiver);
|
|
15
|
+
super('CurveGaugeWithdraw',
|
|
16
|
+
getAddr('CurveGaugeWithdraw'),
|
|
17
|
+
[['address', 'address', 'address', 'uint256']],
|
|
18
|
+
[[...arguments]],
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
this.mappableArgs = [
|
|
22
|
+
this.args[0][2],
|
|
23
|
+
this.args[0][3],
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = CurveGaugeWithdrawAction;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const Action = require('../../Action');
|
|
2
|
+
const { requireAddress } = require('../../utils/general');
|
|
3
|
+
const { getAddr } = require('../../addresses');
|
|
4
|
+
|
|
5
|
+
class CurveMintCrvAction extends Action {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {Array<EthAddress>} gaugeAddrs
|
|
9
|
+
* @param {EthAddress} receiver
|
|
10
|
+
*/
|
|
11
|
+
constructor(gaugeAddrs, receiver) {
|
|
12
|
+
requireAddress(receiver);
|
|
13
|
+
super('CurveMintCrv',
|
|
14
|
+
getAddr('CurveMintCrv'),
|
|
15
|
+
[['address[8]', 'address']],
|
|
16
|
+
[[...arguments]],
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
this.mappableArgs = [
|
|
20
|
+
this.args[0][8],
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = CurveMintCrvAction;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const { getAssetInfo } = require('@defisaver/tokens');
|
|
2
|
+
const Action = require('../../Action');
|
|
3
|
+
const { requireAddress } = require('../../utils/general');
|
|
4
|
+
const { getAddr } = require('../../addresses');
|
|
5
|
+
|
|
6
|
+
class CurveSwapAction extends Action {
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @param {EthAddress} sender
|
|
11
|
+
* @param {EthAddress} receiver
|
|
12
|
+
* @param {EthAddress} pool
|
|
13
|
+
* @param {EthAddress} tokenA
|
|
14
|
+
* @param {EthAddress} tokenB
|
|
15
|
+
* @param {string} amount
|
|
16
|
+
* @param {string} expected
|
|
17
|
+
*/
|
|
18
|
+
constructor(sender, receiver, pool, tokenA, tokenB, amount, expected) {
|
|
19
|
+
requireAddress(sender);
|
|
20
|
+
requireAddress(receiver);
|
|
21
|
+
super('CurveSwap',
|
|
22
|
+
getAddr('CurveSwap'),
|
|
23
|
+
[['address', 'address', 'address', 'address', 'address', 'uint256', 'uint256']],
|
|
24
|
+
[[...arguments]]);
|
|
25
|
+
|
|
26
|
+
this.mappableArgs = [
|
|
27
|
+
this.args[0][0],
|
|
28
|
+
this.args[0][1],
|
|
29
|
+
this.args[0][5],
|
|
30
|
+
this.args[0][6],
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async getAssetsToApprove() {
|
|
35
|
+
return [{ asset: this.args[0][3], owner: this.args[0][0] }];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = CurveSwapAction;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const { getAssetInfo } = require('@defisaver/tokens');
|
|
2
|
+
const Action = require('../../Action');
|
|
3
|
+
const { requireAddress } = require('../../utils/general');
|
|
4
|
+
const { getAddr } = require('../../addresses');
|
|
5
|
+
|
|
6
|
+
class CurveWithdrawAction extends Action {
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @param {EthAddress} sender
|
|
11
|
+
* @param {EthAddress} receiver
|
|
12
|
+
* @param {EthAddress} depositTarget
|
|
13
|
+
* @param {EthAddress} lpToken
|
|
14
|
+
* @param {bytes4} sig
|
|
15
|
+
* @param {string} burnAmount
|
|
16
|
+
* @param {Array<string>} minAmounts
|
|
17
|
+
* @param {Array<EthAddress>} tokens
|
|
18
|
+
* @param {boolean} withdrawExact
|
|
19
|
+
* @param {boolean} useUnderlying
|
|
20
|
+
*/
|
|
21
|
+
constructor(
|
|
22
|
+
sender,
|
|
23
|
+
receiver,
|
|
24
|
+
depositTarget,
|
|
25
|
+
lpToken,
|
|
26
|
+
sig,
|
|
27
|
+
burnAmount,
|
|
28
|
+
minAmounts = [],
|
|
29
|
+
tokens = [],
|
|
30
|
+
withdrawExact,
|
|
31
|
+
useUnderlying
|
|
32
|
+
) {
|
|
33
|
+
requireAddress(sender);
|
|
34
|
+
requireAddress(receiver);
|
|
35
|
+
super('CurveWithdrawAction',
|
|
36
|
+
getAddr('CurveWithdrawAction'),
|
|
37
|
+
[['address', 'address', 'address', 'address', 'bytes4', 'uint256', 'uint256[]', 'address[]', 'bool', 'bool']],
|
|
38
|
+
[[...arguments]]);
|
|
39
|
+
|
|
40
|
+
this.mappableArgs = [
|
|
41
|
+
this.args[0][0],
|
|
42
|
+
this.args[0][1],
|
|
43
|
+
this.args[0][5],
|
|
44
|
+
...this.args[0][6],
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async getAssetsToApprove() {
|
|
49
|
+
return { asset: this.args[0][3], owner: this.args[0][0] };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
module.exports = CurveWithdrawAction;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const CurveSwapAction = require('./CurveSwapAction');
|
|
2
|
+
const CurveDepositAction = require('./CurveDepositAction');
|
|
3
|
+
const CurveWithdrawAction = require('./CurveWithdrawAction');
|
|
4
|
+
|
|
5
|
+
const CurveGaugeDepositAction = require('./CurveGaugeDepositAction');
|
|
6
|
+
const CurveGaugeWithdrawAction = require('./CurveGaugeWithdrawAction');
|
|
7
|
+
const CurveMintCrvAction = require('./CurveMintCrvAction');
|
|
8
|
+
const CurveClaimFeesAction = require('./CurveClaimFeesAction');
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
CurveSwapAction,
|
|
12
|
+
CurveDepositAction,
|
|
13
|
+
CurveWithdrawAction,
|
|
14
|
+
|
|
15
|
+
CurveGaugeDepositAction,
|
|
16
|
+
CurveGaugeWithdrawAction,
|
|
17
|
+
CurveMintCrvAction,
|
|
18
|
+
CurveClaimFeesAction,
|
|
19
|
+
};
|
package/src/actions/index.js
CHANGED
|
@@ -12,6 +12,7 @@ const yearn = require('./yearn');
|
|
|
12
12
|
const lido = require('./lido');
|
|
13
13
|
const insta = require('./insta');
|
|
14
14
|
const balancer = require('./balancer');
|
|
15
|
+
const curve = require('./curve');
|
|
15
16
|
const guni = require('./guni');
|
|
16
17
|
const mstable = require('./mstable');
|
|
17
18
|
const rari = require('./rari');
|
|
@@ -31,6 +32,7 @@ module.exports = {
|
|
|
31
32
|
lido,
|
|
32
33
|
insta,
|
|
33
34
|
balancer,
|
|
35
|
+
curve,
|
|
34
36
|
guni,
|
|
35
37
|
mstable,
|
|
36
38
|
rari,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
const Action = require(
|
|
2
|
-
const {requireAddress} = require(
|
|
3
|
-
const { getAddr } = require('../../addresses
|
|
1
|
+
const Action = require('../../Action');
|
|
2
|
+
const { requireAddress } = require('../../utils/general');
|
|
3
|
+
const { getAddr } = require('../../addresses');
|
|
4
|
+
const mstableAssetPairs = require('../../utils/mstableAssetPairs');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* MStableDepositAction
|
|
@@ -15,7 +16,7 @@ class MStableDepositAction extends Action {
|
|
|
15
16
|
* @param to
|
|
16
17
|
* @param amount
|
|
17
18
|
* @param minOut
|
|
18
|
-
* @param
|
|
19
|
+
* @param assetPair
|
|
19
20
|
*/
|
|
20
21
|
constructor(
|
|
21
22
|
bAsset,
|
|
@@ -26,7 +27,7 @@ class MStableDepositAction extends Action {
|
|
|
26
27
|
to,
|
|
27
28
|
amount,
|
|
28
29
|
minOut,
|
|
29
|
-
|
|
30
|
+
assetPair,
|
|
30
31
|
) {
|
|
31
32
|
requireAddress(bAsset);
|
|
32
33
|
requireAddress(mAsset);
|
|
@@ -36,9 +37,9 @@ class MStableDepositAction extends Action {
|
|
|
36
37
|
requireAddress(to);
|
|
37
38
|
|
|
38
39
|
super(
|
|
39
|
-
'
|
|
40
|
-
getAddr('
|
|
41
|
-
[['address', 'address', 'address', 'address', 'address', 'address', 'uint256', 'uint256', '
|
|
40
|
+
'MStableDepositNew',
|
|
41
|
+
getAddr('MStableDepositNew'),
|
|
42
|
+
[['address', 'address', 'address', 'address', 'address', 'address', 'uint256', 'uint256', 'uint256']],
|
|
42
43
|
[[...arguments]],
|
|
43
44
|
);
|
|
44
45
|
|
|
@@ -56,7 +57,26 @@ class MStableDepositAction extends Action {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
async getAssetsToApprove() {
|
|
59
|
-
|
|
60
|
+
const assetPair = this.args[0][8];
|
|
61
|
+
const owner = this.args[0][4];
|
|
62
|
+
let asset;
|
|
63
|
+
switch (assetPair) {
|
|
64
|
+
case mstableAssetPairs.BASSET_MASSET:
|
|
65
|
+
case mstableAssetPairs.BASSET_IMASSET:
|
|
66
|
+
case mstableAssetPairs.BASSET_IMASSETVAULT:
|
|
67
|
+
asset = this.args[0][0];
|
|
68
|
+
break;
|
|
69
|
+
case mstableAssetPairs.MASSET_IMASSET:
|
|
70
|
+
case mstableAssetPairs.MASSET_IMASSETVAULT:
|
|
71
|
+
asset = this.args[0][1];
|
|
72
|
+
break;
|
|
73
|
+
case mstableAssetPairs.IMASSET_IMASSETVAULT:
|
|
74
|
+
asset = this.args[0][2];
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
return [{ asset, owner }];
|
|
60
80
|
}
|
|
61
81
|
}
|
|
62
82
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
const Action = require(
|
|
2
|
-
const {requireAddress} = require(
|
|
3
|
-
const { getAddr } = require('../../addresses
|
|
1
|
+
const Action = require('../../Action');
|
|
2
|
+
const { requireAddress } = require('../../utils/general');
|
|
3
|
+
const { getAddr } = require('../../addresses');
|
|
4
|
+
const mstableAssetPairs = require('../../utils/mstableAssetPairs');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* MStableWithdrawAction
|
|
@@ -15,7 +16,7 @@ class MStableWithdrawAction extends Action {
|
|
|
15
16
|
* @param to
|
|
16
17
|
* @param amount
|
|
17
18
|
* @param minOut
|
|
18
|
-
* @param
|
|
19
|
+
* @param assetPair
|
|
19
20
|
*/
|
|
20
21
|
constructor(
|
|
21
22
|
bAsset,
|
|
@@ -26,7 +27,7 @@ class MStableWithdrawAction extends Action {
|
|
|
26
27
|
to,
|
|
27
28
|
amount,
|
|
28
29
|
minOut,
|
|
29
|
-
|
|
30
|
+
assetPair,
|
|
30
31
|
) {
|
|
31
32
|
requireAddress(bAsset);
|
|
32
33
|
requireAddress(mAsset);
|
|
@@ -36,9 +37,9 @@ class MStableWithdrawAction extends Action {
|
|
|
36
37
|
requireAddress(to);
|
|
37
38
|
|
|
38
39
|
super(
|
|
39
|
-
'
|
|
40
|
-
getAddr('
|
|
41
|
-
[['address', 'address', 'address', 'address', 'address', 'address', 'uint256', 'uint256', '
|
|
40
|
+
'MStableWithdrawNew',
|
|
41
|
+
getAddr('MStableWithdrawNew'),
|
|
42
|
+
[['address', 'address', 'address', 'address', 'address', 'address', 'uint256', 'uint256', 'uint256']],
|
|
42
43
|
[[...arguments]],
|
|
43
44
|
);
|
|
44
45
|
|
|
@@ -56,11 +57,26 @@ class MStableWithdrawAction extends Action {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
async getAssetsToApprove() {
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
const assetPair = this.args[0][8];
|
|
61
|
+
const owner = this.args[0][4];
|
|
62
|
+
let asset;
|
|
63
|
+
switch (assetPair) {
|
|
64
|
+
case mstableAssetPairs.BASSET_IMASSETVAULT:
|
|
65
|
+
case mstableAssetPairs.MASSET_IMASSETVAULT:
|
|
66
|
+
case mstableAssetPairs.IMASSET_IMASSETVAULT:
|
|
67
|
+
return [];
|
|
68
|
+
case mstableAssetPairs.MASSET_IMASSET:
|
|
69
|
+
case mstableAssetPairs.BASSET_IMASSET:
|
|
70
|
+
asset = this.args[0][2];
|
|
71
|
+
break;
|
|
72
|
+
case mstableAssetPairs.BASSET_MASSET:
|
|
73
|
+
asset = this.args[0][1];
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
return [{ asset, owner }];
|
|
79
|
+
}
|
|
64
80
|
}
|
|
65
81
|
|
|
66
82
|
module.exports = MStableWithdrawAction;
|
package/src/addresses.js
CHANGED
|
@@ -6,7 +6,7 @@ const actionAddresses = {
|
|
|
6
6
|
|
|
7
7
|
// utils
|
|
8
8
|
'WrapEth': '0x9E702937F42Db2cE58342Ca5F213Ef33D51AEF6b',
|
|
9
|
-
'UnwrapEth': '
|
|
9
|
+
'UnwrapEth': '0x5cD02A169CfE5B0596B352547879Dd60B7033488',
|
|
10
10
|
'PullToken': '0x795a89f6D4E97A959fe81aa22772441323783479',
|
|
11
11
|
'SendToken': '0xBbe0D7f2AF01aE678f8A873CB2d2EB73871C9b5A',
|
|
12
12
|
'SumInputs': '0xCdef35425579fc566B6Ee0499A79256ac88d25cf',
|
|
@@ -77,7 +77,7 @@ const actionAddresses = {
|
|
|
77
77
|
|
|
78
78
|
// yearn
|
|
79
79
|
'YearnSupply': '0x3B8538B070a0890ef7E13FF60c9d19F893a93B8a',
|
|
80
|
-
'YearnWithdraw': '
|
|
80
|
+
'YearnWithdraw': '0x03CC90F24C23C9F766902917c32411417c28Db92',
|
|
81
81
|
|
|
82
82
|
// liquity
|
|
83
83
|
'LiquityClose': '0x9C563dc9F8e3FcCF996DAB4b6B6003fb7Bbca90f',
|
|
@@ -119,6 +119,10 @@ const actionAddresses = {
|
|
|
119
119
|
// mStable
|
|
120
120
|
'MStableDeposit': '0x1887235CFE1927782a3e7eD15fb073586c949858',
|
|
121
121
|
'MStableWithdraw': '0xb164456190577fbBe8FB8bF5Fa48a106b328A579',
|
|
122
|
+
|
|
123
|
+
'MStableDepositNew': '0x2AFfE3899d985212aD8ee99e1269D7Dd17576f1d',
|
|
124
|
+
'MStableWithdrawNew': '0x6468215Bf4811244Ab78599e1df9206716A35aB7',
|
|
125
|
+
|
|
122
126
|
'MStableClaim': '0x28279A806aDeDedFD33e39C7375dc0c0ee943847',
|
|
123
127
|
};
|
|
124
128
|
|
|
@@ -132,6 +136,7 @@ const otherAddresses = {
|
|
|
132
136
|
UniswapV3PositionManager : '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',
|
|
133
137
|
RaiWethUniV2LPToken : '0x8aE720a71622e824F576b4A8C03031066548A3B1',
|
|
134
138
|
BalancerToken : '0xba100000625a3754423978a60c9317c58a424e3D',
|
|
139
|
+
CrvToken: '0xD533a949740bb3306d119CC777fa900bA034cd52',
|
|
135
140
|
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
136
141
|
}
|
|
137
142
|
|
package/src/types.js
CHANGED
|
@@ -7,3 +7,14 @@
|
|
|
7
7
|
* Maker vault ID
|
|
8
8
|
* @typedef {(string|number)} VaultId
|
|
9
9
|
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Access list item
|
|
13
|
+
* @typedef {Object} AccessListItem
|
|
14
|
+
* @property {string} address
|
|
15
|
+
* @property {Array<string>} storageKeys
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {Array<AccessListItem>} AccessList
|
|
20
|
+
*/
|
package/src/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const AbiCoder = require('web3-eth-abi');
|
|
2
|
-
const { BN } = require('web3-utils');
|
|
2
|
+
const { BN, padLeft, toHex } = require('web3-utils');
|
|
3
3
|
const {getAssetInfo, utils: {compare}} = require("@defisaver/tokens");
|
|
4
4
|
const Action = require('../../src/Action');
|
|
5
5
|
const {getAddr} = require('../../src/addresses');
|
|
@@ -103,7 +103,7 @@ class Recipe {
|
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Generates an access list for the recipe
|
|
106
|
-
* @returns {
|
|
106
|
+
* @returns {AccessList}
|
|
107
107
|
*/
|
|
108
108
|
getAccessList() {
|
|
109
109
|
const addressMapping = {
|
|
@@ -111,12 +111,15 @@ class Recipe {
|
|
|
111
111
|
[getAddr('DFSRegistry')]: [],
|
|
112
112
|
};
|
|
113
113
|
this.actions.forEach((action) => {
|
|
114
|
-
const accessList = MockAccessLists[action.name];
|
|
115
|
-
accessList.forEach((
|
|
116
|
-
addressMapping[address] = new Set([...
|
|
114
|
+
const accessList = MockAccessLists[action.name].map(([address, storageKeys]) => ({ address, storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)) }));
|
|
115
|
+
accessList.forEach(({ address, storageKeys }) => {
|
|
116
|
+
addressMapping[address] = new Set([...storageKeys, ...(addressMapping[address] || [])]);
|
|
117
117
|
})
|
|
118
118
|
});
|
|
119
|
-
return Object.keys(addressMapping).map((
|
|
119
|
+
return Object.keys(addressMapping).map((address) => ({
|
|
120
|
+
address,
|
|
121
|
+
storageKeys: [...addressMapping[address]],
|
|
122
|
+
}));
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
|
|
@@ -2,18 +2,19 @@ const { assert } = require("chai");
|
|
|
2
2
|
const dfs = require("../../index.js");
|
|
3
3
|
const Recipe = require("./Recipe");
|
|
4
4
|
const MockAccessLists = require('./MockAccessLists');
|
|
5
|
+
const { padLeft, toHex } = require('web3-utils');
|
|
5
6
|
|
|
6
7
|
const testDuplicates = (accessList) => {
|
|
7
8
|
const contractAddrs = accessList.map((entry) => {
|
|
8
9
|
assert(
|
|
9
|
-
entry
|
|
10
|
+
entry.storageKeys.length === [...new Set(entry.storageKeys)].length,
|
|
10
11
|
'Duplicate storage address found',
|
|
11
12
|
);
|
|
12
|
-
return entry
|
|
13
|
+
return entry.address;
|
|
13
14
|
})
|
|
14
15
|
|
|
15
16
|
assert(
|
|
16
|
-
accessList.length
|
|
17
|
+
accessList.length === [...new Set(contractAddrs)].length,
|
|
17
18
|
'Duplicate contract address found',
|
|
18
19
|
);
|
|
19
20
|
|
|
@@ -22,15 +23,20 @@ const testDuplicates = (accessList) => {
|
|
|
22
23
|
|
|
23
24
|
const testInclusion = (recipe, accessList) => {
|
|
24
25
|
const actions = recipe.actions;
|
|
25
|
-
const addressMapping =
|
|
26
|
+
const addressMapping = accessList.reduce((list, current) => {
|
|
27
|
+
list[current.address] = current.storageKeys;
|
|
28
|
+
return list;
|
|
29
|
+
}, {});
|
|
26
30
|
actions.forEach((action) => {
|
|
27
|
-
MockAccessLists[action.name]
|
|
28
|
-
|
|
31
|
+
MockAccessLists[action.name]
|
|
32
|
+
.map(([address, storageKeys]) => ({ address, storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)) }))
|
|
33
|
+
.forEach((entry) => {
|
|
34
|
+
const storageAddrs = new Set(addressMapping[entry.address]);
|
|
29
35
|
assert(
|
|
30
36
|
storageAddrs,
|
|
31
37
|
'Access list missing a contract address',
|
|
32
38
|
);
|
|
33
|
-
entry
|
|
39
|
+
entry.storageKeys.forEach((addr) => {
|
|
34
40
|
assert(
|
|
35
41
|
storageAddrs.has(addr),
|
|
36
42
|
'Access list missing a storage address',
|
|
@@ -79,7 +85,8 @@ describe('Access-Lists', () => {
|
|
|
79
85
|
sampleRecipes.forEach((recipe) => {
|
|
80
86
|
it(`... should make an access list for recipe ${recipe.name}`, () => {
|
|
81
87
|
const recipeAccessList = recipe.getAccessList();
|
|
82
|
-
|
|
88
|
+
console.log(recipeAccessList);
|
|
89
|
+
testDuplicates(recipeAccessList);
|
|
83
90
|
testInclusion(recipe, recipeAccessList);
|
|
84
91
|
});
|
|
85
92
|
});
|