@defisaver/sdk 1.3.37 → 1.3.38
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/docs/DEV.md +37 -0
- package/esm/src/actions/flashloan/AaveV2FlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/AaveV2FlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/AaveV3FlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/AaveV3FlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/BalancerFlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/BalancerFlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/BalancerV3FlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/BalancerV3FlashLoanAction.js +7 -20
- package/esm/src/actions/flashloan/CurveUsdFlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/CurveUsdFlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/FLAction.d.ts +7 -5
- package/esm/src/actions/flashloan/FLAction.js +12 -20
- package/esm/src/actions/flashloan/FLSource.d.ts +18 -0
- package/esm/src/actions/flashloan/FLSource.js +42 -0
- package/esm/src/actions/flashloan/FlashLoanId.d.ts +2 -1
- package/esm/src/actions/flashloan/GhoFlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/GhoFlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/MakerFlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/MakerFlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/MorphoBlueFlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/MorphoBlueFlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/SparkFlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/SparkFlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/UniV3FlashLoanAction.d.ts +2 -4
- package/esm/src/actions/flashloan/UniV3FlashLoanAction.js +7 -4
- package/esm/src/actions/flashloan/index.d.ts +1 -14
- package/esm/src/actions/flashloan/index.js +1 -14
- package/esm/src/addresses.d.ts +1 -67
- package/esm/src/addresses.js +105 -87
- package/esm/src/index.d.ts +4 -268
- package/package.json +1 -1
- package/src/actions/flashloan/AaveV2FlashLoanAction.ts +7 -11
- package/src/actions/flashloan/AaveV3FlashLoanAction.ts +7 -11
- package/src/actions/flashloan/BalancerFlashLoanAction.ts +7 -11
- package/src/actions/flashloan/BalancerV3FlashLoanAction.ts +7 -27
- package/src/actions/flashloan/CurveUsdFlashLoanAction.ts +7 -11
- package/src/actions/flashloan/FLAction.ts +18 -21
- package/src/actions/flashloan/FLSource.ts +44 -0
- package/src/actions/flashloan/FlashLoanId.ts +3 -1
- package/src/actions/flashloan/GhoFlashLoanAction.ts +7 -11
- package/src/actions/flashloan/MakerFlashLoanAction.ts +7 -11
- package/src/actions/flashloan/MorphoBlueFlashLoanAction.ts +7 -11
- package/src/actions/flashloan/SparkFlashLoanAction.ts +7 -11
- package/src/actions/flashloan/UniV3FlashLoanAction.ts +7 -11
- package/src/actions/flashloan/index.ts +1 -14
- package/src/addresses.ts +127 -90
- package/test/accessLists/Recipe.js +1 -1
- package/test/accessLists/access-lists.js +1 -1
- package/test/actions/flashloan/FLAction.js +77 -0
- package/umd/index.js +1090 -1435
- package/esm/src/actions/flashloan/AaveV2FlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/AaveV2FlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/AaveV3FlashLoanNoFeeAction.d.ts +0 -18
- package/esm/src/actions/flashloan/AaveV3FlashLoanNoFeeAction.js +0 -20
- package/esm/src/actions/flashloan/AaveV3FlashLoanNoFeePaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/AaveV3FlashLoanNoFeePaybackAction.js +0 -16
- package/esm/src/actions/flashloan/AaveV3FlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/AaveV3FlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/BalancerFlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/BalancerFlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/DyDxFlashLoanAction.d.ts +0 -16
- package/esm/src/actions/flashloan/DyDxFlashLoanAction.js +0 -18
- package/esm/src/actions/flashloan/DyDxFlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/DyDxFlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/EulerFlashLoanAction.d.ts +0 -16
- package/esm/src/actions/flashloan/EulerFlashLoanAction.js +0 -18
- package/esm/src/actions/flashloan/EulerFlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/EulerFlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/GhoFlashLoanPaybackAction.d.ts +0 -13
- package/esm/src/actions/flashloan/GhoFlashLoanPaybackAction.js +0 -15
- package/esm/src/actions/flashloan/MakerFlashLoanPaybackAction.d.ts +0 -13
- package/esm/src/actions/flashloan/MakerFlashLoanPaybackAction.js +0 -15
- package/esm/src/actions/flashloan/MorphoBlueFlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/MorphoBlueFlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/SparkFlashLoanPaybackAction.d.ts +0 -14
- package/esm/src/actions/flashloan/SparkFlashLoanPaybackAction.js +0 -16
- package/esm/src/actions/flashloan/UniV3FlashLoanPaybackAction.d.ts +0 -16
- package/esm/src/actions/flashloan/UniV3FlashLoanPaybackAction.js +0 -18
- package/src/actions/flashloan/AaveV2FlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/AaveV3FlashLoanNoFeeAction.ts +0 -27
- package/src/actions/flashloan/AaveV3FlashLoanNoFeePaybackAction.ts +0 -18
- package/src/actions/flashloan/AaveV3FlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/BalancerFlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/DyDxFlashLoanAction.ts +0 -24
- package/src/actions/flashloan/DyDxFlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/EulerFlashLoanAction.ts +0 -25
- package/src/actions/flashloan/EulerFlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/GhoFlashLoanPaybackAction.ts +0 -17
- package/src/actions/flashloan/MakerFlashLoanPaybackAction.ts +0 -17
- package/src/actions/flashloan/MorphoBlueFlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/SparkFlashLoanPaybackAction.ts +0 -18
- package/src/actions/flashloan/UniV3FlashLoanPaybackAction.ts +0 -20
- package/test/actions/flashloan/DyDxFlashLoanAction.js +0 -84
|
@@ -109,7 +109,7 @@ class Recipe {
|
|
|
109
109
|
[dfs.getAddr('DFSRegistry')]: [],
|
|
110
110
|
};
|
|
111
111
|
this.actions.forEach((action) => {
|
|
112
|
-
const accessList = MockAccessLists[action.name].map(([address, storageKeys]) => ({ address, storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)) }));
|
|
112
|
+
const accessList = (action.name === 'FLAction' ? [[dfs.getAddr('FLAction'), []]] : MockAccessLists[action.name]).map(([address, storageKeys]) => ({ address, storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)) }));
|
|
113
113
|
accessList.forEach(({ address, storageKeys }) => {
|
|
114
114
|
addressMapping[address] = new Set([...storageKeys, ...(addressMapping[address] || [])]);
|
|
115
115
|
})
|
|
@@ -28,7 +28,7 @@ const testInclusion = (recipe, accessList) => {
|
|
|
28
28
|
return list;
|
|
29
29
|
}, {});
|
|
30
30
|
actions.forEach((action) => {
|
|
31
|
-
MockAccessLists[action.name]
|
|
31
|
+
(action.name === 'FLAction' ? [[dfs.getAddr('FLAction'), []]] : MockAccessLists[action.name])
|
|
32
32
|
.map(([address, storageKeys]) => ({ address, storageKeys: storageKeys.map(num => padLeft(toHex(num), 64)) }))
|
|
33
33
|
.forEach((entry) => {
|
|
34
34
|
const storageAddrs = new Set(addressMapping[entry.address]);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const { assert } = require('chai');
|
|
2
|
+
const AbiCoder = require('web3-eth-abi');
|
|
3
|
+
const dfs = require('../../../src');
|
|
4
|
+
|
|
5
|
+
const fl = dfs.actions.flashloan;
|
|
6
|
+
const { FLSource } = fl;
|
|
7
|
+
const { networks } = dfs;
|
|
8
|
+
const token = '0x0000000000000000000000000000000000000001';
|
|
9
|
+
const zero = '0x0000000000000000000000000000000000000000';
|
|
10
|
+
const allSources = Object.values(FLSource).filter(source => typeof source === 'number' && source !== FLSource.EMPTY);
|
|
11
|
+
const providers = new Map([
|
|
12
|
+
[FLSource.AAVEV2, () => new fl.AaveV2FlashLoanAction([token], ['1000'], ['0'], zero)],
|
|
13
|
+
[FLSource.BALANCER, () => new fl.BalancerFlashLoanAction([token], ['1000'])],
|
|
14
|
+
[FLSource.GHO, () => new fl.GhoFlashLoanAction('1000')],
|
|
15
|
+
[FLSource.MAKER, () => new fl.MakerFlashLoanAction('1000')],
|
|
16
|
+
[FLSource.AAVEV3, () => new fl.AaveV3FlashLoanAction([token], ['1000'], ['0'], zero)],
|
|
17
|
+
[FLSource.UNIV3, () => new fl.UniV3FlashLoanAction(token, token, token, '1000', '0')],
|
|
18
|
+
[FLSource.SPARK, () => new fl.SparkFlashLoanAction([token], ['1000'], ['0'], zero)],
|
|
19
|
+
[FLSource.MORPHO_BLUE, () => new fl.MorphoBlueFlashLoanAction(token, '1000')],
|
|
20
|
+
[FLSource.CURVEUSD, () => new fl.CurveUsdFlashLoanAction('1000')],
|
|
21
|
+
[FLSource.BALANCER_V3, () => new fl.BalancerV3FlashLoanAction([token], ['1000'])],
|
|
22
|
+
]);
|
|
23
|
+
const supported = new Map([
|
|
24
|
+
[networks.ethereum, allSources],
|
|
25
|
+
[networks.optimism, [FLSource.BALANCER, FLSource.AAVEV3, FLSource.UNIV3, FLSource.BALANCER_V3]],
|
|
26
|
+
[networks.arbitrum, [FLSource.BALANCER, FLSource.AAVEV3, FLSource.UNIV3, FLSource.MORPHO_BLUE, FLSource.BALANCER_V3]],
|
|
27
|
+
[networks.base, [FLSource.BALANCER, FLSource.AAVEV3, FLSource.UNIV3, FLSource.MORPHO_BLUE, FLSource.BALANCER_V3]],
|
|
28
|
+
[networks.linea, [FLSource.AAVEV3]],
|
|
29
|
+
[networks.plasma, [FLSource.AAVEV3, FLSource.BALANCER_V3]],
|
|
30
|
+
]);
|
|
31
|
+
|
|
32
|
+
describe('Unified flashloans', () => {
|
|
33
|
+
let previous;
|
|
34
|
+
beforeEach(() => { previous = { ...dfs.CONFIG }; });
|
|
35
|
+
afterEach(() => { dfs.configure(previous); });
|
|
36
|
+
|
|
37
|
+
it('covers every flashloan source and network', () => {
|
|
38
|
+
assert.sameMembers([...providers.keys()], allSources);
|
|
39
|
+
assert.sameMembers([...supported.keys()], Object.values(networks));
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
for (const [network, sources] of supported) {
|
|
43
|
+
it(`validates all sources and preserves wrapped encoding on ${network.chainName}`, () => {
|
|
44
|
+
dfs.configure({ chainId: network.chainId });
|
|
45
|
+
providers.forEach((create, source) => {
|
|
46
|
+
const context = `${FLSource[source]} on ${network.chainName}`;
|
|
47
|
+
assert.equal(fl.isFlashLoanSourceSupported(source), sources.includes(source), context);
|
|
48
|
+
if (!sources.includes(source)) {
|
|
49
|
+
assert.throws(create, 'is not supported by FLAction');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const action = create();
|
|
53
|
+
assert.instanceOf(action, fl.FLAction);
|
|
54
|
+
assert.equal(action.name, 'FLAction');
|
|
55
|
+
assert.equal(action.encodeForDsProxyCall()[0], dfs.actionAddresses().FLAction);
|
|
56
|
+
assert.deepEqual(new fl.FLAction(action).encodeForRecipe(), action.encodeForRecipe());
|
|
57
|
+
const decoded = AbiCoder.decodeParameter('(address[],uint256[],uint256[],address,address,bytes,bytes)', action.encodeForRecipe()[0]);
|
|
58
|
+
assert.equal(decoded[5], `0x${source.toString(16).padStart(2, '0')}`, context);
|
|
59
|
+
const [, recipient] = new fl.FLPaybackAction('$1', token).args;
|
|
60
|
+
assert.equal(recipient, dfs.actionAddresses().FLAction);
|
|
61
|
+
});
|
|
62
|
+
const carry = new fl.AaveV3FlashLoanCarryDebtAction([token], ['1000']);
|
|
63
|
+
assert.equal(carry.contractAddress, dfs.actionAddresses().FLAaveV3CarryDebt);
|
|
64
|
+
assert.notEqual(carry.contractAddress, dfs.actionAddresses().FLAction);
|
|
65
|
+
assert.deepEqual(Object.keys(dfs.actionAddresses()).filter(name => name.startsWith('FL')).sort(), ['FLAaveV3CarryDebt', 'FLAction']);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
it('rejects empty, unknown and missing sources', () => {
|
|
70
|
+
const unknownSource = Math.max(...allSources) + 1;
|
|
71
|
+
for (const source of [FLSource.EMPTY, unknownSource, -1, undefined, String(FLSource.AAVEV3)]) {
|
|
72
|
+
assert.throws(() => new fl.FLAction({ flashLoanId: source, args: [] }), 'is not supported by FLAction');
|
|
73
|
+
}
|
|
74
|
+
const unknownChainId = Math.max(...Object.values(networks).map(network => network.chainId)) + 1;
|
|
75
|
+
assert.isFalse(fl.isFlashLoanSourceSupported(FLSource.AAVEV3, unknownChainId));
|
|
76
|
+
});
|
|
77
|
+
});
|