@aibtc/mcp-server 1.35.0 → 1.36.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 (60) hide show
  1. package/README.md +7 -0
  2. package/dist/config/contracts.d.ts +14 -14
  3. package/dist/config/contracts.js +7 -7
  4. package/dist/config/contracts.js.map +1 -1
  5. package/dist/services/defi.service.d.ts.map +1 -1
  6. package/dist/services/defi.service.js +4 -17
  7. package/dist/services/defi.service.js.map +1 -1
  8. package/dist/services/mempool-api.d.ts +64 -0
  9. package/dist/services/mempool-api.d.ts.map +1 -1
  10. package/dist/services/mempool-api.js +44 -0
  11. package/dist/services/mempool-api.js.map +1 -1
  12. package/dist/services/tenero-api.d.ts +76 -0
  13. package/dist/services/tenero-api.d.ts.map +1 -0
  14. package/dist/services/tenero-api.js +108 -0
  15. package/dist/services/tenero-api.js.map +1 -0
  16. package/dist/services/wallet-manager.d.ts.map +1 -1
  17. package/dist/services/wallet-manager.js +7 -0
  18. package/dist/services/wallet-manager.js.map +1 -1
  19. package/dist/tools/contract.tools.d.ts.map +1 -1
  20. package/dist/tools/contract.tools.js +3 -2
  21. package/dist/tools/contract.tools.js.map +1 -1
  22. package/dist/tools/dual-stacking.tools.d.ts +3 -0
  23. package/dist/tools/dual-stacking.tools.d.ts.map +1 -0
  24. package/dist/tools/dual-stacking.tools.js +281 -0
  25. package/dist/tools/dual-stacking.tools.js.map +1 -0
  26. package/dist/tools/inbox.tools.d.ts.map +1 -1
  27. package/dist/tools/inbox.tools.js +5 -0
  28. package/dist/tools/inbox.tools.js.map +1 -1
  29. package/dist/tools/index.d.ts.map +1 -1
  30. package/dist/tools/index.js +9 -0
  31. package/dist/tools/index.js.map +1 -1
  32. package/dist/tools/mempool.tools.d.ts +13 -0
  33. package/dist/tools/mempool.tools.d.ts.map +1 -0
  34. package/dist/tools/mempool.tools.js +125 -0
  35. package/dist/tools/mempool.tools.js.map +1 -0
  36. package/dist/tools/relay-diagnostic.tools.d.ts.map +1 -1
  37. package/dist/tools/relay-diagnostic.tools.js +27 -4
  38. package/dist/tools/relay-diagnostic.tools.js.map +1 -1
  39. package/dist/tools/signing.tools.d.ts.map +1 -1
  40. package/dist/tools/signing.tools.js +19 -6
  41. package/dist/tools/signing.tools.js.map +1 -1
  42. package/dist/tools/skill-mappings.d.ts.map +1 -1
  43. package/dist/tools/skill-mappings.js +8 -0
  44. package/dist/tools/skill-mappings.js.map +1 -1
  45. package/dist/tools/tenero.tools.d.ts +22 -0
  46. package/dist/tools/tenero.tools.d.ts.map +1 -0
  47. package/dist/tools/tenero.tools.js +318 -0
  48. package/dist/tools/tenero.tools.js.map +1 -0
  49. package/dist/tools/transfer.tools.js +1 -1
  50. package/dist/tools/transfer.tools.js.map +1 -1
  51. package/dist/transactions/builder.d.ts +12 -1
  52. package/dist/transactions/builder.d.ts.map +1 -1
  53. package/dist/transactions/builder.js +113 -4
  54. package/dist/transactions/builder.js.map +1 -1
  55. package/dist/utils/fee.d.ts +15 -0
  56. package/dist/utils/fee.d.ts.map +1 -1
  57. package/dist/utils/fee.js +36 -4
  58. package/dist/utils/fee.js.map +1 -1
  59. package/package.json +1 -1
  60. package/skill/SKILL.md +1 -1
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Tenero market analytics tools
3
+ *
4
+ * Read-only MCP tools for Stacks ecosystem market data via the Tenero API
5
+ * (formerly STXTools) at https://api.tenero.io. No authentication required.
6
+ *
7
+ * Tools:
8
+ * - tenero_token_info — Token metadata, price, and volume
9
+ * - tenero_market_summary — Price history and pool liquidity for a token
10
+ * - tenero_market_stats — Overall market volume, netflow, and active traders
11
+ * - tenero_top_gainers — Top gaining tokens by 24h price change
12
+ * - tenero_top_losers — Top losing tokens by 24h price change
13
+ * - tenero_trending_pools — Trending DEX liquidity pools by 1h volume
14
+ * - tenero_wallet_trades — Trade history for a wallet address
15
+ * - tenero_wallet_holdings — Token holdings with current USD value for a wallet
16
+ * - tenero_whale_trades — Recent large trades above threshold value
17
+ * - tenero_holder_stats — Token holder distribution and concentration stats
18
+ * - tenero_search — Search tokens, pools, and wallets by name or address
19
+ */
20
+ import { z } from "zod";
21
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
22
+ import { getTokenInfo, getMarketSummary, getMarketStats, getTopGainers, getTopLosers, getTrendingPools, getWalletTrades, getWalletHoldings, getWhaleTrades, getHolderStats, searchTokens, } from "../services/tenero-api.js";
23
+ export function registerTeneroTools(server) {
24
+ // Token info
25
+ server.registerTool("tenero_token_info", {
26
+ description: "Get token details including metadata, current price, market cap, and 24h volume. " +
27
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
28
+ inputSchema: {
29
+ contractId: z
30
+ .string()
31
+ .describe("Token contract address in format PRINCIPAL.contract-name " +
32
+ "(e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex)"),
33
+ chain: z
34
+ .string()
35
+ .optional()
36
+ .default("stacks")
37
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
38
+ },
39
+ }, async ({ contractId, chain }) => {
40
+ try {
41
+ const data = await getTokenInfo(contractId, chain);
42
+ return createJsonResponse(data);
43
+ }
44
+ catch (error) {
45
+ return createErrorResponse(error);
46
+ }
47
+ });
48
+ // Market summary (per token)
49
+ server.registerTool("tenero_market_summary", {
50
+ description: "Get token market summary including price history, 24h volume, and pool liquidity. " +
51
+ "Returns weighted price across all pools trading this token. " +
52
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
53
+ inputSchema: {
54
+ contractId: z
55
+ .string()
56
+ .describe("Token contract address in format PRINCIPAL.contract-name " +
57
+ "(e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex)"),
58
+ chain: z
59
+ .string()
60
+ .optional()
61
+ .default("stacks")
62
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
63
+ },
64
+ }, async ({ contractId, chain }) => {
65
+ try {
66
+ const data = await getMarketSummary(contractId, chain);
67
+ return createJsonResponse(data);
68
+ }
69
+ catch (error) {
70
+ return createErrorResponse(error);
71
+ }
72
+ });
73
+ // Overall market stats
74
+ server.registerTool("tenero_market_stats", {
75
+ description: "Get overall Stacks ecosystem market statistics including total volume, " +
76
+ "buy/sell netflow, unique traders, and active pools. " +
77
+ "Returns a time series of daily stats for recent periods. " +
78
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
79
+ inputSchema: {
80
+ chain: z
81
+ .string()
82
+ .optional()
83
+ .default("stacks")
84
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
85
+ },
86
+ }, async ({ chain }) => {
87
+ try {
88
+ const data = await getMarketStats(chain);
89
+ return createJsonResponse(data);
90
+ }
91
+ catch (error) {
92
+ return createErrorResponse(error);
93
+ }
94
+ });
95
+ // Top gainers
96
+ server.registerTool("tenero_top_gainers", {
97
+ description: "List top gaining tokens by 24h price change percentage on the Stacks ecosystem. " +
98
+ "Useful for spotting momentum and trending assets. " +
99
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
100
+ inputSchema: {
101
+ limit: z
102
+ .number()
103
+ .int()
104
+ .min(1)
105
+ .max(50)
106
+ .optional()
107
+ .default(10)
108
+ .describe("Maximum number of tokens to return (default: 10, max: 50)"),
109
+ chain: z
110
+ .string()
111
+ .optional()
112
+ .default("stacks")
113
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
114
+ },
115
+ }, async ({ limit, chain }) => {
116
+ try {
117
+ const data = await getTopGainers(limit, chain);
118
+ return createJsonResponse(data);
119
+ }
120
+ catch (error) {
121
+ return createErrorResponse(error);
122
+ }
123
+ });
124
+ // Top losers
125
+ server.registerTool("tenero_top_losers", {
126
+ description: "List top losing tokens by 24h price change percentage on the Stacks ecosystem. " +
127
+ "Useful for identifying underperforming assets or potential reversal candidates. " +
128
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
129
+ inputSchema: {
130
+ limit: z
131
+ .number()
132
+ .int()
133
+ .min(1)
134
+ .max(50)
135
+ .optional()
136
+ .default(10)
137
+ .describe("Maximum number of tokens to return (default: 10, max: 50)"),
138
+ chain: z
139
+ .string()
140
+ .optional()
141
+ .default("stacks")
142
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
143
+ },
144
+ }, async ({ limit, chain }) => {
145
+ try {
146
+ const data = await getTopLosers(limit, chain);
147
+ return createJsonResponse(data);
148
+ }
149
+ catch (error) {
150
+ return createErrorResponse(error);
151
+ }
152
+ });
153
+ // Trending pools
154
+ server.registerTool("tenero_trending_pools", {
155
+ description: "List trending DEX liquidity pools by volume over the last hour. " +
156
+ "Includes pool platform, token pair, volume, and liquidity details. " +
157
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
158
+ inputSchema: {
159
+ limit: z
160
+ .number()
161
+ .int()
162
+ .min(1)
163
+ .max(50)
164
+ .optional()
165
+ .default(10)
166
+ .describe("Maximum number of pools to return (default: 10, max: 50)"),
167
+ chain: z
168
+ .string()
169
+ .optional()
170
+ .default("stacks")
171
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
172
+ },
173
+ }, async ({ limit, chain }) => {
174
+ try {
175
+ const data = await getTrendingPools(limit, chain);
176
+ return createJsonResponse(data);
177
+ }
178
+ catch (error) {
179
+ return createErrorResponse(error);
180
+ }
181
+ });
182
+ // Wallet trades
183
+ server.registerTool("tenero_wallet_trades", {
184
+ description: "Get trade history for a Stacks wallet address. " +
185
+ "Returns recent buy/sell events with token, pool, and USD value details. " +
186
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
187
+ inputSchema: {
188
+ address: z
189
+ .string()
190
+ .describe("Stacks wallet address (SP... or SM...)"),
191
+ limit: z
192
+ .number()
193
+ .int()
194
+ .min(1)
195
+ .max(100)
196
+ .optional()
197
+ .default(20)
198
+ .describe("Maximum number of trades to return (default: 20, max: 100)"),
199
+ chain: z
200
+ .string()
201
+ .optional()
202
+ .default("stacks")
203
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
204
+ },
205
+ }, async ({ address, limit, chain }) => {
206
+ try {
207
+ const data = await getWalletTrades(address, limit, chain);
208
+ return createJsonResponse(data);
209
+ }
210
+ catch (error) {
211
+ return createErrorResponse(error);
212
+ }
213
+ });
214
+ // Wallet holdings
215
+ server.registerTool("tenero_wallet_holdings", {
216
+ description: "Get token holdings with current USD value for a Stacks wallet address. " +
217
+ "Shows portfolio composition including token balances and estimated values. " +
218
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
219
+ inputSchema: {
220
+ address: z
221
+ .string()
222
+ .describe("Stacks wallet address (SP... or SM...)"),
223
+ chain: z
224
+ .string()
225
+ .optional()
226
+ .default("stacks")
227
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
228
+ },
229
+ }, async ({ address, chain }) => {
230
+ try {
231
+ const data = await getWalletHoldings(address, chain);
232
+ return createJsonResponse(data);
233
+ }
234
+ catch (error) {
235
+ return createErrorResponse(error);
236
+ }
237
+ });
238
+ // Whale trades
239
+ server.registerTool("tenero_whale_trades", {
240
+ description: "Get recent large/whale trades above threshold value on the Stacks ecosystem. " +
241
+ "Useful for tracking smart money and large market movements. " +
242
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
243
+ inputSchema: {
244
+ limit: z
245
+ .number()
246
+ .int()
247
+ .min(1)
248
+ .max(50)
249
+ .optional()
250
+ .default(10)
251
+ .describe("Maximum number of whale trades to return (default: 10, max: 50)"),
252
+ chain: z
253
+ .string()
254
+ .optional()
255
+ .default("stacks")
256
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
257
+ },
258
+ }, async ({ limit, chain }) => {
259
+ try {
260
+ const data = await getWhaleTrades(limit, chain);
261
+ return createJsonResponse(data);
262
+ }
263
+ catch (error) {
264
+ return createErrorResponse(error);
265
+ }
266
+ });
267
+ // Holder stats
268
+ server.registerTool("tenero_holder_stats", {
269
+ description: "Get token holder distribution and concentration statistics. " +
270
+ "Shows total holders, top holder percentages, and Gini coefficient. " +
271
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
272
+ inputSchema: {
273
+ contractId: z
274
+ .string()
275
+ .describe("Token contract address in format PRINCIPAL.contract-name " +
276
+ "(e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex)"),
277
+ chain: z
278
+ .string()
279
+ .optional()
280
+ .default("stacks")
281
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
282
+ },
283
+ }, async ({ contractId, chain }) => {
284
+ try {
285
+ const data = await getHolderStats(contractId, chain);
286
+ return createJsonResponse(data);
287
+ }
288
+ catch (error) {
289
+ return createErrorResponse(error);
290
+ }
291
+ });
292
+ // Search
293
+ server.registerTool("tenero_search", {
294
+ description: "Search tokens, pools, and wallets by name, symbol, or contract address. " +
295
+ "Returns matching tokens with metadata and pricing information. " +
296
+ "Powered by the Tenero API (api.tenero.io). No authentication required.",
297
+ inputSchema: {
298
+ query: z
299
+ .string()
300
+ .min(1)
301
+ .describe("Search query: token name, symbol, or contract address"),
302
+ chain: z
303
+ .string()
304
+ .optional()
305
+ .default("stacks")
306
+ .describe("Chain to query: stacks, spark, or sportsfun (default: stacks)"),
307
+ },
308
+ }, async ({ query, chain }) => {
309
+ try {
310
+ const data = await searchTokens(query, chain);
311
+ return createJsonResponse(data);
312
+ }
313
+ catch (error) {
314
+ return createErrorResponse(error);
315
+ }
316
+ });
317
+ }
318
+ //# sourceMappingURL=tenero.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenero.tools.js","sourceRoot":"","sources":["../../src/tools/tenero.tools.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ Example: To send 2 STX, use amount "2000000" (micro-STX).
21
21
  fee: z
22
22
  .string()
23
23
  .optional()
24
- .describe("Optional fee: 'low' | 'medium' | 'high' preset or micro-STX amount. If omitted, auto-estimated. Ignored when sponsored=true."),
24
+ .describe("Optional fee: 'low' | 'medium' | 'high' preset or micro-STX amount. Clamped to 3,000 uSTX max for STX transfers. If omitted, medium-priority fee is auto-resolved. Ignored when sponsored=true."),
25
25
  sponsored: sponsoredSchema,
26
26
  },
27
27
  }, async ({ recipient, amount, memo, fee, sponsored }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.tools.js","sourceRoot":"","sources":["../../src/tools/transfer.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transfer.tools.js","sourceRoot":"","sources":["../../src/tools/transfer.tools.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,17 @@
1
1
  import { ClarityValue, PostConditionMode, PostCondition } from "@stacks/transactions";
2
2
  import { type Network } from "../config/networks.js";
3
3
  import type { WalletAddresses } from "../utils/storage.js";
4
+ /**
5
+ * Reset the pending nonce for an address (called on wallet unlock/lock/switch
6
+ * so the counter re-syncs with the chain on the next transaction).
7
+ */
8
+ export declare function resetPendingNonce(address: string): void;
9
+ /**
10
+ * Force-resync the local pending nonce for an address.
11
+ * Identical to resetPendingNonce but exported under a name that makes the
12
+ * intent clear for the recover_sponsor_nonce tool's resync-local-nonce action.
13
+ */
14
+ export declare function forceResyncNonce(address: string): void;
4
15
  export interface Account extends WalletAddresses {
5
16
  privateKey: string;
6
17
  /**
@@ -57,7 +68,7 @@ export interface ContractDeployOptions {
57
68
  }
58
69
  /**
59
70
  * Transfer STX tokens to a recipient
60
- * @param fee Optional fee in micro-STX. If omitted, fee is auto-estimated.
71
+ * @param fee Optional fee in micro-STX. If omitted, a medium-priority clamped fee is resolved.
61
72
  */
62
73
  export declare function transferStx(account: Account, recipient: string, amount: bigint, memo?: string, fee?: bigint): Promise<TransferResult>;
63
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,OAAQ,SAAQ,eAAe;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CA2BzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB7C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB7C;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB3B;AAED,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,117 @@
1
1
  import { makeSTXTokenTransfer, makeContractCall, makeContractDeploy, broadcastTransaction, PostConditionMode, } from "@stacks/transactions";
2
2
  import { hexToBytes } from "@stacks/common";
3
3
  import { getStacksNetwork, getApiBaseUrl } from "../config/networks.js";
4
+ import { getHiroApi } from "../services/hiro-api.js";
5
+ import { resolveDefaultFee } from "../utils/fee.js";
6
+ // ---------------------------------------------------------------------------
7
+ // Pending nonce tracking (fixes back-to-back tx nonce collision, issue #326)
8
+ // ---------------------------------------------------------------------------
9
+ /**
10
+ * How long a locally-tracked pending nonce is considered fresh.
11
+ * If no new transaction has been broadcast within this window the counter is
12
+ * stale (the tx likely confirmed or was dropped) and we fall back to the
13
+ * network value on the next call.
14
+ */
15
+ const STALE_NONCE_MS = 10 * 60 * 1000; // 10 minutes
16
+ /**
17
+ * In-memory map of STX address -> next expected nonce for non-sponsored txs.
18
+ * Updated after each successful broadcast so sequential calls don't re-use
19
+ * the same network nonce before the first tx lands in the mempool.
20
+ */
21
+ const pendingNonces = new Map();
22
+ /**
23
+ * Tracks when each address last advanced its local nonce counter.
24
+ * Used to detect stale entries: if no transaction was sent within STALE_NONCE_MS
25
+ * the counter is expired and the network value is authoritative again.
26
+ */
27
+ const pendingNonceTimestamps = new Map();
28
+ /**
29
+ * Reset the pending nonce for an address (called on wallet unlock/lock/switch
30
+ * so the counter re-syncs with the chain on the next transaction).
31
+ */
32
+ export function resetPendingNonce(address) {
33
+ pendingNonces.delete(address);
34
+ pendingNonceTimestamps.delete(address);
35
+ }
36
+ /**
37
+ * Force-resync the local pending nonce for an address.
38
+ * Identical to resetPendingNonce but exported under a name that makes the
39
+ * intent clear for the recover_sponsor_nonce tool's resync-local-nonce action.
40
+ */
41
+ export function forceResyncNonce(address) {
42
+ resetPendingNonce(address);
43
+ }
44
+ /**
45
+ * Fetch the next nonce to use for `address`.
46
+ *
47
+ * Algorithm:
48
+ * 1. Fetch `possible_next_nonce` and `detected_missing_nonces` from Hiro.
49
+ * 2. If the local counter exists but is older than STALE_NONCE_MS, discard it
50
+ * so a stale counter never permanently blocks a recovered wallet.
51
+ * 3. Return max(possible_next_nonce, local_pending) so rapid sequential calls
52
+ * get strictly increasing nonces even before the mempool reflects the first tx.
53
+ * 4. Warn if the network reports missing nonces — gaps below the pending counter
54
+ * can cause the queue to stall until the gaps are filled.
55
+ */
56
+ async function getNextNonce(address, network) {
57
+ // Stale-timeout: discard local counter if it hasn't been refreshed recently.
58
+ const lastAdvanced = pendingNonceTimestamps.get(address);
59
+ const isStale = lastAdvanced !== undefined && Date.now() - lastAdvanced > STALE_NONCE_MS;
60
+ if (isStale) {
61
+ pendingNonces.delete(address);
62
+ pendingNonceTimestamps.delete(address);
63
+ }
64
+ const pending = pendingNonces.get(address) ?? 0n;
65
+ try {
66
+ const hiroApi = getHiroApi(network);
67
+ const nonceInfo = await hiroApi.getNonceInfo(address);
68
+ const networkNext = BigInt(nonceInfo.possible_next_nonce);
69
+ // Warn about detected nonce gaps that could stall the queue.
70
+ if (nonceInfo.detected_missing_nonces && nonceInfo.detected_missing_nonces.length > 0) {
71
+ console.warn(`[nonce] detected_missing_nonces for ${address}: [${nonceInfo.detected_missing_nonces.join(", ")}]. ` +
72
+ `These gaps may stall pending transactions. Use recover_sponsor_nonce with action=fill-gaps to resolve.`);
73
+ }
74
+ return networkNext > pending ? networkNext : pending;
75
+ }
76
+ catch (err) {
77
+ // Fallback: if we have a fresh local counter, use it to keep the queue moving
78
+ // even when Hiro is temporarily unreachable (e.g., between rapid sequential calls).
79
+ if (pending > 0n) {
80
+ console.warn(`[nonce] API call failed, using local pending counter (${pending}) for ${address}:`, err);
81
+ return pending;
82
+ }
83
+ throw err;
84
+ }
85
+ }
86
+ /**
87
+ * Record that a transaction with `nonce` was successfully broadcast for
88
+ * `address`, so the next call advances past it.
89
+ */
90
+ function advancePendingNonce(address, nonce) {
91
+ const next = nonce + 1n;
92
+ const current = pendingNonces.get(address) ?? 0n;
93
+ if (next > current) {
94
+ pendingNonces.set(address, next);
95
+ pendingNonceTimestamps.set(address, Date.now());
96
+ }
97
+ }
4
98
  /**
5
99
  * Transfer STX tokens to a recipient
6
- * @param fee Optional fee in micro-STX. If omitted, fee is auto-estimated.
100
+ * @param fee Optional fee in micro-STX. If omitted, a medium-priority clamped fee is resolved.
7
101
  */
8
102
  export async function transferStx(account, recipient, amount, memo, fee) {
9
103
  const networkName = getStacksNetwork(account.network);
104
+ const nonce = await getNextNonce(account.address, account.network);
105
+ // Always resolve a clamped fee — prevents @stacks/transactions from over-estimating.
106
+ const resolvedFee = fee ?? await resolveDefaultFee(account.network, "token_transfer");
10
107
  const transaction = await makeSTXTokenTransfer({
11
108
  recipient,
12
109
  amount,
13
110
  senderKey: account.privateKey,
14
111
  network: networkName,
15
112
  memo: memo || "",
16
- ...(fee !== undefined && { fee }),
113
+ nonce,
114
+ fee: resolvedFee,
17
115
  });
18
116
  const broadcastResponse = await broadcastTransaction({
19
117
  transaction,
@@ -22,6 +120,7 @@ export async function transferStx(account, recipient, amount, memo, fee) {
22
120
  if ("error" in broadcastResponse) {
23
121
  throw new Error(`Broadcast failed: ${broadcastResponse.error} - ${broadcastResponse.reason}`);
24
122
  }
123
+ advancePendingNonce(account.address, nonce);
25
124
  return {
26
125
  txid: broadcastResponse.txid,
27
126
  rawTx: transaction.serialize(),
@@ -32,6 +131,9 @@ export async function transferStx(account, recipient, amount, memo, fee) {
32
131
  */
33
132
  export async function callContract(account, options) {
34
133
  const networkName = getStacksNetwork(account.network);
134
+ const nonce = await getNextNonce(account.address, account.network);
135
+ // Always resolve a clamped fee — prevents @stacks/transactions from over-estimating.
136
+ const resolvedFee = options.fee ?? await resolveDefaultFee(account.network, "contract_call");
35
137
  const transaction = await makeContractCall({
36
138
  contractAddress: options.contractAddress,
37
139
  contractName: options.contractName,
@@ -39,9 +141,10 @@ export async function callContract(account, options) {
39
141
  functionArgs: options.functionArgs,
40
142
  senderKey: account.privateKey,
41
143
  network: networkName,
144
+ nonce,
42
145
  postConditionMode: options.postConditionMode || PostConditionMode.Deny,
43
146
  postConditions: options.postConditions || [],
44
- ...(options.fee !== undefined && { fee: options.fee }),
147
+ fee: resolvedFee,
45
148
  });
46
149
  const broadcastResponse = await broadcastTransaction({
47
150
  transaction,
@@ -50,6 +153,7 @@ export async function callContract(account, options) {
50
153
  if ("error" in broadcastResponse) {
51
154
  throw new Error(`Broadcast failed: ${broadcastResponse.error} - ${broadcastResponse.reason}`);
52
155
  }
156
+ advancePendingNonce(account.address, nonce);
53
157
  return {
54
158
  txid: broadcastResponse.txid,
55
159
  rawTx: transaction.serialize(),
@@ -60,12 +164,16 @@ export async function callContract(account, options) {
60
164
  */
61
165
  export async function deployContract(account, options) {
62
166
  const networkName = getStacksNetwork(account.network);
167
+ const nonce = await getNextNonce(account.address, account.network);
168
+ // Always resolve a clamped fee — prevents @stacks/transactions from over-estimating.
169
+ const resolvedFee = options.fee ?? await resolveDefaultFee(account.network, "smart_contract");
63
170
  const transaction = await makeContractDeploy({
64
171
  contractName: options.contractName,
65
172
  codeBody: options.codeBody,
66
173
  senderKey: account.privateKey,
67
174
  network: networkName,
68
- ...(options.fee !== undefined && { fee: options.fee }),
175
+ nonce,
176
+ fee: resolvedFee,
69
177
  });
70
178
  const broadcastResponse = await broadcastTransaction({
71
179
  transaction,
@@ -74,6 +182,7 @@ export async function deployContract(account, options) {
74
182
  if ("error" in broadcastResponse) {
75
183
  throw new Error(`Broadcast failed: ${broadcastResponse.error} - ${broadcastResponse.reason}`);
76
184
  }
185
+ advancePendingNonce(account.address, nonce);
77
186
  return {
78
187
  txid: broadcastResponse.txid,
79
188
  rawTx: transaction.serialize(),
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"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"}
@@ -38,4 +38,19 @@ export declare function isFeePreset(value: string): value is FeePreset;
38
38
  * await resolveFee(undefined, "mainnet") // -> undefined
39
39
  */
40
40
  export declare function resolveFee(fee: string | undefined, network: Network, txType?: "all" | "token_transfer" | "contract_call" | "smart_contract"): Promise<bigint | undefined>;
41
+ /**
42
+ * Resolve a default medium-priority fee for a given transaction type.
43
+ *
44
+ * Used by builder functions when the caller does not supply an explicit fee,
45
+ * so that ALL write paths receive a clamped fee rather than relying on the
46
+ * unclamped @stacks/transactions auto-estimation which can over-shoot.
47
+ *
48
+ * Falls back gracefully: if the Hiro mempool API is unreachable, returns the
49
+ * floor × 2 (medium multiplier) for the tx type.
50
+ *
51
+ * @param network - The Stacks network to fetch fee estimates from
52
+ * @param txType - The transaction type for ceiling/floor selection
53
+ * @returns Fee in micro-STX as bigint
54
+ */
55
+ export declare function resolveDefaultFee(network: Network, txType?: "token_transfer" | "contract_call" | "smart_contract"): Promise<bigint>;
41
56
  //# sourceMappingURL=fee.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fee.d.ts","sourceRoot":"","sources":["../../src/utils/fee.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAarD;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAwBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,KAAK,GAAG,gBAAgB,GAAG,eAAe,GAAG,gBAAwB,GAC5E,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuC7B"}
1
+ {"version":3,"file":"fee.d.ts","sourceRoot":"","sources":["../../src/utils/fee.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAmBrD;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAwBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,KAAK,GAAG,gBAAgB,GAAG,eAAe,GAAG,gBAAwB,GAC5E,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4C7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAAgB,GAAG,eAAe,GAAG,gBAAkC,GAC9E,OAAO,CAAC,MAAM,CAAC,CAOjB"}