@defisaver/sdk 0.1.11 → 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.
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,7 +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>
162
- * [.getAccessList()](#Action+getAccessList) ⇒ <code>Array.&lt;\*&gt;</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.&lt;string&gt;</code> - ETH value in wei
201
206
  <a name="Action+getAccessList"></a>
202
207
 
203
- ### action.getAccessList() ⇒ <code>Array.&lt;\*&gt;</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.&lt;Array.&lt;{owner: string, asset: string}&gt;&gt;</code>
220
225
  * [.getEthValue()](#Recipe+getEthValue) ⇒ <code>Promise.&lt;string&gt;</code>
221
- * [.getAccessList()](#Recipe+getAccessList) ⇒ <code>Array.&lt;\*&gt;</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.&lt;string&gt;</code> - ETH value in wei
266
271
  <a name="Recipe+getAccessList"></a>
267
272
 
268
- ### recipe.getAccessList() ⇒ <code>Array.&lt;\*&gt;</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.&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.11",
3
+ "version": "0.1.12",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/Action.js CHANGED
@@ -1,5 +1,5 @@
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
 
@@ -32,7 +32,7 @@ class Action {
32
32
  * @private
33
33
  */
34
34
  _getId() {
35
- return Web3Utils.keccak256(this.name);
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 {Array<*>}
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 {Array<*>}
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(([address, memoryLocations]) => {
116
- addressMapping[address] = new Set([...memoryLocations, ...(addressMapping[address] || [])]);
115
+ accessList.forEach(({ address, storageKeys }) => {
116
+ addressMapping[address] = new Set([...storageKeys, ...(addressMapping[address] || [])]);
117
117
  })
118
118
  });
119
- return Object.keys(addressMapping).map((addr) => [addr, [...addressMapping[addr]]]);
119
+ return Object.keys(addressMapping).map((address) => ({
120
+ address,
121
+ storageKeys: [...addressMapping[address]],
122
+ }));
120
123
  }
121
124
  }
122
125
 
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
+ */
@@ -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 {Array<*>}
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(([address, memoryLocations]) => {
116
- addressMapping[address] = new Set([...memoryLocations, ...(addressMapping[address] || [])]);
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((addr) => [addr, [...addressMapping[addr]]]);
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[1].length == [...new Set(entry[1])].length,
10
+ entry.storageKeys.length === [...new Set(entry.storageKeys)].length,
10
11
  'Duplicate storage address found',
11
12
  );
12
- return entry[0];
13
+ return entry.address;
13
14
  })
14
15
 
15
16
  assert(
16
- accessList.length == [...new Set(contractAddrs)].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 = Object.fromEntries(accessList);
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].forEach((entry) => {
28
- const storageAddrs = new Set(addressMapping[entry[0]]);
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[1].forEach((addr) => {
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
- testDuplicates(recipeAccessList);
88
+ console.log(recipeAccessList);
89
+ testDuplicates(recipeAccessList);
83
90
  testInclusion(recipe, recipeAccessList);
84
91
  });
85
92
  });