@aibtc/mcp-server 1.0.0

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 (178) hide show
  1. package/README.md +340 -0
  2. package/dist/api.d.ts +9 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +79 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/config/contracts.d.ts +169 -0
  7. package/dist/config/contracts.d.ts.map +1 -0
  8. package/dist/config/contracts.js +250 -0
  9. package/dist/config/contracts.js.map +1 -0
  10. package/dist/config/index.d.ts +3 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +3 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/config/networks.d.ts +11 -0
  15. package/dist/config/networks.d.ts.map +1 -0
  16. package/dist/config/networks.js +21 -0
  17. package/dist/config/networks.js.map +1 -0
  18. package/dist/endpoints/index.d.ts +2 -0
  19. package/dist/endpoints/index.d.ts.map +1 -0
  20. package/dist/endpoints/index.js +2 -0
  21. package/dist/endpoints/index.js.map +1 -0
  22. package/dist/endpoints/registry.d.ts +38 -0
  23. package/dist/endpoints/registry.d.ts.map +1 -0
  24. package/dist/endpoints/registry.js +935 -0
  25. package/dist/endpoints/registry.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +79 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/services/bitflow.service.d.ts +159 -0
  31. package/dist/services/bitflow.service.d.ts.map +1 -0
  32. package/dist/services/bitflow.service.js +325 -0
  33. package/dist/services/bitflow.service.js.map +1 -0
  34. package/dist/services/bns.service.d.ts +87 -0
  35. package/dist/services/bns.service.d.ts.map +1 -0
  36. package/dist/services/bns.service.js +312 -0
  37. package/dist/services/bns.service.js.map +1 -0
  38. package/dist/services/defi.service.d.ts +146 -0
  39. package/dist/services/defi.service.d.ts.map +1 -0
  40. package/dist/services/defi.service.js +461 -0
  41. package/dist/services/defi.service.js.map +1 -0
  42. package/dist/services/hiro-api.d.ts +438 -0
  43. package/dist/services/hiro-api.d.ts.map +1 -0
  44. package/dist/services/hiro-api.js +376 -0
  45. package/dist/services/hiro-api.js.map +1 -0
  46. package/dist/services/nft.service.d.ts +70 -0
  47. package/dist/services/nft.service.d.ts.map +1 -0
  48. package/dist/services/nft.service.js +148 -0
  49. package/dist/services/nft.service.js.map +1 -0
  50. package/dist/services/sbtc.service.d.ts +44 -0
  51. package/dist/services/sbtc.service.d.ts.map +1 -0
  52. package/dist/services/sbtc.service.js +100 -0
  53. package/dist/services/sbtc.service.js.map +1 -0
  54. package/dist/services/scaffold.service.d.ts +41 -0
  55. package/dist/services/scaffold.service.d.ts.map +1 -0
  56. package/dist/services/scaffold.service.js +1055 -0
  57. package/dist/services/scaffold.service.js.map +1 -0
  58. package/dist/services/stacking.service.d.ts +58 -0
  59. package/dist/services/stacking.service.d.ts.map +1 -0
  60. package/dist/services/stacking.service.js +153 -0
  61. package/dist/services/stacking.service.js.map +1 -0
  62. package/dist/services/tokens.service.d.ts +62 -0
  63. package/dist/services/tokens.service.d.ts.map +1 -0
  64. package/dist/services/tokens.service.js +119 -0
  65. package/dist/services/tokens.service.js.map +1 -0
  66. package/dist/services/wallet-manager.d.ts +107 -0
  67. package/dist/services/wallet-manager.d.ts.map +1 -0
  68. package/dist/services/wallet-manager.js +389 -0
  69. package/dist/services/wallet-manager.js.map +1 -0
  70. package/dist/services/x402.service.d.ts +26 -0
  71. package/dist/services/x402.service.d.ts.map +1 -0
  72. package/dist/services/x402.service.js +125 -0
  73. package/dist/services/x402.service.js.map +1 -0
  74. package/dist/tools/bitflow.tools.d.ts +3 -0
  75. package/dist/tools/bitflow.tools.d.ts.map +1 -0
  76. package/dist/tools/bitflow.tools.js +501 -0
  77. package/dist/tools/bitflow.tools.js.map +1 -0
  78. package/dist/tools/bns.tools.d.ts +3 -0
  79. package/dist/tools/bns.tools.d.ts.map +1 -0
  80. package/dist/tools/bns.tools.js +164 -0
  81. package/dist/tools/bns.tools.js.map +1 -0
  82. package/dist/tools/contract.tools.d.ts +3 -0
  83. package/dist/tools/contract.tools.d.ts.map +1 -0
  84. package/dist/tools/contract.tools.js +126 -0
  85. package/dist/tools/contract.tools.js.map +1 -0
  86. package/dist/tools/defi.tools.d.ts +3 -0
  87. package/dist/tools/defi.tools.d.ts.map +1 -0
  88. package/dist/tools/defi.tools.js +425 -0
  89. package/dist/tools/defi.tools.js.map +1 -0
  90. package/dist/tools/endpoint.tools.d.ts +3 -0
  91. package/dist/tools/endpoint.tools.d.ts.map +1 -0
  92. package/dist/tools/endpoint.tools.js +157 -0
  93. package/dist/tools/endpoint.tools.js.map +1 -0
  94. package/dist/tools/index.d.ts +6 -0
  95. package/dist/tools/index.d.ts.map +1 -0
  96. package/dist/tools/index.js +52 -0
  97. package/dist/tools/index.js.map +1 -0
  98. package/dist/tools/nft.tools.d.ts +3 -0
  99. package/dist/tools/nft.tools.d.ts.map +1 -0
  100. package/dist/tools/nft.tools.js +154 -0
  101. package/dist/tools/nft.tools.js.map +1 -0
  102. package/dist/tools/openrouter.tools.d.ts +3 -0
  103. package/dist/tools/openrouter.tools.d.ts.map +1 -0
  104. package/dist/tools/openrouter.tools.js +664 -0
  105. package/dist/tools/openrouter.tools.js.map +1 -0
  106. package/dist/tools/query.tools.d.ts +3 -0
  107. package/dist/tools/query.tools.d.ts.map +1 -0
  108. package/dist/tools/query.tools.js +209 -0
  109. package/dist/tools/query.tools.js.map +1 -0
  110. package/dist/tools/sbtc.tools.d.ts +3 -0
  111. package/dist/tools/sbtc.tools.d.ts.map +1 -0
  112. package/dist/tools/sbtc.tools.js +103 -0
  113. package/dist/tools/sbtc.tools.js.map +1 -0
  114. package/dist/tools/scaffold.tools.d.ts +3 -0
  115. package/dist/tools/scaffold.tools.d.ts.map +1 -0
  116. package/dist/tools/scaffold.tools.js +216 -0
  117. package/dist/tools/scaffold.tools.js.map +1 -0
  118. package/dist/tools/stacking.tools.d.ts +3 -0
  119. package/dist/tools/stacking.tools.d.ts.map +1 -0
  120. package/dist/tools/stacking.tools.js +112 -0
  121. package/dist/tools/stacking.tools.js.map +1 -0
  122. package/dist/tools/tokens.tools.d.ts +3 -0
  123. package/dist/tools/tokens.tools.d.ts.map +1 -0
  124. package/dist/tools/tokens.tools.js +154 -0
  125. package/dist/tools/tokens.tools.js.map +1 -0
  126. package/dist/tools/transfer.tools.d.ts +3 -0
  127. package/dist/tools/transfer.tools.d.ts.map +1 -0
  128. package/dist/tools/transfer.tools.js +62 -0
  129. package/dist/tools/transfer.tools.js.map +1 -0
  130. package/dist/tools/wallet-management.tools.d.ts +6 -0
  131. package/dist/tools/wallet-management.tools.d.ts.map +1 -0
  132. package/dist/tools/wallet-management.tools.js +390 -0
  133. package/dist/tools/wallet-management.tools.js.map +1 -0
  134. package/dist/tools/wallet.tools.d.ts +3 -0
  135. package/dist/tools/wallet.tools.d.ts.map +1 -0
  136. package/dist/tools/wallet.tools.js +105 -0
  137. package/dist/tools/wallet.tools.js.map +1 -0
  138. package/dist/transactions/builder.d.ts +56 -0
  139. package/dist/transactions/builder.d.ts.map +1 -0
  140. package/dist/transactions/builder.js +134 -0
  141. package/dist/transactions/builder.js.map +1 -0
  142. package/dist/transactions/clarity-values.d.ts +67 -0
  143. package/dist/transactions/clarity-values.d.ts.map +1 -0
  144. package/dist/transactions/clarity-values.js +169 -0
  145. package/dist/transactions/clarity-values.js.map +1 -0
  146. package/dist/transactions/post-conditions.d.ts +27 -0
  147. package/dist/transactions/post-conditions.d.ts.map +1 -0
  148. package/dist/transactions/post-conditions.js +101 -0
  149. package/dist/transactions/post-conditions.js.map +1 -0
  150. package/dist/utils/encryption.d.ts +33 -0
  151. package/dist/utils/encryption.d.ts.map +1 -0
  152. package/dist/utils/encryption.js +110 -0
  153. package/dist/utils/encryption.js.map +1 -0
  154. package/dist/utils/errors.d.ts +84 -0
  155. package/dist/utils/errors.d.ts.map +1 -0
  156. package/dist/utils/errors.js +132 -0
  157. package/dist/utils/errors.js.map +1 -0
  158. package/dist/utils/formatting.d.ts +51 -0
  159. package/dist/utils/formatting.d.ts.map +1 -0
  160. package/dist/utils/formatting.js +114 -0
  161. package/dist/utils/formatting.js.map +1 -0
  162. package/dist/utils/index.d.ts +6 -0
  163. package/dist/utils/index.d.ts.map +1 -0
  164. package/dist/utils/index.js +6 -0
  165. package/dist/utils/index.js.map +1 -0
  166. package/dist/utils/storage.d.ts +90 -0
  167. package/dist/utils/storage.d.ts.map +1 -0
  168. package/dist/utils/storage.js +196 -0
  169. package/dist/utils/storage.js.map +1 -0
  170. package/dist/utils/validation.d.ts +67 -0
  171. package/dist/utils/validation.d.ts.map +1 -0
  172. package/dist/utils/validation.js +74 -0
  173. package/dist/utils/validation.js.map +1 -0
  174. package/dist/wallet.d.ts +86 -0
  175. package/dist/wallet.d.ts.map +1 -0
  176. package/dist/wallet.js +279 -0
  177. package/dist/wallet.js.map +1 -0
  178. package/package.json +58 -0
@@ -0,0 +1,461 @@
1
+ import { uintCV, contractPrincipalCV, cvToJSON, hexToCV, PostConditionMode, Pc, principalCV, broadcastTransaction, makeContractCall, listCV, tupleCV, } from "@stacks/transactions";
2
+ import { STACKS_MAINNET } from "@stacks/network";
3
+ import { AlexSDK, Currency } from "alex-sdk";
4
+ import { getHiroApi } from "./hiro-api.js";
5
+ import { getAlexContracts, getZestContracts, parseContractId, ZEST_ASSETS, ZEST_ASSETS_LIST, } from "../config/index.js";
6
+ import { callContract } from "../transactions/builder.js";
7
+ // ============================================================================
8
+ // ALEX DEX Service (using alex-sdk)
9
+ // ============================================================================
10
+ export class AlexDexService {
11
+ network;
12
+ sdk;
13
+ hiro;
14
+ contracts;
15
+ tokenInfoCache = null;
16
+ constructor(network) {
17
+ this.network = network;
18
+ this.sdk = new AlexSDK();
19
+ this.hiro = getHiroApi(network);
20
+ this.contracts = getAlexContracts(network);
21
+ }
22
+ ensureMainnet() {
23
+ if (this.network !== "mainnet") {
24
+ throw new Error("ALEX DEX is only available on mainnet");
25
+ }
26
+ }
27
+ /**
28
+ * Get all swappable token info from SDK (cached)
29
+ */
30
+ async getTokenInfos() {
31
+ if (!this.tokenInfoCache) {
32
+ this.tokenInfoCache = await this.sdk.fetchSwappableCurrency();
33
+ }
34
+ return this.tokenInfoCache;
35
+ }
36
+ /**
37
+ * Convert a token identifier (contract ID or symbol) to an ALEX SDK Currency
38
+ */
39
+ async resolveCurrency(tokenId) {
40
+ // Handle common aliases
41
+ const normalizedId = tokenId.toUpperCase();
42
+ if (normalizedId === "STX" || normalizedId === "WSTX") {
43
+ return Currency.STX;
44
+ }
45
+ if (normalizedId === "ALEX") {
46
+ return Currency.ALEX;
47
+ }
48
+ // Fetch available tokens from SDK
49
+ const tokens = await this.getTokenInfos();
50
+ for (const token of tokens) {
51
+ // Match by contract ID (strip the ::asset suffix for comparison)
52
+ const wrapContract = token.wrapToken.split("::")[0];
53
+ const underlyingContract = token.underlyingToken.split("::")[0];
54
+ if (wrapContract === tokenId || underlyingContract === tokenId) {
55
+ return token.id;
56
+ }
57
+ // Match by symbol (case-insensitive)
58
+ if (token.name.toLowerCase() === tokenId.toLowerCase()) {
59
+ return token.id;
60
+ }
61
+ }
62
+ throw new Error(`Unknown token: ${tokenId}. Use alex_list_pools to see available tokens.`);
63
+ }
64
+ /**
65
+ * Get a swap quote for token X to token Y using ALEX SDK
66
+ */
67
+ async getSwapQuote(tokenX, tokenY, amountIn, _senderAddress) {
68
+ this.ensureMainnet();
69
+ const currencyX = await this.resolveCurrency(tokenX);
70
+ const currencyY = await this.resolveCurrency(tokenY);
71
+ const amountOut = await this.sdk.getAmountTo(currencyX, amountIn, currencyY);
72
+ // Get route info
73
+ const routeCurrencies = await this.sdk.getRouter(currencyX, currencyY);
74
+ return {
75
+ tokenIn: tokenX,
76
+ tokenOut: tokenY,
77
+ amountIn: amountIn.toString(),
78
+ amountOut: amountOut.toString(),
79
+ route: routeCurrencies.map(c => c.toString()),
80
+ };
81
+ }
82
+ /**
83
+ * Execute a swap using ALEX SDK
84
+ * The SDK handles STX wrapping internally
85
+ */
86
+ async swap(account, tokenX, tokenY, amountIn, minAmountOut) {
87
+ this.ensureMainnet();
88
+ const currencyX = await this.resolveCurrency(tokenX);
89
+ const currencyY = await this.resolveCurrency(tokenY);
90
+ // Use SDK to build the swap transaction parameters
91
+ const txParams = await this.sdk.runSwap(account.address, currencyX, currencyY, amountIn, minAmountOut);
92
+ // Use makeContractCall to build and sign the transaction
93
+ const transaction = await makeContractCall({
94
+ contractAddress: txParams.contractAddress,
95
+ contractName: txParams.contractName,
96
+ functionName: txParams.functionName,
97
+ functionArgs: txParams.functionArgs,
98
+ postConditions: txParams.postConditions,
99
+ senderKey: account.privateKey,
100
+ network: STACKS_MAINNET,
101
+ postConditionMode: PostConditionMode.Deny,
102
+ });
103
+ const broadcastResult = await broadcastTransaction({
104
+ transaction,
105
+ network: STACKS_MAINNET
106
+ });
107
+ if ("error" in broadcastResult) {
108
+ throw new Error(`Broadcast failed: ${broadcastResult.error} - ${broadcastResult.reason}`);
109
+ }
110
+ return {
111
+ txid: broadcastResult.txid,
112
+ rawTx: Buffer.from(transaction.serialize()).toString("hex"),
113
+ };
114
+ }
115
+ /**
116
+ * Get pool information
117
+ */
118
+ async getPoolInfo(tokenX, tokenY, senderAddress) {
119
+ this.ensureMainnet();
120
+ if (!this.contracts)
121
+ return null;
122
+ try {
123
+ const result = await this.hiro.callReadOnlyFunction(this.contracts.ammPool, "get-pool-details", [
124
+ contractPrincipalCV(...parseContractIdTuple(tokenX)),
125
+ contractPrincipalCV(...parseContractIdTuple(tokenY)),
126
+ uintCV(100000000n), // factor
127
+ ], senderAddress);
128
+ if (!result.okay || !result.result) {
129
+ return null;
130
+ }
131
+ const decoded = cvToJSON(hexToCV(result.result));
132
+ // Parse the pool details response
133
+ if (decoded.value && typeof decoded.value === "object") {
134
+ return {
135
+ poolId: `${tokenX}-${tokenY}`,
136
+ tokenX,
137
+ tokenY,
138
+ reserveX: decoded.value["balance-x"]?.value || "0",
139
+ reserveY: decoded.value["balance-y"]?.value || "0",
140
+ totalShares: decoded.value["total-supply"]?.value,
141
+ };
142
+ }
143
+ return null;
144
+ }
145
+ catch {
146
+ return null;
147
+ }
148
+ }
149
+ /**
150
+ * List all available pools on ALEX DEX
151
+ * Uses SDK to fetch swappable currencies
152
+ */
153
+ async listPools(limit = 50) {
154
+ this.ensureMainnet();
155
+ if (!this.contracts)
156
+ return [];
157
+ const pools = [];
158
+ for (let i = 1; i <= limit; i++) {
159
+ try {
160
+ const result = await this.hiro.callReadOnlyFunction(this.contracts.ammPool, "get-pool-details-by-id", [uintCV(BigInt(i))], this.contracts.ammPool.split(".")[0]);
161
+ if (!result.okay || !result.result) {
162
+ break;
163
+ }
164
+ const decoded = cvToJSON(hexToCV(result.result));
165
+ if (!decoded.success || !decoded.value?.value) {
166
+ break;
167
+ }
168
+ const pool = decoded.value.value;
169
+ const tokenX = pool["token-x"]?.value || "";
170
+ const tokenY = pool["token-y"]?.value || "";
171
+ const factor = pool["factor"]?.value || "0";
172
+ // Extract symbol from contract name
173
+ const tokenXSymbol = tokenX.split(".")[1]?.replace("token-", "") || tokenX;
174
+ const tokenYSymbol = tokenY.split(".")[1]?.replace("token-", "") || tokenY;
175
+ pools.push({
176
+ id: i,
177
+ tokenX,
178
+ tokenY,
179
+ tokenXSymbol,
180
+ tokenYSymbol,
181
+ factor,
182
+ });
183
+ }
184
+ catch {
185
+ // No more pools
186
+ break;
187
+ }
188
+ }
189
+ return pools;
190
+ }
191
+ /**
192
+ * Get all swappable currencies from ALEX SDK
193
+ */
194
+ async getSwappableCurrencies() {
195
+ this.ensureMainnet();
196
+ return await this.getTokenInfos();
197
+ }
198
+ /**
199
+ * Get latest prices from ALEX SDK
200
+ */
201
+ async getLatestPrices() {
202
+ this.ensureMainnet();
203
+ const prices = await this.sdk.getLatestPrices();
204
+ // Convert to regular object with string keys
205
+ const result = {};
206
+ for (const [key, value] of Object.entries(prices)) {
207
+ if (value !== undefined) {
208
+ result[key] = value;
209
+ }
210
+ }
211
+ return result;
212
+ }
213
+ }
214
+ // ============================================================================
215
+ // Zest Protocol Service
216
+ // ============================================================================
217
+ export class ZestProtocolService {
218
+ network;
219
+ hiro;
220
+ contracts;
221
+ constructor(network) {
222
+ this.network = network;
223
+ this.hiro = getHiroApi(network);
224
+ this.contracts = getZestContracts(network);
225
+ }
226
+ ensureMainnet() {
227
+ if (!this.contracts) {
228
+ throw new Error("Zest Protocol is only available on mainnet");
229
+ }
230
+ }
231
+ /**
232
+ * Get asset configuration from ZEST_ASSETS by symbol or contract ID
233
+ */
234
+ getAssetConfig(assetOrSymbol) {
235
+ // Check by symbol first (case-insensitive)
236
+ const bySymbol = Object.values(ZEST_ASSETS).find((a) => a.symbol.toLowerCase() === assetOrSymbol.toLowerCase());
237
+ if (bySymbol)
238
+ return bySymbol;
239
+ // Check by token contract ID
240
+ const byContract = Object.values(ZEST_ASSETS).find((a) => a.token === assetOrSymbol);
241
+ if (byContract)
242
+ return byContract;
243
+ throw new Error(`Unknown Zest asset: ${assetOrSymbol}. Use zest_list_assets to see available assets.`);
244
+ }
245
+ /**
246
+ * Build the assets-list CV required for borrow/withdraw operations
247
+ * This is a list of tuples containing (asset, lp-token, oracle) for all supported assets
248
+ */
249
+ buildAssetsListCV() {
250
+ return listCV(ZEST_ASSETS_LIST.map((asset) => {
251
+ const [assetAddr, assetName] = asset.token.split(".");
252
+ const [lpAddr, lpName] = asset.lpToken.split(".");
253
+ const [oracleAddr, oracleName] = asset.oracle.split(".");
254
+ return tupleCV({
255
+ asset: contractPrincipalCV(assetAddr, assetName),
256
+ "lp-token": contractPrincipalCV(lpAddr, lpName),
257
+ oracle: contractPrincipalCV(oracleAddr, oracleName),
258
+ });
259
+ }));
260
+ }
261
+ /**
262
+ * Get all supported assets from Zest Protocol
263
+ * Returns the hardcoded asset list with full metadata
264
+ */
265
+ async getAssets() {
266
+ this.ensureMainnet();
267
+ return Object.values(ZEST_ASSETS).map((asset) => ({
268
+ contractId: asset.token,
269
+ symbol: asset.symbol,
270
+ name: asset.name,
271
+ decimals: asset.decimals,
272
+ }));
273
+ }
274
+ /**
275
+ * Resolve an asset symbol or contract ID to a full contract ID
276
+ */
277
+ async resolveAsset(assetOrSymbol) {
278
+ // If it looks like a contract ID, return as-is
279
+ if (assetOrSymbol.includes(".")) {
280
+ return assetOrSymbol;
281
+ }
282
+ const config = this.getAssetConfig(assetOrSymbol);
283
+ return config.token;
284
+ }
285
+ /**
286
+ * Get user's reserve/position data for an asset
287
+ */
288
+ async getUserPosition(asset, userAddress) {
289
+ this.ensureMainnet();
290
+ try {
291
+ const result = await this.hiro.callReadOnlyFunction(this.contracts.poolBorrow, "get-user-reserve-data", [
292
+ principalCV(userAddress),
293
+ contractPrincipalCV(...parseContractIdTuple(asset)),
294
+ ], userAddress);
295
+ if (!result.okay || !result.result) {
296
+ return null;
297
+ }
298
+ const decoded = cvToJSON(hexToCV(result.result));
299
+ if (decoded && typeof decoded === "object") {
300
+ return {
301
+ asset,
302
+ supplied: decoded["current-a-token-balance"]?.value || "0",
303
+ borrowed: decoded["current-variable-debt"]?.value || "0",
304
+ };
305
+ }
306
+ return null;
307
+ }
308
+ catch {
309
+ return null;
310
+ }
311
+ }
312
+ /**
313
+ * Supply assets to Zest lending pool
314
+ *
315
+ * Contract signature: supply(lp, pool-reserve, asset, amount, owner)
316
+ */
317
+ async supply(account, asset, amount, onBehalfOf) {
318
+ this.ensureMainnet();
319
+ const assetConfig = this.getAssetConfig(asset);
320
+ const { address, name } = parseContractId(this.contracts.poolBorrow);
321
+ const [lpAddr, lpName] = assetConfig.lpToken.split(".");
322
+ const [assetAddr, assetName] = assetConfig.token.split(".");
323
+ const functionArgs = [
324
+ contractPrincipalCV(lpAddr, lpName), // lp
325
+ principalCV(this.contracts.poolReserve), // pool-reserve
326
+ contractPrincipalCV(assetAddr, assetName), // asset
327
+ uintCV(amount), // amount
328
+ principalCV(onBehalfOf || account.address), // owner
329
+ ];
330
+ // Post-condition: user will send the asset
331
+ const postConditions = [
332
+ Pc.principal(account.address)
333
+ .willSendEq(amount)
334
+ .ft(assetConfig.token, assetName),
335
+ ];
336
+ return callContract(account, {
337
+ contractAddress: address,
338
+ contractName: name,
339
+ functionName: "supply",
340
+ functionArgs,
341
+ postConditionMode: PostConditionMode.Deny,
342
+ postConditions,
343
+ });
344
+ }
345
+ /**
346
+ * Withdraw assets from Zest lending pool
347
+ *
348
+ * Contract signature: withdraw(pool-reserve, asset, lp, oracle, assets, amount, owner)
349
+ */
350
+ async withdraw(account, asset, amount) {
351
+ this.ensureMainnet();
352
+ const assetConfig = this.getAssetConfig(asset);
353
+ const { address, name } = parseContractId(this.contracts.poolBorrow);
354
+ const [assetAddr, assetName] = assetConfig.token.split(".");
355
+ const [lpAddr, lpName] = assetConfig.lpToken.split(".");
356
+ const [oracleAddr, oracleName] = assetConfig.oracle.split(".");
357
+ const functionArgs = [
358
+ principalCV(this.contracts.poolReserve), // pool-reserve
359
+ contractPrincipalCV(assetAddr, assetName), // asset
360
+ contractPrincipalCV(lpAddr, lpName), // lp
361
+ contractPrincipalCV(oracleAddr, oracleName), // oracle
362
+ this.buildAssetsListCV(), // assets
363
+ uintCV(amount), // amount
364
+ principalCV(account.address), // owner
365
+ ];
366
+ return callContract(account, {
367
+ contractAddress: address,
368
+ contractName: name,
369
+ functionName: "withdraw",
370
+ functionArgs,
371
+ postConditionMode: PostConditionMode.Allow, // Allow receiving tokens
372
+ });
373
+ }
374
+ /**
375
+ * Borrow assets from Zest lending pool
376
+ *
377
+ * Contract signature: borrow(pool-reserve, oracle, asset-to-borrow, lp, assets, amount, fee-calculator, interest-rate-mode, owner)
378
+ */
379
+ async borrow(account, asset, amount) {
380
+ this.ensureMainnet();
381
+ const assetConfig = this.getAssetConfig(asset);
382
+ const { address, name } = parseContractId(this.contracts.poolBorrow);
383
+ const [assetAddr, assetName] = assetConfig.token.split(".");
384
+ const [lpAddr, lpName] = assetConfig.lpToken.split(".");
385
+ const [oracleAddr, oracleName] = assetConfig.oracle.split(".");
386
+ const functionArgs = [
387
+ principalCV(this.contracts.poolReserve), // pool-reserve
388
+ contractPrincipalCV(oracleAddr, oracleName), // oracle
389
+ contractPrincipalCV(assetAddr, assetName), // asset-to-borrow
390
+ contractPrincipalCV(lpAddr, lpName), // lp
391
+ this.buildAssetsListCV(), // assets
392
+ uintCV(amount), // amount-to-be-borrowed
393
+ principalCV(this.contracts.feesCalculator), // fee-calculator
394
+ uintCV(BigInt(0)), // interest-rate-mode (0 = variable)
395
+ principalCV(account.address), // owner
396
+ ];
397
+ return callContract(account, {
398
+ contractAddress: address,
399
+ contractName: name,
400
+ functionName: "borrow",
401
+ functionArgs,
402
+ postConditionMode: PostConditionMode.Allow, // Allow receiving borrowed tokens
403
+ });
404
+ }
405
+ /**
406
+ * Repay borrowed assets
407
+ *
408
+ * Contract signature: repay(asset, amount-to-repay, on-behalf-of, payer)
409
+ */
410
+ async repay(account, asset, amount, onBehalfOf) {
411
+ this.ensureMainnet();
412
+ const assetConfig = this.getAssetConfig(asset);
413
+ const { address, name } = parseContractId(this.contracts.poolBorrow);
414
+ const [assetAddr, assetName] = assetConfig.token.split(".");
415
+ const functionArgs = [
416
+ contractPrincipalCV(assetAddr, assetName), // asset
417
+ uintCV(amount), // amount-to-repay
418
+ principalCV(onBehalfOf || account.address), // on-behalf-of
419
+ principalCV(account.address), // payer
420
+ ];
421
+ // Post-condition: user will send the asset to repay
422
+ const postConditions = [
423
+ Pc.principal(account.address)
424
+ .willSendLte(amount)
425
+ .ft(assetConfig.token, assetName),
426
+ ];
427
+ return callContract(account, {
428
+ contractAddress: address,
429
+ contractName: name,
430
+ functionName: "repay",
431
+ functionArgs,
432
+ postConditionMode: PostConditionMode.Deny,
433
+ postConditions,
434
+ });
435
+ }
436
+ }
437
+ // ============================================================================
438
+ // Helper Functions
439
+ // ============================================================================
440
+ function parseContractIdTuple(contractId) {
441
+ const { address, name } = parseContractId(contractId);
442
+ return [address, name];
443
+ }
444
+ // ============================================================================
445
+ // Service Singletons
446
+ // ============================================================================
447
+ let _alexServiceInstance = null;
448
+ let _zestServiceInstance = null;
449
+ export function getAlexDexService(network) {
450
+ if (!_alexServiceInstance || _alexServiceInstance["network"] !== network) {
451
+ _alexServiceInstance = new AlexDexService(network);
452
+ }
453
+ return _alexServiceInstance;
454
+ }
455
+ export function getZestProtocolService(network) {
456
+ if (!_zestServiceInstance || _zestServiceInstance["network"] !== network) {
457
+ _zestServiceInstance = new ZestProtocolService(network);
458
+ }
459
+ return _zestServiceInstance;
460
+ }
461
+ //# sourceMappingURL=defi.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defi.service.js","sourceRoot":"","sources":["../../src/services/defi.service.ts"],"names":[],"mappings":"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"}