@gearbox-protocol/sdk 14.10.4 → 14.10.5
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/dist/cjs/abi/iERC20Zapper.js +33 -0
- package/dist/cjs/abi/iETHZapper.js +30 -0
- package/dist/cjs/dev/AccountOpener.js +4 -5
- package/dist/cjs/sdk/market/ZapperRegister.js +5 -3
- package/dist/cjs/sdk/market/index.js +3 -1
- package/dist/cjs/sdk/market/pool/PoolV310Contract.js +20 -0
- package/dist/cjs/sdk/market/zapper/IERC20ZapperContract.js +98 -0
- package/dist/cjs/sdk/market/zapper/IETHZapperContract.js +89 -0
- package/dist/cjs/sdk/market/zapper/Zapper.js +47 -0
- package/dist/cjs/sdk/market/zapper/createZapper.js +45 -0
- package/dist/cjs/sdk/market/zapper/index.js +28 -0
- package/dist/cjs/sdk/pools/PoolService.js +58 -60
- package/dist/esm/abi/iERC20Zapper.js +9 -0
- package/dist/esm/abi/iETHZapper.js +6 -0
- package/dist/esm/dev/AccountOpener.js +4 -5
- package/dist/esm/sdk/market/ZapperRegister.js +5 -3
- package/dist/esm/sdk/market/index.js +1 -0
- package/dist/esm/sdk/market/pool/PoolV310Contract.js +20 -0
- package/dist/esm/sdk/market/zapper/IERC20ZapperContract.js +74 -0
- package/dist/esm/sdk/market/zapper/IETHZapperContract.js +65 -0
- package/dist/esm/sdk/market/zapper/Zapper.js +23 -0
- package/dist/esm/sdk/market/zapper/createZapper.js +21 -0
- package/dist/esm/sdk/market/zapper/index.js +4 -0
- package/dist/esm/sdk/pools/PoolService.js +62 -60
- package/dist/types/abi/iERC20Zapper.d.ts +313 -0
- package/dist/types/abi/iETHZapper.d.ts +153 -0
- package/dist/types/sdk/market/ZapperRegister.d.ts +4 -4
- package/dist/types/sdk/market/index.d.ts +1 -0
- package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +12 -2
- package/dist/types/sdk/market/pool/types.d.ts +11 -1
- package/dist/types/sdk/market/zapper/IERC20ZapperContract.d.ts +350 -0
- package/dist/types/sdk/market/zapper/IETHZapperContract.d.ts +186 -0
- package/dist/types/sdk/market/zapper/Zapper.d.ts +13 -0
- package/dist/types/sdk/market/zapper/createZapper.d.ts +6 -0
- package/dist/types/sdk/market/zapper/index.d.ts +4 -0
- package/dist/types/sdk/pools/PoolService.d.ts +3 -3
- package/dist/types/sdk/pools/types.d.ts +10 -5
- package/package.json +1 -1
|
@@ -5,9 +5,10 @@ import {
|
|
|
5
5
|
VERSION_RANGE_310
|
|
6
6
|
} from "../constants/index.js";
|
|
7
7
|
import { AddressMap, hexEq } from "../utils/index.js";
|
|
8
|
+
import { createZapper } from "./zapper/index.js";
|
|
8
9
|
class ZapperRegister extends SDKConstruct {
|
|
9
10
|
/**
|
|
10
|
-
* Mapping pool.address ->
|
|
11
|
+
* Mapping pool.address -> Zapper[]
|
|
11
12
|
* Needs to be loaded explicitly using loadZappers method
|
|
12
13
|
*/
|
|
13
14
|
#zappers;
|
|
@@ -55,16 +56,17 @@ class ZapperRegister extends SDKConstruct {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
#addZapper(z) {
|
|
59
|
+
const zapper = createZapper(this.sdk, z);
|
|
58
60
|
const existing = this.zappers.get(z.pool);
|
|
59
61
|
if (existing) {
|
|
60
62
|
const hasZapper = existing.some(
|
|
61
63
|
(zz) => hexEq(zz.baseParams.addr, z.baseParams.addr)
|
|
62
64
|
);
|
|
63
65
|
if (!hasZapper) {
|
|
64
|
-
existing.push(
|
|
66
|
+
existing.push(zapper);
|
|
65
67
|
}
|
|
66
68
|
} else {
|
|
67
|
-
this.zappers.upsert(z.pool, [
|
|
69
|
+
this.zappers.upsert(z.pool, [zapper]);
|
|
68
70
|
}
|
|
69
71
|
const zappersTokens = [z.tokenIn, z.tokenOut];
|
|
70
72
|
for (const t of zappersTokens) {
|
|
@@ -109,6 +109,26 @@ class PoolV310Contract extends BaseContract {
|
|
|
109
109
|
break;
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Deposits underlying assets into the pool on behalf of a user with a
|
|
114
|
+
* referral code.
|
|
115
|
+
*/
|
|
116
|
+
depositWithReferral(amount, onBehalfOf, referralCode) {
|
|
117
|
+
return this.createRawTx({
|
|
118
|
+
functionName: "depositWithReferral",
|
|
119
|
+
args: [amount, onBehalfOf, referralCode]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Redeems pool shares from the owner and sends the underlying assets to
|
|
124
|
+
* the receiver.
|
|
125
|
+
*/
|
|
126
|
+
redeem(amount, owner, receiver) {
|
|
127
|
+
return this.createRawTx({
|
|
128
|
+
functionName: "redeem",
|
|
129
|
+
args: [amount, owner, receiver]
|
|
130
|
+
});
|
|
131
|
+
}
|
|
112
132
|
stringifyFunctionParams(params) {
|
|
113
133
|
switch (params.functionName) {
|
|
114
134
|
case "deposit": {
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ierc20ZapperAbi } from "../../../abi/iERC20Zapper.js";
|
|
2
|
+
import { BaseContract } from "../../base/index.js";
|
|
3
|
+
const abi = ierc20ZapperAbi;
|
|
4
|
+
class IERC20ZapperContract extends BaseContract {
|
|
5
|
+
pool;
|
|
6
|
+
type;
|
|
7
|
+
baseParams;
|
|
8
|
+
tokenIn;
|
|
9
|
+
tokenOut;
|
|
10
|
+
constructor(sdk, data) {
|
|
11
|
+
super(sdk, {
|
|
12
|
+
addr: data.baseParams.addr,
|
|
13
|
+
abi,
|
|
14
|
+
name: `ERC20Zapper(${sdk.labelAddress(data.baseParams.addr)})`,
|
|
15
|
+
version: data.baseParams.version,
|
|
16
|
+
contractType: data.baseParams.contractType
|
|
17
|
+
});
|
|
18
|
+
this.pool = data.pool;
|
|
19
|
+
this.type = data.type;
|
|
20
|
+
this.baseParams = data.baseParams;
|
|
21
|
+
this.tokenIn = data.tokenIn;
|
|
22
|
+
this.tokenOut = data.tokenOut;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Deposits ERC20 tokens into the pool via this zapper.
|
|
26
|
+
*/
|
|
27
|
+
deposit(tokenInAmount, receiver) {
|
|
28
|
+
return this.createRawTx({
|
|
29
|
+
functionName: "deposit",
|
|
30
|
+
args: [tokenInAmount, receiver]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Deposits ERC20 tokens into the pool via this zapper using a referral code.
|
|
35
|
+
*/
|
|
36
|
+
depositWithReferral(tokenInAmount, receiver, referralCode) {
|
|
37
|
+
return this.createRawTx({
|
|
38
|
+
functionName: "depositWithReferral",
|
|
39
|
+
args: [tokenInAmount, receiver, referralCode]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Deposits ERC20 tokens via this zapper with a referral code and an
|
|
44
|
+
* EIP-2612 permit signature, skipping a separate approve transaction.
|
|
45
|
+
*/
|
|
46
|
+
depositWithReferralAndPermit(tokenInAmount, receiver, referralCode, deadline, v, r, s) {
|
|
47
|
+
return this.createRawTx({
|
|
48
|
+
functionName: "depositWithReferralAndPermit",
|
|
49
|
+
args: [tokenInAmount, receiver, referralCode, deadline, v, r, s]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
|
|
54
|
+
*/
|
|
55
|
+
redeem(tokenInAmount, receiver) {
|
|
56
|
+
return this.createRawTx({
|
|
57
|
+
functionName: "redeem",
|
|
58
|
+
args: [tokenInAmount, receiver]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Redeems pool shares via this zapper with an EIP-2612 permit signature,
|
|
63
|
+
* skipping a separate approve transaction.
|
|
64
|
+
*/
|
|
65
|
+
redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
|
|
66
|
+
return this.createRawTx({
|
|
67
|
+
functionName: "redeemWithPermit",
|
|
68
|
+
args: [tokenInAmount, receiver, deadline, v, r, s]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
IERC20ZapperContract
|
|
74
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { iethZapperAbi } from "../../../abi/iETHZapper.js";
|
|
2
|
+
import { BaseContract } from "../../base/index.js";
|
|
3
|
+
const abi = iethZapperAbi;
|
|
4
|
+
class IETHZapperContract extends BaseContract {
|
|
5
|
+
pool;
|
|
6
|
+
type;
|
|
7
|
+
baseParams;
|
|
8
|
+
tokenIn;
|
|
9
|
+
tokenOut;
|
|
10
|
+
constructor(sdk, data) {
|
|
11
|
+
super(sdk, {
|
|
12
|
+
addr: data.baseParams.addr,
|
|
13
|
+
abi,
|
|
14
|
+
name: `ETHZapper(${sdk.labelAddress(data.baseParams.addr)})`,
|
|
15
|
+
version: data.baseParams.version,
|
|
16
|
+
contractType: data.baseParams.contractType
|
|
17
|
+
});
|
|
18
|
+
this.pool = data.pool;
|
|
19
|
+
this.type = data.type;
|
|
20
|
+
this.baseParams = data.baseParams;
|
|
21
|
+
this.tokenIn = data.tokenIn;
|
|
22
|
+
this.tokenOut = data.tokenOut;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Deposits native ETH into the pool via this zapper.
|
|
26
|
+
*/
|
|
27
|
+
deposit(receiver) {
|
|
28
|
+
return this.createRawTx({
|
|
29
|
+
functionName: "deposit",
|
|
30
|
+
args: [receiver]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Deposits native ETH into the pool via this zapper using a referral code.
|
|
35
|
+
* The caller must attach the deposit amount as msg.value.
|
|
36
|
+
*/
|
|
37
|
+
depositWithReferral(receiver, referralCode) {
|
|
38
|
+
return this.createRawTx({
|
|
39
|
+
functionName: "depositWithReferral",
|
|
40
|
+
args: [receiver, referralCode]
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
|
|
45
|
+
*/
|
|
46
|
+
redeem(tokenInAmount, receiver) {
|
|
47
|
+
return this.createRawTx({
|
|
48
|
+
functionName: "redeem",
|
|
49
|
+
args: [tokenInAmount, receiver]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Redeems pool shares via this zapper with an EIP-2612 permit signature,
|
|
54
|
+
* skipping a separate approve transaction.
|
|
55
|
+
*/
|
|
56
|
+
redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
|
|
57
|
+
return this.createRawTx({
|
|
58
|
+
functionName: "redeemWithPermit",
|
|
59
|
+
args: [tokenInAmount, receiver, deadline, v, r, s]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
IETHZapperContract
|
|
65
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { bytes32ToString } from "../../utils/index.js";
|
|
2
|
+
class Zapper {
|
|
3
|
+
pool;
|
|
4
|
+
type;
|
|
5
|
+
baseParams;
|
|
6
|
+
tokenIn;
|
|
7
|
+
tokenOut;
|
|
8
|
+
contractType;
|
|
9
|
+
constructor(data) {
|
|
10
|
+
this.pool = data.pool;
|
|
11
|
+
this.type = data.type;
|
|
12
|
+
this.baseParams = data.baseParams;
|
|
13
|
+
this.tokenIn = data.tokenIn;
|
|
14
|
+
this.tokenOut = data.tokenOut;
|
|
15
|
+
this.contractType = Zapper.contractType(data.baseParams);
|
|
16
|
+
}
|
|
17
|
+
static contractType(baseParams) {
|
|
18
|
+
return bytes32ToString(baseParams.contractType);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
Zapper
|
|
23
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IERC20ZapperContract } from "./IERC20ZapperContract.js";
|
|
2
|
+
import { IETHZapperContract } from "./IETHZapperContract.js";
|
|
3
|
+
import { Zapper } from "./Zapper.js";
|
|
4
|
+
function createZapper(sdk, data) {
|
|
5
|
+
if (data.type === "base") {
|
|
6
|
+
const contractType = Zapper.contractType(data.baseParams);
|
|
7
|
+
switch (contractType) {
|
|
8
|
+
case "ZAPPER::ERC4626_UNDERLYING":
|
|
9
|
+
return new IERC20ZapperContract(sdk, data);
|
|
10
|
+
case "ZAPPER::WETH_DEPOSIT":
|
|
11
|
+
return new IETHZapperContract(sdk, data);
|
|
12
|
+
default:
|
|
13
|
+
sdk.logger?.warn(`Unknown zapper contract type: ${contractType}`);
|
|
14
|
+
return new Zapper(data);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return new Zapper(data);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
createZapper
|
|
21
|
+
};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { iPoolV310Abi } from "../../abi/310/generated.js";
|
|
2
1
|
import { ierc20Abi } from "../../abi/iERC20.js";
|
|
3
|
-
import { ierc20ZapperDepositsAbi } from "../../abi/iERC20ZapperDeposits.js";
|
|
4
|
-
import { iethZapperDepositsAbi } from "../../abi/iETHZapperDeposits.js";
|
|
5
|
-
import { iZapperAbi } from "../../abi/iZapper.js";
|
|
6
2
|
import {
|
|
3
|
+
BaseContract,
|
|
7
4
|
RWA_UNDERLYING_DEFAULT,
|
|
8
5
|
RWA_UNDERLYING_ON_DEMAND,
|
|
9
6
|
SDKConstruct
|
|
10
7
|
} from "../base/index.js";
|
|
11
8
|
import { NATIVE_ADDRESS } from "../constants/index.js";
|
|
9
|
+
import {
|
|
10
|
+
IERC20ZapperContract,
|
|
11
|
+
IETHZapperContract
|
|
12
|
+
} from "../market/index.js";
|
|
12
13
|
import { AddressSet, hexEq } from "../utils/index.js";
|
|
13
14
|
class PoolService extends SDKConstruct {
|
|
14
15
|
/**
|
|
@@ -80,42 +81,42 @@ class PoolService extends SDKConstruct {
|
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
const { zapper } = meta;
|
|
83
|
-
if (zapper
|
|
84
|
+
if (zapper instanceof IETHZapperContract) {
|
|
85
|
+
const tx2 = zapper.depositWithReferral(wallet, referralCode ?? 0n);
|
|
86
|
+
tx2.value = collateral.balance.toString();
|
|
84
87
|
return {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
functionName: "depositWithReferral",
|
|
88
|
-
args: [wallet, referralCode],
|
|
89
|
-
value: collateral.balance
|
|
90
|
-
};
|
|
91
|
-
} else if (zapper) {
|
|
92
|
-
return permit ? {
|
|
93
|
-
target: zapper.baseParams.addr,
|
|
94
|
-
abi: ierc20ZapperDepositsAbi,
|
|
95
|
-
functionName: "depositWithReferralAndPermit",
|
|
96
|
-
args: [
|
|
97
|
-
collateral.balance,
|
|
98
|
-
wallet,
|
|
99
|
-
referralCode,
|
|
100
|
-
permit.deadline,
|
|
101
|
-
permit.v,
|
|
102
|
-
permit.r,
|
|
103
|
-
permit.s
|
|
104
|
-
]
|
|
105
|
-
} : {
|
|
106
|
-
target: zapper.baseParams.addr,
|
|
107
|
-
abi: ierc20ZapperDepositsAbi,
|
|
108
|
-
functionName: "depositWithReferral",
|
|
109
|
-
args: [collateral.balance, wallet, referralCode]
|
|
88
|
+
tx: tx2,
|
|
89
|
+
calls: [{ target: zapper.baseParams.addr, callData: tx2.callData }]
|
|
110
90
|
};
|
|
111
|
-
} else {
|
|
91
|
+
} else if (zapper instanceof IERC20ZapperContract) {
|
|
92
|
+
const tx2 = permit ? zapper.depositWithReferralAndPermit(
|
|
93
|
+
collateral.balance,
|
|
94
|
+
wallet,
|
|
95
|
+
referralCode ?? 0n,
|
|
96
|
+
permit.deadline,
|
|
97
|
+
permit.v,
|
|
98
|
+
permit.r,
|
|
99
|
+
permit.s
|
|
100
|
+
) : zapper.depositWithReferral(
|
|
101
|
+
collateral.balance,
|
|
102
|
+
wallet,
|
|
103
|
+
referralCode ?? 0n
|
|
104
|
+
);
|
|
112
105
|
return {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
functionName: "depositWithReferral",
|
|
116
|
-
args: [collateral.balance, wallet, referralCode]
|
|
106
|
+
tx: tx2,
|
|
107
|
+
calls: [{ target: zapper.baseParams.addr, callData: tx2.callData }]
|
|
117
108
|
};
|
|
118
109
|
}
|
|
110
|
+
const poolContract = this.sdk.marketRegister.findByPool(pool).pool.pool;
|
|
111
|
+
const tx = poolContract.depositWithReferral(
|
|
112
|
+
collateral.balance,
|
|
113
|
+
wallet,
|
|
114
|
+
referralCode ?? 0n
|
|
115
|
+
);
|
|
116
|
+
return {
|
|
117
|
+
tx,
|
|
118
|
+
calls: [{ target: pool, callData: tx.callData }]
|
|
119
|
+
};
|
|
119
120
|
}
|
|
120
121
|
/**
|
|
121
122
|
* {@inheritDoc IPoolsService.getWithdrawalTokensIn}
|
|
@@ -155,39 +156,40 @@ class PoolService extends SDKConstruct {
|
|
|
155
156
|
const underlying = this.#describeUnderlying(pool);
|
|
156
157
|
if (this.sdk.tokensMeta.isRWAUnderlying(underlying)) {
|
|
157
158
|
if (underlying.contractType === RWA_UNDERLYING_ON_DEMAND) {
|
|
158
|
-
|
|
159
|
+
const tokenContract = new BaseContract(this.sdk, {
|
|
160
|
+
addr: underlying.asset,
|
|
159
161
|
abi: ierc20Abi,
|
|
162
|
+
name: "ERC20"
|
|
163
|
+
});
|
|
164
|
+
const tx2 = tokenContract.createRawTx({
|
|
160
165
|
functionName: "approve",
|
|
161
|
-
args: [underlying.liquidityProvider, 0n]
|
|
162
|
-
|
|
166
|
+
args: [underlying.liquidityProvider.addr, 0n]
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
tx: tx2,
|
|
170
|
+
calls: [{ target: underlying.asset, callData: tx2.callData }]
|
|
163
171
|
};
|
|
164
172
|
}
|
|
165
173
|
}
|
|
166
|
-
if (meta.zapper) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
]
|
|
179
|
-
} : {
|
|
180
|
-
target: meta.zapper.baseParams.addr,
|
|
181
|
-
abi: iZapperAbi,
|
|
182
|
-
functionName: "redeem",
|
|
183
|
-
args: [amount, wallet]
|
|
174
|
+
if (meta.zapper instanceof IETHZapperContract || meta.zapper instanceof IERC20ZapperContract) {
|
|
175
|
+
const tx2 = permit ? meta.zapper.redeemWithPermit(
|
|
176
|
+
amount,
|
|
177
|
+
wallet,
|
|
178
|
+
permit.deadline,
|
|
179
|
+
permit.v,
|
|
180
|
+
permit.r,
|
|
181
|
+
permit.s
|
|
182
|
+
) : meta.zapper.redeem(amount, wallet);
|
|
183
|
+
return {
|
|
184
|
+
tx: tx2,
|
|
185
|
+
calls: [{ target: meta.zapper.baseParams.addr, callData: tx2.callData }]
|
|
184
186
|
};
|
|
185
187
|
}
|
|
188
|
+
const poolContract = this.sdk.marketRegister.findByPool(pool).pool.pool;
|
|
189
|
+
const tx = poolContract.redeem(amount, wallet, wallet);
|
|
186
190
|
return {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
functionName: "redeem",
|
|
190
|
-
args: [amount, wallet, wallet]
|
|
191
|
+
tx,
|
|
192
|
+
calls: [{ target: pool, callData: tx.callData }]
|
|
191
193
|
};
|
|
192
194
|
}
|
|
193
195
|
/**
|