@suilend/sdk 12.7.0 → 13.0.0-next.g803bba0

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 (84) hide show
  1. package/_generated/_dependencies/pyth-2/price-identifier/structs.d.ts +46 -0
  2. package/_generated/_dependencies/{source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e → pyth-2}/price-identifier/structs.js +45 -25
  3. package/_generated/_dependencies/std/ascii/structs.d.ts +100 -0
  4. package/_generated/_dependencies/{source/0x1 → std}/ascii/structs.js +153 -103
  5. package/_generated/_dependencies/{source/0x1 → std}/option/structs.d.ts +29 -21
  6. package/_generated/_dependencies/std/option/structs.js +155 -0
  7. package/_generated/_dependencies/std/type-name/structs.d.ts +65 -0
  8. package/_generated/_dependencies/{source/0x1 → std}/type-name/structs.js +49 -22
  9. package/_generated/_dependencies/sui/bag/structs.d.ts +75 -0
  10. package/_generated/_dependencies/sui/bag/structs.js +154 -0
  11. package/_generated/_dependencies/{source/0x2 → sui}/balance/structs.d.ts +80 -60
  12. package/_generated/_dependencies/sui/balance/structs.js +306 -0
  13. package/_generated/_dependencies/sui/object/structs.d.ts +104 -0
  14. package/_generated/_dependencies/{source/0x2 → sui}/object/structs.js +98 -46
  15. package/_generated/_dependencies/{source/0x2 → sui}/object-table/structs.d.ts +37 -30
  16. package/_generated/_dependencies/sui/object-table/structs.js +164 -0
  17. package/_generated/_envs/index.d.ts +3 -0
  18. package/_generated/_envs/index.js +18 -0
  19. package/_generated/_envs/mainnet.d.ts +2 -0
  20. package/_generated/_envs/mainnet.js +490 -0
  21. package/_generated/_framework/env.d.ts +137 -0
  22. package/_generated/_framework/env.js +261 -0
  23. package/_generated/_framework/reified.d.ts +68 -36
  24. package/_generated/_framework/reified.js +110 -98
  25. package/_generated/_framework/util.d.ts +4 -4
  26. package/_generated/_framework/util.js +82 -79
  27. package/_generated/_framework/vector.d.ts +11 -9
  28. package/_generated/_framework/vector.js +10 -10
  29. package/_generated/suilend/cell/structs.d.ts +24 -22
  30. package/_generated/suilend/cell/structs.js +68 -24
  31. package/_generated/suilend/decimal/structs.d.ts +28 -24
  32. package/_generated/suilend/decimal/structs.js +45 -24
  33. package/_generated/suilend/index.d.ts +5 -6
  34. package/_generated/suilend/index.js +10 -19
  35. package/_generated/suilend/lending-market/functions.d.ts +1123 -149
  36. package/_generated/suilend/lending-market/functions.js +1121 -207
  37. package/_generated/suilend/lending-market/structs.d.ts +985 -1290
  38. package/_generated/suilend/lending-market/structs.js +2482 -1282
  39. package/_generated/suilend/lending-market-registry/functions.d.ts +32 -3
  40. package/_generated/suilend/lending-market-registry/functions.js +30 -6
  41. package/_generated/suilend/liquidity-mining/structs.d.ts +200 -333
  42. package/_generated/suilend/liquidity-mining/structs.js +449 -319
  43. package/_generated/suilend/obligation/structs.d.ts +406 -918
  44. package/_generated/suilend/obligation/structs.js +786 -596
  45. package/_generated/suilend/rate-limiter/functions.d.ts +134 -15
  46. package/_generated/suilend/rate-limiter/functions.js +139 -21
  47. package/_generated/suilend/rate-limiter/structs.d.ts +72 -80
  48. package/_generated/suilend/rate-limiter/structs.js +98 -48
  49. package/_generated/suilend/reserve/structs.d.ts +611 -904
  50. package/_generated/suilend/reserve/structs.js +1528 -736
  51. package/_generated/suilend/reserve-config/functions.d.ts +718 -96
  52. package/_generated/suilend/reserve-config/functions.js +751 -157
  53. package/_generated/suilend/reserve-config/structs.d.ts +148 -163
  54. package/_generated/suilend/reserve-config/structs.js +260 -94
  55. package/client.d.ts +2 -2
  56. package/client.js +22 -39
  57. package/lib/initialize.d.ts +76 -76
  58. package/lib/initialize.js +10 -10
  59. package/lib/proCompatible.js +5 -5
  60. package/package.json +1 -1
  61. package/parsers/lendingMarket.d.ts +9 -9
  62. package/parsers/obligation.d.ts +14 -14
  63. package/parsers/obligation.js +4 -4
  64. package/parsers/rateLimiter.d.ts +1 -1
  65. package/parsers/reserve.d.ts +12 -12
  66. package/parsers/reserve.js +2 -2
  67. package/strategies.d.ts +14 -14
  68. package/utils/simulate.d.ts +1 -1
  69. package/utils/simulate.js +5 -5
  70. package/_generated/_dependencies/source/0x1/ascii/structs.d.ts +0 -84
  71. package/_generated/_dependencies/source/0x1/index.d.ts +0 -3
  72. package/_generated/_dependencies/source/0x1/index.js +0 -3
  73. package/_generated/_dependencies/source/0x1/option/structs.js +0 -110
  74. package/_generated/_dependencies/source/0x1/type-name/structs.d.ts +0 -47
  75. package/_generated/_dependencies/source/0x2/bag/structs.d.ts +0 -52
  76. package/_generated/_dependencies/source/0x2/bag/structs.js +0 -113
  77. package/_generated/_dependencies/source/0x2/balance/structs.js +0 -210
  78. package/_generated/_dependencies/source/0x2/index.d.ts +0 -3
  79. package/_generated/_dependencies/source/0x2/index.js +0 -3
  80. package/_generated/_dependencies/source/0x2/object/structs.d.ts +0 -82
  81. package/_generated/_dependencies/source/0x2/object-table/structs.js +0 -115
  82. package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/index.d.ts +0 -4
  83. package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/index.js +0 -4
  84. package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs.d.ts +0 -46
@@ -1,17 +1,21 @@
1
- import * as reified from "../../_framework/reified.js";
2
- import { Bag } from "../../_dependencies/source/0x2/bag/structs.js";
3
- import { decodeFromFields, decodeFromFieldsWithTypes, decodeFromJSONField, fieldToJSON, phantom, } from "../../_framework/reified.js";
4
- import { composeSuiType, compressSuiType, } from "../../_framework/util.js";
5
- import { PKG_V1 } from "../index.js";
6
- import { bcs } from "@mysten/sui/bcs";
1
+ /** parameters for a Reserve. */
2
+ import { bcs } from '@mysten/sui/bcs';
3
+ import { Bag } from '../../_dependencies/sui/bag/structs.js';
4
+ import { getTypeOrigin } from '../../_envs/index.js';
5
+ import { decodeFromFields, decodeFromFieldsWithTypes, decodeFromJSONField, fieldToJSON, phantom, vector, } from '../../_framework/reified.js';
6
+ import { composeSuiType, compressSuiType } from '../../_framework/util.js';
7
7
  /* ============================== ReserveConfig =============================== */
8
8
  export function isReserveConfig(type) {
9
9
  type = compressSuiType(type);
10
- return type === `${PKG_V1}::reserve_config::ReserveConfig`;
10
+ return type
11
+ === `${getTypeOrigin('suilend', 'reserve_config::ReserveConfig')}::reserve_config::ReserveConfig`;
11
12
  }
13
+ /** Configuration parameters for a reserve in the lending market. */
12
14
  export class ReserveConfig {
13
15
  __StructClass = true;
14
- static $typeName = `${PKG_V1}::reserve_config::ReserveConfig`;
16
+ static get $typeName() {
17
+ return `${getTypeOrigin('suilend', 'reserve_config::ReserveConfig')}::reserve_config::ReserveConfig`;
18
+ }
15
19
  static $numTypeParams = 0;
16
20
  static $isPhantom = [];
17
21
  $typeName = ReserveConfig.$typeName;
@@ -61,23 +65,29 @@ export class ReserveConfig {
61
65
  this.additionalFields = fields.additionalFields;
62
66
  }
63
67
  static reified() {
68
+ const reifiedBcs = ReserveConfig.bcs;
64
69
  return {
65
- typeName: ReserveConfig.$typeName,
66
- fullTypeName: composeSuiType(ReserveConfig.$typeName, ...[]),
70
+ get typeName() {
71
+ return ReserveConfig.$typeName;
72
+ },
73
+ get fullTypeName() {
74
+ return composeSuiType(ReserveConfig.$typeName, ...[]);
75
+ },
67
76
  typeArgs: [],
68
77
  isPhantom: ReserveConfig.$isPhantom,
69
78
  reifiedTypeArgs: [],
70
79
  fromFields: (fields) => ReserveConfig.fromFields(fields),
71
80
  fromFieldsWithTypes: (item) => ReserveConfig.fromFieldsWithTypes(item),
72
- fromBcs: (data) => ReserveConfig.fromBcs(data),
73
- bcs: ReserveConfig.bcs,
81
+ fromBcs: (data) => ReserveConfig.fromFields(reifiedBcs.parse(data)),
82
+ bcs: reifiedBcs,
74
83
  fromJSONField: (field) => ReserveConfig.fromJSONField(field),
75
84
  fromJSON: (json) => ReserveConfig.fromJSON(json),
85
+ fromCoreObject: (obj) => ReserveConfig.fromCoreObject(obj),
76
86
  fetch: async (client, id) => ReserveConfig.fetch(client, id),
77
87
  new: (fields) => {
78
88
  return new ReserveConfig([], fields);
79
89
  },
80
- kind: "StructClassReified",
90
+ kind: 'StructClassReified',
81
91
  };
82
92
  }
83
93
  static get r() {
@@ -89,8 +99,8 @@ export class ReserveConfig {
89
99
  static get p() {
90
100
  return ReserveConfig.phantom();
91
101
  }
92
- static get bcs() {
93
- return bcs.struct("ReserveConfig", {
102
+ static instantiateBcs() {
103
+ return bcs.struct('ReserveConfig', {
94
104
  open_ltv_pct: bcs.u8(),
95
105
  close_ltv_pct: bcs.u8(),
96
106
  max_close_ltv_pct: bcs.u8(),
@@ -112,52 +122,59 @@ export class ReserveConfig {
112
122
  additional_fields: Bag.bcs,
113
123
  });
114
124
  }
125
+ static cachedBcs = null;
126
+ static get bcs() {
127
+ if (!ReserveConfig.cachedBcs) {
128
+ ReserveConfig.cachedBcs = ReserveConfig.instantiateBcs();
129
+ }
130
+ return ReserveConfig.cachedBcs;
131
+ }
115
132
  static fromFields(fields) {
116
133
  return ReserveConfig.reified().new({
117
- openLtvPct: decodeFromFields("u8", fields.open_ltv_pct),
118
- closeLtvPct: decodeFromFields("u8", fields.close_ltv_pct),
119
- maxCloseLtvPct: decodeFromFields("u8", fields.max_close_ltv_pct),
120
- borrowWeightBps: decodeFromFields("u64", fields.borrow_weight_bps),
121
- depositLimit: decodeFromFields("u64", fields.deposit_limit),
122
- borrowLimit: decodeFromFields("u64", fields.borrow_limit),
123
- liquidationBonusBps: decodeFromFields("u64", fields.liquidation_bonus_bps),
124
- maxLiquidationBonusBps: decodeFromFields("u64", fields.max_liquidation_bonus_bps),
125
- depositLimitUsd: decodeFromFields("u64", fields.deposit_limit_usd),
126
- borrowLimitUsd: decodeFromFields("u64", fields.borrow_limit_usd),
127
- interestRateUtils: decodeFromFields(reified.vector("u8"), fields.interest_rate_utils),
128
- interestRateAprs: decodeFromFields(reified.vector("u64"), fields.interest_rate_aprs),
129
- borrowFeeBps: decodeFromFields("u64", fields.borrow_fee_bps),
130
- spreadFeeBps: decodeFromFields("u64", fields.spread_fee_bps),
131
- protocolLiquidationFeeBps: decodeFromFields("u64", fields.protocol_liquidation_fee_bps),
132
- isolated: decodeFromFields("bool", fields.isolated),
133
- openAttributedBorrowLimitUsd: decodeFromFields("u64", fields.open_attributed_borrow_limit_usd),
134
- closeAttributedBorrowLimitUsd: decodeFromFields("u64", fields.close_attributed_borrow_limit_usd),
134
+ openLtvPct: decodeFromFields('u8', fields.open_ltv_pct),
135
+ closeLtvPct: decodeFromFields('u8', fields.close_ltv_pct),
136
+ maxCloseLtvPct: decodeFromFields('u8', fields.max_close_ltv_pct),
137
+ borrowWeightBps: decodeFromFields('u64', fields.borrow_weight_bps),
138
+ depositLimit: decodeFromFields('u64', fields.deposit_limit),
139
+ borrowLimit: decodeFromFields('u64', fields.borrow_limit),
140
+ liquidationBonusBps: decodeFromFields('u64', fields.liquidation_bonus_bps),
141
+ maxLiquidationBonusBps: decodeFromFields('u64', fields.max_liquidation_bonus_bps),
142
+ depositLimitUsd: decodeFromFields('u64', fields.deposit_limit_usd),
143
+ borrowLimitUsd: decodeFromFields('u64', fields.borrow_limit_usd),
144
+ interestRateUtils: decodeFromFields(vector('u8'), fields.interest_rate_utils),
145
+ interestRateAprs: decodeFromFields(vector('u64'), fields.interest_rate_aprs),
146
+ borrowFeeBps: decodeFromFields('u64', fields.borrow_fee_bps),
147
+ spreadFeeBps: decodeFromFields('u64', fields.spread_fee_bps),
148
+ protocolLiquidationFeeBps: decodeFromFields('u64', fields.protocol_liquidation_fee_bps),
149
+ isolated: decodeFromFields('bool', fields.isolated),
150
+ openAttributedBorrowLimitUsd: decodeFromFields('u64', fields.open_attributed_borrow_limit_usd),
151
+ closeAttributedBorrowLimitUsd: decodeFromFields('u64', fields.close_attributed_borrow_limit_usd),
135
152
  additionalFields: decodeFromFields(Bag.reified(), fields.additional_fields),
136
153
  });
137
154
  }
138
155
  static fromFieldsWithTypes(item) {
139
156
  if (!isReserveConfig(item.type)) {
140
- throw new Error("not a ReserveConfig type");
157
+ throw new Error('not a ReserveConfig type');
141
158
  }
142
159
  return ReserveConfig.reified().new({
143
- openLtvPct: decodeFromFieldsWithTypes("u8", item.fields.open_ltv_pct),
144
- closeLtvPct: decodeFromFieldsWithTypes("u8", item.fields.close_ltv_pct),
145
- maxCloseLtvPct: decodeFromFieldsWithTypes("u8", item.fields.max_close_ltv_pct),
146
- borrowWeightBps: decodeFromFieldsWithTypes("u64", item.fields.borrow_weight_bps),
147
- depositLimit: decodeFromFieldsWithTypes("u64", item.fields.deposit_limit),
148
- borrowLimit: decodeFromFieldsWithTypes("u64", item.fields.borrow_limit),
149
- liquidationBonusBps: decodeFromFieldsWithTypes("u64", item.fields.liquidation_bonus_bps),
150
- maxLiquidationBonusBps: decodeFromFieldsWithTypes("u64", item.fields.max_liquidation_bonus_bps),
151
- depositLimitUsd: decodeFromFieldsWithTypes("u64", item.fields.deposit_limit_usd),
152
- borrowLimitUsd: decodeFromFieldsWithTypes("u64", item.fields.borrow_limit_usd),
153
- interestRateUtils: decodeFromFieldsWithTypes(reified.vector("u8"), item.fields.interest_rate_utils),
154
- interestRateAprs: decodeFromFieldsWithTypes(reified.vector("u64"), item.fields.interest_rate_aprs),
155
- borrowFeeBps: decodeFromFieldsWithTypes("u64", item.fields.borrow_fee_bps),
156
- spreadFeeBps: decodeFromFieldsWithTypes("u64", item.fields.spread_fee_bps),
157
- protocolLiquidationFeeBps: decodeFromFieldsWithTypes("u64", item.fields.protocol_liquidation_fee_bps),
158
- isolated: decodeFromFieldsWithTypes("bool", item.fields.isolated),
159
- openAttributedBorrowLimitUsd: decodeFromFieldsWithTypes("u64", item.fields.open_attributed_borrow_limit_usd),
160
- closeAttributedBorrowLimitUsd: decodeFromFieldsWithTypes("u64", item.fields.close_attributed_borrow_limit_usd),
160
+ openLtvPct: decodeFromFieldsWithTypes('u8', item.fields.open_ltv_pct),
161
+ closeLtvPct: decodeFromFieldsWithTypes('u8', item.fields.close_ltv_pct),
162
+ maxCloseLtvPct: decodeFromFieldsWithTypes('u8', item.fields.max_close_ltv_pct),
163
+ borrowWeightBps: decodeFromFieldsWithTypes('u64', item.fields.borrow_weight_bps),
164
+ depositLimit: decodeFromFieldsWithTypes('u64', item.fields.deposit_limit),
165
+ borrowLimit: decodeFromFieldsWithTypes('u64', item.fields.borrow_limit),
166
+ liquidationBonusBps: decodeFromFieldsWithTypes('u64', item.fields.liquidation_bonus_bps),
167
+ maxLiquidationBonusBps: decodeFromFieldsWithTypes('u64', item.fields.max_liquidation_bonus_bps),
168
+ depositLimitUsd: decodeFromFieldsWithTypes('u64', item.fields.deposit_limit_usd),
169
+ borrowLimitUsd: decodeFromFieldsWithTypes('u64', item.fields.borrow_limit_usd),
170
+ interestRateUtils: decodeFromFieldsWithTypes(vector('u8'), item.fields.interest_rate_utils),
171
+ interestRateAprs: decodeFromFieldsWithTypes(vector('u64'), item.fields.interest_rate_aprs),
172
+ borrowFeeBps: decodeFromFieldsWithTypes('u64', item.fields.borrow_fee_bps),
173
+ spreadFeeBps: decodeFromFieldsWithTypes('u64', item.fields.spread_fee_bps),
174
+ protocolLiquidationFeeBps: decodeFromFieldsWithTypes('u64', item.fields.protocol_liquidation_fee_bps),
175
+ isolated: decodeFromFieldsWithTypes('bool', item.fields.isolated),
176
+ openAttributedBorrowLimitUsd: decodeFromFieldsWithTypes('u64', item.fields.open_attributed_borrow_limit_usd),
177
+ closeAttributedBorrowLimitUsd: decodeFromFieldsWithTypes('u64', item.fields.close_attributed_borrow_limit_usd),
161
178
  additionalFields: decodeFromFieldsWithTypes(Bag.reified(), item.fields.additional_fields),
162
179
  });
163
180
  }
@@ -188,43 +205,48 @@ export class ReserveConfig {
188
205
  };
189
206
  }
190
207
  toJSON() {
191
- return {
192
- $typeName: this.$typeName,
193
- $typeArgs: this.$typeArgs,
194
- ...this.toJSONField(),
195
- };
208
+ return { $typeName: this.$typeName, $typeArgs: this.$typeArgs, ...this.toJSONField() };
196
209
  }
197
210
  static fromJSONField(field) {
198
211
  return ReserveConfig.reified().new({
199
- openLtvPct: decodeFromJSONField("u8", field.openLtvPct),
200
- closeLtvPct: decodeFromJSONField("u8", field.closeLtvPct),
201
- maxCloseLtvPct: decodeFromJSONField("u8", field.maxCloseLtvPct),
202
- borrowWeightBps: decodeFromJSONField("u64", field.borrowWeightBps),
203
- depositLimit: decodeFromJSONField("u64", field.depositLimit),
204
- borrowLimit: decodeFromJSONField("u64", field.borrowLimit),
205
- liquidationBonusBps: decodeFromJSONField("u64", field.liquidationBonusBps),
206
- maxLiquidationBonusBps: decodeFromJSONField("u64", field.maxLiquidationBonusBps),
207
- depositLimitUsd: decodeFromJSONField("u64", field.depositLimitUsd),
208
- borrowLimitUsd: decodeFromJSONField("u64", field.borrowLimitUsd),
209
- interestRateUtils: decodeFromJSONField(reified.vector("u8"), field.interestRateUtils),
210
- interestRateAprs: decodeFromJSONField(reified.vector("u64"), field.interestRateAprs),
211
- borrowFeeBps: decodeFromJSONField("u64", field.borrowFeeBps),
212
- spreadFeeBps: decodeFromJSONField("u64", field.spreadFeeBps),
213
- protocolLiquidationFeeBps: decodeFromJSONField("u64", field.protocolLiquidationFeeBps),
214
- isolated: decodeFromJSONField("bool", field.isolated),
215
- openAttributedBorrowLimitUsd: decodeFromJSONField("u64", field.openAttributedBorrowLimitUsd),
216
- closeAttributedBorrowLimitUsd: decodeFromJSONField("u64", field.closeAttributedBorrowLimitUsd),
212
+ openLtvPct: decodeFromJSONField('u8', field.openLtvPct),
213
+ closeLtvPct: decodeFromJSONField('u8', field.closeLtvPct),
214
+ maxCloseLtvPct: decodeFromJSONField('u8', field.maxCloseLtvPct),
215
+ borrowWeightBps: decodeFromJSONField('u64', field.borrowWeightBps),
216
+ depositLimit: decodeFromJSONField('u64', field.depositLimit),
217
+ borrowLimit: decodeFromJSONField('u64', field.borrowLimit),
218
+ liquidationBonusBps: decodeFromJSONField('u64', field.liquidationBonusBps),
219
+ maxLiquidationBonusBps: decodeFromJSONField('u64', field.maxLiquidationBonusBps),
220
+ depositLimitUsd: decodeFromJSONField('u64', field.depositLimitUsd),
221
+ borrowLimitUsd: decodeFromJSONField('u64', field.borrowLimitUsd),
222
+ interestRateUtils: decodeFromJSONField(vector('u8'), field.interestRateUtils),
223
+ interestRateAprs: decodeFromJSONField(vector('u64'), field.interestRateAprs),
224
+ borrowFeeBps: decodeFromJSONField('u64', field.borrowFeeBps),
225
+ spreadFeeBps: decodeFromJSONField('u64', field.spreadFeeBps),
226
+ protocolLiquidationFeeBps: decodeFromJSONField('u64', field.protocolLiquidationFeeBps),
227
+ isolated: decodeFromJSONField('bool', field.isolated),
228
+ openAttributedBorrowLimitUsd: decodeFromJSONField('u64', field.openAttributedBorrowLimitUsd),
229
+ closeAttributedBorrowLimitUsd: decodeFromJSONField('u64', field.closeAttributedBorrowLimitUsd),
217
230
  additionalFields: decodeFromJSONField(Bag.reified(), field.additionalFields),
218
231
  });
219
232
  }
220
233
  static fromJSON(json) {
221
234
  if (json.$typeName !== ReserveConfig.$typeName) {
222
- throw new Error("not a WithTwoGenerics json object");
235
+ throw new Error(`not a ReserveConfig json object: expected '${ReserveConfig.$typeName}' but got '${json.$typeName}'`);
223
236
  }
224
237
  return ReserveConfig.fromJSONField(json);
225
238
  }
239
+ static fromCoreObject(obj) {
240
+ if (!isReserveConfig(obj.type)) {
241
+ throw new Error(`object at ${obj.objectId} is not a ReserveConfig object`);
242
+ }
243
+ return ReserveConfig.fromBcs(obj.content);
244
+ }
226
245
  static async fetch(client, id) {
227
- const { object } = await client.getObject({ objectId: id, include: { content: true } });
246
+ const { object } = await client.core.getObject({
247
+ objectId: id,
248
+ include: { content: true },
249
+ });
228
250
  if (!isReserveConfig(object.type)) {
229
251
  throw new Error(`object at id ${id} is not a ReserveConfig object`);
230
252
  }
@@ -234,11 +256,15 @@ export class ReserveConfig {
234
256
  /* ============================== ReserveConfigBuilder =============================== */
235
257
  export function isReserveConfigBuilder(type) {
236
258
  type = compressSuiType(type);
237
- return type === `${PKG_V1}::reserve_config::ReserveConfigBuilder`;
259
+ return type
260
+ === `${getTypeOrigin('suilend', 'reserve_config::ReserveConfigBuilder')}::reserve_config::ReserveConfigBuilder`;
238
261
  }
262
+ /** Builder struct for constructing a ReserveConfig. */
239
263
  export class ReserveConfigBuilder {
240
264
  __StructClass = true;
241
- static $typeName = `${PKG_V1}::reserve_config::ReserveConfigBuilder`;
265
+ static get $typeName() {
266
+ return `${getTypeOrigin('suilend', 'reserve_config::ReserveConfigBuilder')}::reserve_config::ReserveConfigBuilder`;
267
+ }
242
268
  static $numTypeParams = 0;
243
269
  static $isPhantom = [];
244
270
  $typeName = ReserveConfigBuilder.$typeName;
@@ -252,23 +278,29 @@ export class ReserveConfigBuilder {
252
278
  this.fields = fields.fields;
253
279
  }
254
280
  static reified() {
281
+ const reifiedBcs = ReserveConfigBuilder.bcs;
255
282
  return {
256
- typeName: ReserveConfigBuilder.$typeName,
257
- fullTypeName: composeSuiType(ReserveConfigBuilder.$typeName, ...[]),
283
+ get typeName() {
284
+ return ReserveConfigBuilder.$typeName;
285
+ },
286
+ get fullTypeName() {
287
+ return composeSuiType(ReserveConfigBuilder.$typeName, ...[]);
288
+ },
258
289
  typeArgs: [],
259
290
  isPhantom: ReserveConfigBuilder.$isPhantom,
260
291
  reifiedTypeArgs: [],
261
292
  fromFields: (fields) => ReserveConfigBuilder.fromFields(fields),
262
293
  fromFieldsWithTypes: (item) => ReserveConfigBuilder.fromFieldsWithTypes(item),
263
- fromBcs: (data) => ReserveConfigBuilder.fromBcs(data),
264
- bcs: ReserveConfigBuilder.bcs,
294
+ fromBcs: (data) => ReserveConfigBuilder.fromFields(reifiedBcs.parse(data)),
295
+ bcs: reifiedBcs,
265
296
  fromJSONField: (field) => ReserveConfigBuilder.fromJSONField(field),
266
297
  fromJSON: (json) => ReserveConfigBuilder.fromJSON(json),
298
+ fromCoreObject: (obj) => ReserveConfigBuilder.fromCoreObject(obj),
267
299
  fetch: async (client, id) => ReserveConfigBuilder.fetch(client, id),
268
300
  new: (fields) => {
269
301
  return new ReserveConfigBuilder([], fields);
270
302
  },
271
- kind: "StructClassReified",
303
+ kind: 'StructClassReified',
272
304
  };
273
305
  }
274
306
  static get r() {
@@ -280,11 +312,18 @@ export class ReserveConfigBuilder {
280
312
  static get p() {
281
313
  return ReserveConfigBuilder.phantom();
282
314
  }
283
- static get bcs() {
284
- return bcs.struct("ReserveConfigBuilder", {
315
+ static instantiateBcs() {
316
+ return bcs.struct('ReserveConfigBuilder', {
285
317
  fields: Bag.bcs,
286
318
  });
287
319
  }
320
+ static cachedBcs = null;
321
+ static get bcs() {
322
+ if (!ReserveConfigBuilder.cachedBcs) {
323
+ ReserveConfigBuilder.cachedBcs = ReserveConfigBuilder.instantiateBcs();
324
+ }
325
+ return ReserveConfigBuilder.cachedBcs;
326
+ }
288
327
  static fromFields(fields) {
289
328
  return ReserveConfigBuilder.reified().new({
290
329
  fields: decodeFromFields(Bag.reified(), fields.fields),
@@ -292,7 +331,7 @@ export class ReserveConfigBuilder {
292
331
  }
293
332
  static fromFieldsWithTypes(item) {
294
333
  if (!isReserveConfigBuilder(item.type)) {
295
- throw new Error("not a ReserveConfigBuilder type");
334
+ throw new Error('not a ReserveConfigBuilder type');
296
335
  }
297
336
  return ReserveConfigBuilder.reified().new({
298
337
  fields: decodeFromFieldsWithTypes(Bag.reified(), item.fields.fields),
@@ -307,11 +346,7 @@ export class ReserveConfigBuilder {
307
346
  };
308
347
  }
309
348
  toJSON() {
310
- return {
311
- $typeName: this.$typeName,
312
- $typeArgs: this.$typeArgs,
313
- ...this.toJSONField(),
314
- };
349
+ return { $typeName: this.$typeName, $typeArgs: this.$typeArgs, ...this.toJSONField() };
315
350
  }
316
351
  static fromJSONField(field) {
317
352
  return ReserveConfigBuilder.reified().new({
@@ -320,15 +355,146 @@ export class ReserveConfigBuilder {
320
355
  }
321
356
  static fromJSON(json) {
322
357
  if (json.$typeName !== ReserveConfigBuilder.$typeName) {
323
- throw new Error("not a WithTwoGenerics json object");
358
+ throw new Error(`not a ReserveConfigBuilder json object: expected '${ReserveConfigBuilder.$typeName}' but got '${json.$typeName}'`);
324
359
  }
325
360
  return ReserveConfigBuilder.fromJSONField(json);
326
361
  }
362
+ static fromCoreObject(obj) {
363
+ if (!isReserveConfigBuilder(obj.type)) {
364
+ throw new Error(`object at ${obj.objectId} is not a ReserveConfigBuilder object`);
365
+ }
366
+ return ReserveConfigBuilder.fromBcs(obj.content);
367
+ }
327
368
  static async fetch(client, id) {
328
- const { object } = await client.getObject({ objectId: id, include: { content: true } });
369
+ const { object } = await client.core.getObject({
370
+ objectId: id,
371
+ include: { content: true },
372
+ });
329
373
  if (!isReserveConfigBuilder(object.type)) {
330
374
  throw new Error(`object at id ${id} is not a ReserveConfigBuilder object`);
331
375
  }
332
376
  return ReserveConfigBuilder.fromBcs(object.content);
333
377
  }
334
378
  }
379
+ /* ============================== ConfidenceMultiplierKey =============================== */
380
+ export function isConfidenceMultiplierKey(type) {
381
+ type = compressSuiType(type);
382
+ return type
383
+ === `${getTypeOrigin('suilend', 'reserve_config::ConfidenceMultiplierKey')}::reserve_config::ConfidenceMultiplierKey`;
384
+ }
385
+ export class ConfidenceMultiplierKey {
386
+ __StructClass = true;
387
+ static get $typeName() {
388
+ return `${getTypeOrigin('suilend', 'reserve_config::ConfidenceMultiplierKey')}::reserve_config::ConfidenceMultiplierKey`;
389
+ }
390
+ static $numTypeParams = 0;
391
+ static $isPhantom = [];
392
+ $typeName = ConfidenceMultiplierKey.$typeName;
393
+ $fullTypeName;
394
+ $typeArgs;
395
+ $isPhantom = ConfidenceMultiplierKey.$isPhantom;
396
+ dummyField;
397
+ constructor(typeArgs, fields) {
398
+ this.$fullTypeName = composeSuiType(ConfidenceMultiplierKey.$typeName, ...typeArgs);
399
+ this.$typeArgs = typeArgs;
400
+ this.dummyField = fields.dummyField;
401
+ }
402
+ static reified() {
403
+ const reifiedBcs = ConfidenceMultiplierKey.bcs;
404
+ return {
405
+ get typeName() {
406
+ return ConfidenceMultiplierKey.$typeName;
407
+ },
408
+ get fullTypeName() {
409
+ return composeSuiType(ConfidenceMultiplierKey.$typeName, ...[]);
410
+ },
411
+ typeArgs: [],
412
+ isPhantom: ConfidenceMultiplierKey.$isPhantom,
413
+ reifiedTypeArgs: [],
414
+ fromFields: (fields) => ConfidenceMultiplierKey.fromFields(fields),
415
+ fromFieldsWithTypes: (item) => ConfidenceMultiplierKey.fromFieldsWithTypes(item),
416
+ fromBcs: (data) => ConfidenceMultiplierKey.fromFields(reifiedBcs.parse(data)),
417
+ bcs: reifiedBcs,
418
+ fromJSONField: (field) => ConfidenceMultiplierKey.fromJSONField(field),
419
+ fromJSON: (json) => ConfidenceMultiplierKey.fromJSON(json),
420
+ fromCoreObject: (obj) => ConfidenceMultiplierKey.fromCoreObject(obj),
421
+ fetch: async (client, id) => ConfidenceMultiplierKey.fetch(client, id),
422
+ new: (fields) => {
423
+ return new ConfidenceMultiplierKey([], fields);
424
+ },
425
+ kind: 'StructClassReified',
426
+ };
427
+ }
428
+ static get r() {
429
+ return ConfidenceMultiplierKey.reified();
430
+ }
431
+ static phantom() {
432
+ return phantom(ConfidenceMultiplierKey.reified());
433
+ }
434
+ static get p() {
435
+ return ConfidenceMultiplierKey.phantom();
436
+ }
437
+ static instantiateBcs() {
438
+ return bcs.struct('ConfidenceMultiplierKey', {
439
+ dummy_field: bcs.bool(),
440
+ });
441
+ }
442
+ static cachedBcs = null;
443
+ static get bcs() {
444
+ if (!ConfidenceMultiplierKey.cachedBcs) {
445
+ ConfidenceMultiplierKey.cachedBcs = ConfidenceMultiplierKey.instantiateBcs();
446
+ }
447
+ return ConfidenceMultiplierKey.cachedBcs;
448
+ }
449
+ static fromFields(fields) {
450
+ return ConfidenceMultiplierKey.reified().new({
451
+ dummyField: decodeFromFields('bool', fields.dummy_field),
452
+ });
453
+ }
454
+ static fromFieldsWithTypes(item) {
455
+ if (!isConfidenceMultiplierKey(item.type)) {
456
+ throw new Error('not a ConfidenceMultiplierKey type');
457
+ }
458
+ return ConfidenceMultiplierKey.reified().new({
459
+ dummyField: decodeFromFieldsWithTypes('bool', item.fields.dummy_field),
460
+ });
461
+ }
462
+ static fromBcs(data) {
463
+ return ConfidenceMultiplierKey.fromFields(ConfidenceMultiplierKey.bcs.parse(data));
464
+ }
465
+ toJSONField() {
466
+ return {
467
+ dummyField: this.dummyField,
468
+ };
469
+ }
470
+ toJSON() {
471
+ return { $typeName: this.$typeName, $typeArgs: this.$typeArgs, ...this.toJSONField() };
472
+ }
473
+ static fromJSONField(field) {
474
+ return ConfidenceMultiplierKey.reified().new({
475
+ dummyField: decodeFromJSONField('bool', field.dummyField),
476
+ });
477
+ }
478
+ static fromJSON(json) {
479
+ if (json.$typeName !== ConfidenceMultiplierKey.$typeName) {
480
+ throw new Error(`not a ConfidenceMultiplierKey json object: expected '${ConfidenceMultiplierKey.$typeName}' but got '${json.$typeName}'`);
481
+ }
482
+ return ConfidenceMultiplierKey.fromJSONField(json);
483
+ }
484
+ static fromCoreObject(obj) {
485
+ if (!isConfidenceMultiplierKey(obj.type)) {
486
+ throw new Error(`object at ${obj.objectId} is not a ConfidenceMultiplierKey object`);
487
+ }
488
+ return ConfidenceMultiplierKey.fromBcs(obj.content);
489
+ }
490
+ static async fetch(client, id) {
491
+ const { object } = await client.core.getObject({
492
+ objectId: id,
493
+ include: { content: true },
494
+ });
495
+ if (!isConfidenceMultiplierKey(object.type)) {
496
+ throw new Error(`object at id ${id} is not a ConfidenceMultiplierKey object`);
497
+ }
498
+ return ConfidenceMultiplierKey.fromBcs(object.content);
499
+ }
500
+ }
package/client.d.ts CHANGED
@@ -18,8 +18,8 @@ export interface PriceUpdate {
18
18
  updateData: Buffer[];
19
19
  }
20
20
  export declare function needsPriceRefresh(stalenessSeconds: number): boolean;
21
- export declare const ADMIN_ADDRESS: string;
22
- export declare const LENDING_MARKET_REGISTRY_ID: string;
21
+ export declare const ADMIN_ADDRESS = "0xb1ffbc2e1915f44b8f271a703becc1bf8aa79bc22431a58900a102892b783c25";
22
+ export declare const LENDING_MARKET_REGISTRY_ID = "0x64faff8d91a56c4f55debbb44767b009ee744a70bc2cc8e3bbd2718c92f85931";
23
23
  export declare const LENDING_MARKET_ID: string, LENDING_MARKET_TYPE: string;
24
24
  export declare const STEAMM_LM_LENDING_MARKET_ID: string, STEAMM_LM_LENDING_MARKET_TYPE: string;
25
25
  export declare function getLatestPackageId(suiGrpcClient: SuiGrpcClient, upgradeCapId: string): Promise<any>;
package/client.js CHANGED
@@ -5,7 +5,8 @@ import BigNumber from "bignumber.js";
5
5
  import { extractCTokenCoinType, getAllCoins, getSpendableCoin, } from "@suilend/sui-core";
6
6
  import { phantom } from "./_generated/_framework/reified.js";
7
7
  import { PKG_V10, setPublishedAt } from "./_generated/suilend/index.js";
8
- import { PACKAGE_ID, PUBLISHED_AT } from "./_generated/suilend/index.js";
8
+ import { getPublishedAt } from "./_generated/_envs/index.js";
9
+ import { PACKAGE_ID } from "./_generated/suilend/index.js";
9
10
  import { addPoolReward, borrowRequest, cancelPoolReward, claimFees, claimRewards, claimRewardsAndDeposit, closePoolReward, depositCtokensIntoObligation, depositLiquidityAndMintCtokens, fulfillLiquidityRequest, liquidate, migrate, newObligationOwnerCap, rebalanceStaker, redeemCtokensAndWithdrawLiquidityRequest, repay, reserveConfigBuilder, setFeeReceivers, unstakeSuiFromStaker, updateRateLimiterConfig, updateReserveConfig, withdrawCtokens, } from "./_generated/suilend/lending-market/functions.js";
10
11
  import { LendingMarket, ObligationOwnerCap, } from "./_generated/suilend/lending-market/structs.js";
11
12
  import { createLendingMarket } from "./_generated/suilend/lending-market-registry/functions.js";
@@ -44,12 +45,8 @@ export function needsPriceRefresh(stalenessSeconds) {
44
45
  // the moment it is read.
45
46
  return stalenessSeconds > 20 || stalenessSeconds < -MAX_FORWARD_SECONDS;
46
47
  }
47
- export const ADMIN_ADDRESS = process.env.NEXT_PUBLIC_SUILEND_USE_BETA_MARKET === "true"
48
- ? "0xa902504c338e17f44dfee1bd1c3cad1ff03326579b9cdcfe2762fc12c46fc033" // beta owner
49
- : "0xb1ffbc2e1915f44b8f271a703becc1bf8aa79bc22431a58900a102892b783c25";
50
- const SUILEND_UPGRADE_CAP_ID = process.env.NEXT_PUBLIC_SUILEND_USE_BETA_MARKET === "true"
51
- ? "0x05da14368a42a351e106806c09727968ae26be77a6741a018239ef0f99d5185e"
52
- : "0x3d4ef1859c3ee9fc72858f588b56a09da5466e64f8cc4e90a7b3b909fba8a7ae";
48
+ export const ADMIN_ADDRESS = "0xb1ffbc2e1915f44b8f271a703becc1bf8aa79bc22431a58900a102892b783c25";
49
+ const SUILEND_UPGRADE_CAP_ID = "0x3d4ef1859c3ee9fc72858f588b56a09da5466e64f8cc4e90a7b3b909fba8a7ae";
53
50
  // A suilend package accepts only markets whose `version` equals the
54
51
  // CURRENT_VERSION it was compiled with, and the UpgradeCap names the newest
55
52
  // package before any market migrates to it. So only the newest market version
@@ -61,27 +58,15 @@ const PUBLISHED_AT_BY_MARKET_VERSION = new Map([
61
58
  "0x59672975e15c58ffc9450f5236b6aa9fa2407d94b8081e634778aa01957d8c6f",
62
59
  ],
63
60
  ]);
64
- export const LENDING_MARKET_REGISTRY_ID = process.env.NEXT_PUBLIC_SUILEND_USE_BETA_MARKET === "true"
65
- ? "0x925c9a2336b02fc2b68099837bd66f6b5b4d45cd460e0a4b81708bac6c440eff"
66
- : "0x64faff8d91a56c4f55debbb44767b009ee744a70bc2cc8e3bbd2718c92f85931";
67
- export const [LENDING_MARKET_ID, LENDING_MARKET_TYPE] = process.env.NEXT_PUBLIC_SUILEND_USE_BETA_MARKET === "true"
68
- ? [
69
- "0x12e46de3eafaf0308a2dd64f1158782ed19e6621835bf883a1dd6b3061115667",
70
- "0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI",
71
- ]
72
- : [
73
- "0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1",
74
- "0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL",
75
- ];
76
- export const [STEAMM_LM_LENDING_MARKET_ID, STEAMM_LM_LENDING_MARKET_TYPE] = process.env.NEXT_PUBLIC_SUILEND_USE_BETA_MARKET === "true"
77
- ? [
78
- "0xb1d89cf9082cedce09d3647f0ebda4a8b5db125aff5d312a8bfd7eefa715bd35",
79
- "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",
80
- ]
81
- : [
82
- "0xc1888ec1b81a414e427a44829310508352aec38252ee0daa9f8b181b6947de9f",
83
- "0x0a071f4976abae1a7f722199cf0bfcbe695ef9408a878e7d12a7ca87b7e582a6::lp_rewards::LP_REWARDS",
84
- ];
61
+ export const LENDING_MARKET_REGISTRY_ID = "0x64faff8d91a56c4f55debbb44767b009ee744a70bc2cc8e3bbd2718c92f85931";
62
+ export const [LENDING_MARKET_ID, LENDING_MARKET_TYPE] = [
63
+ "0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1",
64
+ "0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL",
65
+ ];
66
+ export const [STEAMM_LM_LENDING_MARKET_ID, STEAMM_LM_LENDING_MARKET_TYPE] = [
67
+ "0xc1888ec1b81a414e427a44829310508352aec38252ee0daa9f8b181b6947de9f",
68
+ "0x0a071f4976abae1a7f722199cf0bfcbe695ef9408a878e7d12a7ca87b7e582a6::lp_rewards::LP_REWARDS",
69
+ ];
85
70
  // Keyed by upgradeCapId. Only dedupes calls that are still in flight — e.g.
86
71
  // initializing N lending markets at once each calling SuilendClient.initialize()
87
72
  // with the same upgrade cap. Deliberately not cached past settlement: this
@@ -105,10 +90,9 @@ export async function getLatestPackageId(suiGrpcClient, upgradeCapId) {
105
90
  return promise;
106
91
  }
107
92
  // Keyed by owner + type + include mask, and scoped to the issuing client: two
108
- // SuiGrpcClients can point at different endpoints or networks (this file builds
109
- // beta-vs-mainnet constants off NEXT_PUBLIC_SUILEND_USE_BETA_MARKET, and a
110
- // frontend swapping RPCs holds both clients briefly), so one client must never
111
- // be served another's in-flight response.
93
+ // SuiGrpcClients can point at different endpoints or networks (a frontend
94
+ // swapping RPCs holds both clients briefly), so one client must never be served
95
+ // another's in-flight response.
112
96
  //
113
97
  // Same in-flight-only contract as latestPackageIdCache above: N lending markets
114
98
  // asking for the same owner's caps at once collapse to one request, and the
@@ -232,7 +216,7 @@ async function fetchDynamicFieldJson(suiGrpcClient, parentId, nameType) {
232
216
  return object.json;
233
217
  }
234
218
  // Scans by type-tag suffix, ignoring the package address: codegen doesn't
235
- // track a struct's originally-defining address, only the current PUBLISHED_AT.
219
+ // track a struct's originally-defining address, only the current published address.
236
220
  async function findBagEntryByTypeSuffix(suiGrpcClient, parentId, typeSuffix) {
237
221
  let cursor = null;
238
222
  while (true) {
@@ -261,8 +245,7 @@ function startLatestPackageIdRead(suiGrpcClient) {
261
245
  return latestPackageId;
262
246
  }
263
247
  async function publishedAtForMainVersion(mainVersion, latestPackageId) {
264
- if (process.env.NEXT_PUBLIC_SUILEND_USE_BETA_MARKET === "true" ||
265
- mainVersion === LATEST_MARKET_VERSION)
248
+ if (mainVersion === LATEST_MARKET_VERSION)
266
249
  return latestPackageId;
267
250
  const pinned = PUBLISHED_AT_BY_MARKET_VERSION.get(mainVersion);
268
251
  if (!pinned)
@@ -394,7 +377,7 @@ export class SuilendClient {
394
377
  */
395
378
  static async initializeAll(lendingMarkets, suiGrpcClient, logPackageId) {
396
379
  // Chosen even for an empty list: move-call targets are built off the
397
- // PUBLISHED_AT module global regardless of how many clients came back. Like
380
+ // published-at override regardless of how many clients came back. Like
398
381
  // initialize(), a call that fails at any read leaves it unchanged.
399
382
  const latestPackageId = startLatestPackageIdRead(suiGrpcClient);
400
383
  const mainRequested = lendingMarkets.some(({ id }) => isMainMarket(id));
@@ -604,7 +587,7 @@ export class SuilendClient {
604
587
  return transaction_;
605
588
  }
606
589
  findReserveArrayIndex(coinType) {
607
- const arrayIndex = this.lendingMarket.reserves.findIndex((r) => normalizeStructTag(r.coinType.name) === normalizeStructTag(coinType));
590
+ const arrayIndex = this.lendingMarket.reserves.findIndex((r) => normalizeStructTag(r.coinType) === normalizeStructTag(coinType));
608
591
  return BigInt(arrayIndex);
609
592
  }
610
593
  submitReserveConfigUpdate(lendingMarketOwnerCapId, transaction, coinType, config) {
@@ -669,7 +652,7 @@ export class SuilendClient {
669
652
  }
670
653
  createObligation(transaction) {
671
654
  return transaction.moveCall({
672
- target: `${PUBLISHED_AT}::lending_market::create_obligation`,
655
+ target: `${getPublishedAt("suilend")}::lending_market::create_obligation`,
673
656
  arguments: [transaction.object(this.lendingMarket.id)],
674
657
  typeArguments: this.lendingMarket.$typeArgs,
675
658
  });
@@ -881,7 +864,7 @@ export class SuilendClient {
881
864
  const [optionalExemption] = transaction.moveCall({
882
865
  target: `0x1::option::some`,
883
866
  typeArguments: [
884
- `${PUBLISHED_AT}::lending_market::RateLimiterExemption<${this.lendingMarket.$typeArgs[0]}, ${withdrawCoinType}>`,
867
+ `${getPublishedAt("suilend")}::lending_market::RateLimiterExemption<${this.lendingMarket.$typeArgs[0]}, ${withdrawCoinType}>`,
885
868
  ],
886
869
  arguments: [exemption],
887
870
  });