@gearbox-protocol/sdk 14.10.3 → 14.10.5-next.1

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 (45) hide show
  1. package/dist/cjs/abi/iERC20Zapper.js +33 -0
  2. package/dist/cjs/abi/iETHZapper.js +30 -0
  3. package/dist/cjs/dev/AccountOpener.js +4 -5
  4. package/dist/cjs/sdk/market/ZapperRegister.js +5 -3
  5. package/dist/cjs/sdk/market/index.js +3 -1
  6. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +20 -0
  7. package/dist/cjs/sdk/market/zapper/IERC20ZapperContract.js +98 -0
  8. package/dist/cjs/sdk/market/zapper/IETHZapperContract.js +89 -0
  9. package/dist/cjs/sdk/market/zapper/Zapper.js +47 -0
  10. package/dist/cjs/sdk/market/zapper/createZapper.js +45 -0
  11. package/dist/cjs/sdk/market/zapper/index.js +28 -0
  12. package/dist/cjs/sdk/pools/PoolService.js +58 -60
  13. package/dist/esm/abi/iERC20Zapper.js +9 -0
  14. package/dist/esm/abi/iETHZapper.js +6 -0
  15. package/dist/esm/dev/AccountOpener.js +4 -5
  16. package/dist/esm/sdk/market/ZapperRegister.js +5 -3
  17. package/dist/esm/sdk/market/index.js +1 -0
  18. package/dist/esm/sdk/market/pool/PoolV310Contract.js +20 -0
  19. package/dist/esm/sdk/market/zapper/IERC20ZapperContract.js +74 -0
  20. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +65 -0
  21. package/dist/esm/sdk/market/zapper/Zapper.js +23 -0
  22. package/dist/esm/sdk/market/zapper/createZapper.js +21 -0
  23. package/dist/esm/sdk/market/zapper/index.js +4 -0
  24. package/dist/esm/sdk/pools/PoolService.js +62 -60
  25. package/dist/types/abi/iERC20Zapper.d.ts +313 -0
  26. package/dist/types/abi/iETHZapper.d.ts +153 -0
  27. package/dist/types/sdk/base/types.d.ts +9 -0
  28. package/dist/types/sdk/market/ZapperRegister.d.ts +4 -4
  29. package/dist/types/sdk/market/credit/CreditFacadeV310Contract.d.ts +2 -1
  30. package/dist/types/sdk/market/credit/CreditSuite.d.ts +2 -2
  31. package/dist/types/sdk/market/credit/createCreditFacade.d.ts +2 -2
  32. package/dist/types/sdk/market/credit/types.d.ts +134 -6
  33. package/dist/types/sdk/market/index.d.ts +1 -0
  34. package/dist/types/sdk/market/pool/PoolSuite.d.ts +2 -2
  35. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +14 -3
  36. package/dist/types/sdk/market/pool/createPool.d.ts +2 -2
  37. package/dist/types/sdk/market/pool/types.d.ts +117 -4
  38. package/dist/types/sdk/market/zapper/IERC20ZapperContract.d.ts +350 -0
  39. package/dist/types/sdk/market/zapper/IETHZapperContract.d.ts +186 -0
  40. package/dist/types/sdk/market/zapper/Zapper.d.ts +13 -0
  41. package/dist/types/sdk/market/zapper/createZapper.d.ts +6 -0
  42. package/dist/types/sdk/market/zapper/index.d.ts +4 -0
  43. package/dist/types/sdk/pools/PoolService.d.ts +3 -3
  44. package/dist/types/sdk/pools/types.d.ts +10 -5
  45. 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 -> ZapperData[]
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(z);
66
+ existing.push(zapper);
65
67
  }
66
68
  } else {
67
- this.zappers.upsert(z.pool, [z]);
69
+ this.zappers.upsert(z.pool, [zapper]);
68
70
  }
69
71
  const zappersTokens = [z.tokenIn, z.tokenOut];
70
72
  for (const t of zappersTokens) {
@@ -7,3 +7,4 @@ export * from "./pool/index.js";
7
7
  export * from "./pricefeeds/index.js";
8
8
  export * from "./rwa/index.js";
9
9
  export * from "./types.js";
10
+ export * from "./zapper/index.js";
@@ -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
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./createZapper.js";
2
+ export * from "./IERC20ZapperContract.js";
3
+ export * from "./IETHZapperContract.js";
4
+ export * from "./Zapper.js";
@@ -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 && hexEq(zapper.tokenIn.addr, NATIVE_ADDRESS)) {
84
+ if (zapper instanceof IETHZapperContract) {
85
+ const tx2 = zapper.depositWithReferral(wallet, referralCode ?? 0n);
86
+ tx2.value = collateral.balance.toString();
84
87
  return {
85
- target: zapper.baseParams.addr,
86
- abi: iethZapperDepositsAbi,
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
- target: pool,
114
- abi: iPoolV310Abi,
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
- return {
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
- target: underlying.asset
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
- return permit ? {
168
- target: meta.zapper.baseParams.addr,
169
- abi: iZapperAbi,
170
- functionName: "redeemWithPermit",
171
- args: [
172
- amount,
173
- wallet,
174
- permit.deadline,
175
- permit.v,
176
- permit.r,
177
- permit.s
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
- target: pool,
188
- abi: iPoolV310Abi,
189
- functionName: "redeem",
190
- args: [amount, wallet, wallet]
191
+ tx,
192
+ calls: [{ target: pool, callData: tx.callData }]
191
193
  };
192
194
  }
193
195
  /**