web3-tools-mcp 2.0.1 → 3.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 (167) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/README.md +5 -0
  3. package/dist/anvil.d.ts +17 -19
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/anvil.js +124 -228
  6. package/dist/anvil.js.map +1 -1
  7. package/dist/chains.d.ts +9 -1
  8. package/dist/chains.d.ts.map +1 -1
  9. package/dist/chains.js +11 -2
  10. package/dist/chains.js.map +1 -1
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js.map +1 -1
  13. package/dist/context.d.ts +22 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +24 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/hosted.d.ts +12 -0
  18. package/dist/hosted.d.ts.map +1 -0
  19. package/dist/hosted.js +12 -0
  20. package/dist/hosted.js.map +1 -0
  21. package/dist/http-server.d.ts +13 -0
  22. package/dist/http-server.d.ts.map +1 -1
  23. package/dist/http-server.js +13 -4
  24. package/dist/http-server.js.map +1 -1
  25. package/dist/index.js +19 -15
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib.d.ts +24 -0
  28. package/dist/lib.d.ts.map +1 -0
  29. package/dist/lib.js +23 -0
  30. package/dist/lib.js.map +1 -0
  31. package/dist/log.d.ts +16 -0
  32. package/dist/log.d.ts.map +1 -0
  33. package/dist/log.js +20 -0
  34. package/dist/log.js.map +1 -0
  35. package/dist/mcp-server.d.ts +4 -0
  36. package/dist/mcp-server.d.ts.map +1 -0
  37. package/dist/mcp-server.js +43 -0
  38. package/dist/mcp-server.js.map +1 -0
  39. package/dist/oauth.d.ts +41 -6
  40. package/dist/oauth.d.ts.map +1 -1
  41. package/dist/oauth.js +75 -41
  42. package/dist/oauth.js.map +1 -1
  43. package/dist/preview.d.ts +7 -0
  44. package/dist/preview.d.ts.map +1 -1
  45. package/dist/preview.js +14 -2
  46. package/dist/preview.js.map +1 -1
  47. package/dist/signing-requests.d.ts +81 -0
  48. package/dist/signing-requests.d.ts.map +1 -0
  49. package/dist/signing-requests.js +138 -0
  50. package/dist/signing-requests.js.map +1 -0
  51. package/dist/tools/index.d.ts +27 -1
  52. package/dist/tools/index.d.ts.map +1 -1
  53. package/dist/tools/index.js +37 -15
  54. package/dist/tools/index.js.map +1 -1
  55. package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +30 -26
  56. package/dist/tools/read/advanced.d.ts.map +1 -0
  57. package/dist/tools/{advanced.js → read/advanced.js} +10 -10
  58. package/dist/tools/read/advanced.js.map +1 -0
  59. package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
  60. package/dist/tools/read/balance.d.ts.map +1 -0
  61. package/dist/tools/{balance.js → read/balance.js} +2 -2
  62. package/dist/tools/read/balance.js.map +1 -0
  63. package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +18 -15
  64. package/dist/tools/read/contract-info.d.ts.map +1 -0
  65. package/dist/tools/{contract-info.js → read/contract-info.js} +2 -2
  66. package/dist/tools/read/contract-info.js.map +1 -0
  67. package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
  68. package/dist/tools/read/contract.d.ts.map +1 -0
  69. package/dist/tools/{contract.js → read/contract.js} +2 -2
  70. package/dist/tools/read/contract.js.map +1 -0
  71. package/dist/tools/{ens.d.ts → read/ens.d.ts} +30 -25
  72. package/dist/tools/read/ens.d.ts.map +1 -0
  73. package/dist/tools/{ens.js → read/ens.js} +2 -2
  74. package/dist/tools/read/ens.js.map +1 -0
  75. package/dist/tools/read/gas.d.ts +171 -0
  76. package/dist/tools/read/gas.d.ts.map +1 -0
  77. package/dist/tools/read/gas.js +368 -0
  78. package/dist/tools/read/gas.js.map +1 -0
  79. package/dist/tools/{logs.d.ts → read/logs.d.ts} +6 -5
  80. package/dist/tools/read/logs.d.ts.map +1 -0
  81. package/dist/tools/{logs.js → read/logs.js} +2 -2
  82. package/dist/tools/read/logs.js.map +1 -0
  83. package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
  84. package/dist/tools/read/signatures.d.ts.map +1 -0
  85. package/dist/tools/{signatures.js → read/signatures.js} +1 -1
  86. package/dist/tools/read/signatures.js.map +1 -0
  87. package/dist/tools/read/signing.d.ts +27 -0
  88. package/dist/tools/read/signing.d.ts.map +1 -0
  89. package/dist/tools/read/signing.js +75 -0
  90. package/dist/tools/read/signing.js.map +1 -0
  91. package/dist/tools/sign/errors.d.ts +9 -0
  92. package/dist/tools/sign/errors.d.ts.map +1 -0
  93. package/dist/tools/sign/errors.js +29 -0
  94. package/dist/tools/sign/errors.js.map +1 -0
  95. package/dist/tools/{transactions.d.ts → sign/transactions.d.ts} +48 -62
  96. package/dist/tools/sign/transactions.d.ts.map +1 -0
  97. package/dist/tools/sign/transactions.js +316 -0
  98. package/dist/tools/sign/transactions.js.map +1 -0
  99. package/dist/tools/sign/wallet.d.ts +50 -0
  100. package/dist/tools/sign/wallet.d.ts.map +1 -0
  101. package/dist/tools/sign/wallet.js +180 -0
  102. package/dist/tools/sign/wallet.js.map +1 -0
  103. package/dist/utils.d.ts +5 -2
  104. package/dist/utils.d.ts.map +1 -1
  105. package/dist/utils.js +5 -2
  106. package/dist/utils.js.map +1 -1
  107. package/dist/wallet-client.d.ts +33 -4
  108. package/dist/wallet-client.d.ts.map +1 -1
  109. package/dist/wallet-client.js +90 -24
  110. package/dist/wallet-client.js.map +1 -1
  111. package/dist/walletconnect.d.ts +111 -13
  112. package/dist/walletconnect.d.ts.map +1 -1
  113. package/dist/walletconnect.js +248 -68
  114. package/dist/walletconnect.js.map +1 -1
  115. package/package.json +10 -4
  116. package/src/anvil.ts +150 -271
  117. package/src/chains.ts +14 -2
  118. package/src/client.ts +0 -1
  119. package/src/context.ts +27 -0
  120. package/src/hosted.ts +11 -0
  121. package/src/http-server.ts +30 -5
  122. package/src/index.ts +19 -16
  123. package/src/lib.ts +24 -0
  124. package/src/log.ts +25 -0
  125. package/src/mcp-server.ts +47 -0
  126. package/src/oauth.ts +98 -45
  127. package/src/preview.ts +21 -2
  128. package/src/signing-requests.ts +198 -0
  129. package/src/tools/index.ts +67 -16
  130. package/src/tools/{advanced.ts → read/advanced.ts} +13 -11
  131. package/src/tools/{balance.ts → read/balance.ts} +3 -3
  132. package/src/tools/{contract-info.ts → read/contract-info.ts} +3 -3
  133. package/src/tools/{contract.ts → read/contract.ts} +3 -3
  134. package/src/tools/{ens.ts → read/ens.ts} +3 -3
  135. package/src/tools/read/gas.ts +480 -0
  136. package/src/tools/{logs.ts → read/logs.ts} +3 -3
  137. package/src/tools/{signatures.ts → read/signatures.ts} +2 -2
  138. package/src/tools/read/signing.ts +86 -0
  139. package/src/tools/sign/errors.ts +28 -0
  140. package/src/tools/sign/transactions.ts +428 -0
  141. package/src/tools/sign/wallet.ts +216 -0
  142. package/src/utils.ts +5 -2
  143. package/src/wallet-client.ts +91 -22
  144. package/src/walletconnect.ts +286 -66
  145. package/dist/tools/advanced.d.ts.map +0 -1
  146. package/dist/tools/advanced.js.map +0 -1
  147. package/dist/tools/balance.d.ts.map +0 -1
  148. package/dist/tools/balance.js.map +0 -1
  149. package/dist/tools/contract-info.d.ts.map +0 -1
  150. package/dist/tools/contract-info.js.map +0 -1
  151. package/dist/tools/contract.d.ts.map +0 -1
  152. package/dist/tools/contract.js.map +0 -1
  153. package/dist/tools/ens.d.ts.map +0 -1
  154. package/dist/tools/ens.js.map +0 -1
  155. package/dist/tools/gas.d.ts +0 -99
  156. package/dist/tools/gas.d.ts.map +0 -1
  157. package/dist/tools/gas.js +0 -181
  158. package/dist/tools/gas.js.map +0 -1
  159. package/dist/tools/logs.d.ts.map +0 -1
  160. package/dist/tools/logs.js.map +0 -1
  161. package/dist/tools/signatures.d.ts.map +0 -1
  162. package/dist/tools/signatures.js.map +0 -1
  163. package/dist/tools/transactions.d.ts.map +0 -1
  164. package/dist/tools/transactions.js +0 -361
  165. package/dist/tools/transactions.js.map +0 -1
  166. package/src/tools/gas.ts +0 -219
  167. package/src/tools/transactions.ts +0 -452
@@ -0,0 +1,171 @@
1
+ import { z } from 'zod';
2
+ declare const _default: {
3
+ simulate_contract: {
4
+ title: string;
5
+ description: string;
6
+ schema: z.ZodObject<{
7
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
8
+ contractAddress: z.ZodString;
9
+ functionAbi: z.ZodString;
10
+ args: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">>;
11
+ from: z.ZodOptional<z.ZodString>;
12
+ value: z.ZodOptional<z.ZodString>;
13
+ blockNumber: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
16
+ contractAddress: string;
17
+ functionAbi: string;
18
+ blockNumber?: string | undefined;
19
+ from?: string | undefined;
20
+ value?: string | undefined;
21
+ args?: (string | number | boolean | null)[] | undefined;
22
+ }, {
23
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
24
+ contractAddress: string;
25
+ functionAbi: string;
26
+ blockNumber?: string | undefined;
27
+ from?: string | undefined;
28
+ value?: string | undefined;
29
+ args?: (string | number | boolean | null)[] | undefined;
30
+ }>;
31
+ handler: (args: {
32
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
33
+ contractAddress: string;
34
+ functionAbi: string;
35
+ blockNumber?: string | undefined;
36
+ from?: string | undefined;
37
+ value?: string | undefined;
38
+ args?: (string | number | boolean | null)[] | undefined;
39
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
40
+ available: (() => boolean) | undefined;
41
+ };
42
+ simulate_bundle: {
43
+ title: string;
44
+ description: string;
45
+ schema: z.ZodObject<{
46
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
47
+ from: z.ZodOptional<z.ZodString>;
48
+ calls: z.ZodArray<z.ZodObject<{
49
+ to: z.ZodString;
50
+ functionAbi: z.ZodOptional<z.ZodString>;
51
+ args: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">>;
52
+ data: z.ZodOptional<z.ZodString>;
53
+ value: z.ZodOptional<z.ZodString>;
54
+ from: z.ZodOptional<z.ZodString>;
55
+ }, "strip", z.ZodTypeAny, {
56
+ to: string;
57
+ from?: string | undefined;
58
+ value?: string | undefined;
59
+ data?: string | undefined;
60
+ args?: (string | number | boolean | null)[] | undefined;
61
+ functionAbi?: string | undefined;
62
+ }, {
63
+ to: string;
64
+ from?: string | undefined;
65
+ value?: string | undefined;
66
+ data?: string | undefined;
67
+ args?: (string | number | boolean | null)[] | undefined;
68
+ functionAbi?: string | undefined;
69
+ }>, "many">;
70
+ blockNumber: z.ZodOptional<z.ZodString>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
73
+ calls: {
74
+ to: string;
75
+ from?: string | undefined;
76
+ value?: string | undefined;
77
+ data?: string | undefined;
78
+ args?: (string | number | boolean | null)[] | undefined;
79
+ functionAbi?: string | undefined;
80
+ }[];
81
+ blockNumber?: string | undefined;
82
+ from?: string | undefined;
83
+ }, {
84
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
85
+ calls: {
86
+ to: string;
87
+ from?: string | undefined;
88
+ value?: string | undefined;
89
+ data?: string | undefined;
90
+ args?: (string | number | boolean | null)[] | undefined;
91
+ functionAbi?: string | undefined;
92
+ }[];
93
+ blockNumber?: string | undefined;
94
+ from?: string | undefined;
95
+ }>;
96
+ handler: (args: {
97
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
98
+ calls: {
99
+ to: string;
100
+ from?: string | undefined;
101
+ value?: string | undefined;
102
+ data?: string | undefined;
103
+ args?: (string | number | boolean | null)[] | undefined;
104
+ functionAbi?: string | undefined;
105
+ }[];
106
+ blockNumber?: string | undefined;
107
+ from?: string | undefined;
108
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
109
+ available: (() => boolean) | undefined;
110
+ };
111
+ estimate_gas: {
112
+ title: string;
113
+ description: string;
114
+ schema: z.ZodObject<{
115
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
116
+ to: z.ZodOptional<z.ZodString>;
117
+ from: z.ZodOptional<z.ZodString>;
118
+ value: z.ZodOptional<z.ZodString>;
119
+ data: z.ZodOptional<z.ZodString>;
120
+ functionAbi: z.ZodOptional<z.ZodString>;
121
+ args: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">>;
122
+ }, "strip", z.ZodTypeAny, {
123
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
124
+ from?: string | undefined;
125
+ to?: string | undefined;
126
+ value?: string | undefined;
127
+ data?: string | undefined;
128
+ args?: (string | number | boolean | null)[] | undefined;
129
+ functionAbi?: string | undefined;
130
+ }, {
131
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
132
+ from?: string | undefined;
133
+ to?: string | undefined;
134
+ value?: string | undefined;
135
+ data?: string | undefined;
136
+ args?: (string | number | boolean | null)[] | undefined;
137
+ functionAbi?: string | undefined;
138
+ }>;
139
+ handler: (args: {
140
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
141
+ from?: string | undefined;
142
+ to?: string | undefined;
143
+ value?: string | undefined;
144
+ data?: string | undefined;
145
+ args?: (string | number | boolean | null)[] | undefined;
146
+ functionAbi?: string | undefined;
147
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
148
+ available: (() => boolean) | undefined;
149
+ };
150
+ get_gas_price: {
151
+ title: string;
152
+ description: string;
153
+ schema: z.ZodObject<{
154
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
155
+ formatted: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
156
+ }, "strip", z.ZodTypeAny, {
157
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
158
+ formatted: boolean;
159
+ }, {
160
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
161
+ formatted?: boolean | undefined;
162
+ }>;
163
+ handler: (args: {
164
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
165
+ formatted: boolean;
166
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
167
+ available: (() => boolean) | undefined;
168
+ };
169
+ };
170
+ export default _default;
171
+ //# sourceMappingURL=gas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../src/tools/read/gas.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmLvB,wBAgSC"}
@@ -0,0 +1,368 @@
1
+ import { decodeFunctionResult, encodeFunctionData, formatEther, isAddress, parseAbiItem, toHex } from 'viem';
2
+ import { simulateBlocks } from 'viem/actions';
3
+ import { z } from 'zod';
4
+ import { getClientManager, SUPPORTED_CHAINS } from '../../client.js';
5
+ import { enrichTransfers } from '../../preview.js';
6
+ import { convertArgumentsToTypes, createTool, formatResponse } from '../../utils.js';
7
+ /** Alchemy's bundle method takes at most this many transactions. */
8
+ const ALCHEMY_BUNDLE_LIMIT = 3;
9
+ /** One tool call is one quota unit, so an unbounded bundle would be a way around the quota. */
10
+ const MAX_BUNDLE = 25;
11
+ /** Where eth_simulateV1's traced native transfers say they come from. */
12
+ const NATIVE_TOKEN = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
13
+ const argsSchema = z.array(z.union([z.string(), z.number(), z.boolean(), z.null()]));
14
+ /**
15
+ * Why an RPC call failed, without the request URL — viem puts it in `message`, and with a
16
+ * provider key configured that URL carries the key.
17
+ */
18
+ function rpcReason(error) {
19
+ const { details, shortMessage } = error;
20
+ return details || shortMessage || 'The RPC request failed';
21
+ }
22
+ function bundleCall(call, from, index) {
23
+ const sender = call.from ?? from;
24
+ if (!isAddress(call.to))
25
+ throw new Error(`Call ${index}: invalid to address ${call.to}`);
26
+ if (sender && !isAddress(sender))
27
+ throw new Error(`Call ${index}: invalid from address ${sender}`);
28
+ if (call.functionAbi && call.data)
29
+ throw new Error(`Call ${index}: give functionAbi and args, or data — not both`);
30
+ const abi = call.functionAbi ? parseAbiItem(call.functionAbi) : undefined;
31
+ const data = abi
32
+ ? encodeFunctionData({ abi: [abi], functionName: abi.name, args: convertArgumentsToTypes(call.args ?? [], abi.inputs) })
33
+ : call.data;
34
+ return { from: sender, to: call.to, data, value: call.value ? BigInt(call.value) : undefined, abi };
35
+ }
36
+ /** Native, ERC20, ERC721 and ERC1155 changes with token metadata — on Alchemy's paid plans only. */
37
+ async function viaAlchemy(chain, calls, blockNumber) {
38
+ const client = getClientManager().getClient(chain);
39
+ const transactions = calls.map((call) => ({
40
+ from: call.from,
41
+ to: call.to,
42
+ data: call.data,
43
+ value: call.value !== undefined ? toHex(call.value) : undefined
44
+ }));
45
+ const params = blockNumber === undefined ? [transactions] : [transactions, toHex(blockNumber)];
46
+ const outcomes = (await client.request({ method: 'alchemy_simulateAssetChangesBundle', params }));
47
+ return outcomes.map((outcome) => ({
48
+ status: outcome.error ? 'failure' : 'success',
49
+ gasUsed: outcome.gasUsed ? BigInt(outcome.gasUsed).toString() : undefined,
50
+ error: outcome.error?.message,
51
+ assetChanges: outcome.changes.map((change) => ({
52
+ assetType: change.assetType,
53
+ token: change.contractAddress,
54
+ symbol: change.symbol,
55
+ tokenId: change.tokenId,
56
+ from: change.from,
57
+ to: change.to,
58
+ amount: change.amount,
59
+ rawAmount: change.rawAmount
60
+ }))
61
+ }));
62
+ }
63
+ function decodeResult(abi, data) {
64
+ if (!abi?.outputs.length)
65
+ return data;
66
+ try {
67
+ return decodeFunctionResult({ abi: [abi], functionName: abi.name, data });
68
+ }
69
+ catch {
70
+ return data;
71
+ }
72
+ }
73
+ /**
74
+ * Any RPC with eth_simulateV1: decoded return values, and native, ERC20 and ERC721 transfers.
75
+ *
76
+ * ponytail: ERC1155 moves tokens with TransferSingle / TransferBatch, which are not read
77
+ * here, so those changes are missing on this path. Parse them if 1155 bundles matter.
78
+ */
79
+ async function viaSimulateV1(chain, calls, blockNumber) {
80
+ const client = getClientManager().getClient(chain);
81
+ const [block] = await simulateBlocks(client, {
82
+ blocks: [{ calls: calls.map((call) => ({ account: call.from, to: call.to, data: call.data, value: call.value })) }],
83
+ traceTransfers: true,
84
+ validation: false,
85
+ ...(blockNumber !== undefined && { blockNumber })
86
+ });
87
+ if (!block)
88
+ throw new Error('The RPC returned no simulated block');
89
+ const nativeSymbol = client.chain?.nativeCurrency.symbol;
90
+ return Promise.all(block.calls.map(async (call, index) => {
91
+ const error = call.error;
92
+ const transfers = await enrichTransfers(chain, (call.logs ?? []));
93
+ return {
94
+ status: call.status,
95
+ gasUsed: call.gasUsed.toString(),
96
+ error: call.status === 'success' ? undefined : (error?.shortMessage ?? error?.message ?? 'execution reverted'),
97
+ result: call.status === 'success' ? decodeResult(calls[index]?.abi, call.data) : undefined,
98
+ assetChanges: transfers.map((transfer) => {
99
+ if (transfer.tokenId !== undefined) {
100
+ return {
101
+ assetType: 'ERC721',
102
+ token: transfer.token,
103
+ symbol: transfer.symbol,
104
+ tokenId: transfer.tokenId,
105
+ from: transfer.from,
106
+ to: transfer.to,
107
+ amount: '1',
108
+ rawAmount: '1'
109
+ };
110
+ }
111
+ const native = transfer.token.toLowerCase() === NATIVE_TOKEN;
112
+ return {
113
+ assetType: native ? 'NATIVE' : 'ERC20',
114
+ token: native ? undefined : transfer.token,
115
+ symbol: native ? nativeSymbol : transfer.symbol,
116
+ from: transfer.from,
117
+ to: transfer.to,
118
+ amount: native ? formatEther(BigInt(transfer.amount)) : transfer.humanAmount,
119
+ rawAmount: transfer.amount
120
+ };
121
+ })
122
+ };
123
+ }));
124
+ }
125
+ export default {
126
+ simulate_contract: createTool('Simulate Contract Call', 'Simulate a contract call (including state-changing functions) without broadcasting. Returns simulation result and estimated gas.', z.object({
127
+ chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network to simulate on'),
128
+ contractAddress: z.string().describe('Contract address to call'),
129
+ functionAbi: z
130
+ .string()
131
+ .describe('Function ABI signature (e.g., "function transfer(address to, uint256 amount)"). Can be any function type.'),
132
+ args: z
133
+ .array(z.union([z.string(), z.number(), z.boolean(), z.null()]))
134
+ .optional()
135
+ .describe('Function arguments in order matching the ABI signature'),
136
+ from: z.string().optional().describe('Sender address (defaults to zero address)'),
137
+ value: z.string().optional().describe('ETH value to send with the transaction (in wei as string)'),
138
+ blockNumber: z.string().optional().describe('Block number for simulation (defaults to latest)')
139
+ }), async (args) => {
140
+ if (!isAddress(args.contractAddress)) {
141
+ throw new Error(`Invalid contract address: ${args.contractAddress}`);
142
+ }
143
+ if (args.from && !isAddress(args.from)) {
144
+ throw new Error(`Invalid from address: ${args.from}`);
145
+ }
146
+ const clientManager = getClientManager();
147
+ const client = clientManager.getClient(args.chain);
148
+ try {
149
+ const abiItem = parseAbiItem(args.functionAbi);
150
+ const convertedArgs = convertArgumentsToTypes(args.args || [], abiItem.inputs);
151
+ const blockTag = args.blockNumber ? BigInt(args.blockNumber) : undefined;
152
+ // Simulate the call
153
+ const result = await client.call({
154
+ to: args.contractAddress,
155
+ data: encodeFunctionData({
156
+ abi: [abiItem],
157
+ functionName: abiItem.name,
158
+ args: convertedArgs
159
+ }),
160
+ account: args.from ? args.from : undefined,
161
+ value: args.value ? BigInt(args.value) : undefined,
162
+ blockNumber: blockTag
163
+ });
164
+ // Also estimate gas
165
+ const gasEstimate = await client.estimateGas({
166
+ to: args.contractAddress,
167
+ data: encodeFunctionData({
168
+ abi: [abiItem],
169
+ functionName: abiItem.name,
170
+ args: convertedArgs
171
+ }),
172
+ account: args.from ? args.from : undefined,
173
+ value: args.value ? BigInt(args.value) : undefined,
174
+ blockNumber: blockTag
175
+ });
176
+ // Decode the result if the function has outputs
177
+ let decodedResult = result.data;
178
+ if (abiItem.outputs && abiItem.outputs.length > 0 && result.data) {
179
+ decodedResult = decodeFunctionResult({
180
+ abi: [abiItem],
181
+ functionName: abiItem.name,
182
+ data: result.data
183
+ });
184
+ }
185
+ return formatResponse({
186
+ success: true,
187
+ chain: args.chain,
188
+ contractAddress: args.contractAddress,
189
+ functionName: abiItem.name,
190
+ result: decodedResult,
191
+ rawData: result.data,
192
+ gasEstimate: gasEstimate.toString(),
193
+ blockNumber: args.blockNumber || 'latest'
194
+ });
195
+ }
196
+ catch (error) {
197
+ // Check if it's a revert error
198
+ const errorMessage = error instanceof Error ? error.message : String(error);
199
+ return formatResponse({
200
+ success: false,
201
+ chain: args.chain,
202
+ contractAddress: args.contractAddress,
203
+ error: errorMessage,
204
+ reverted: errorMessage.includes('revert') || errorMessage.includes('execution reverted')
205
+ });
206
+ }
207
+ }),
208
+ simulate_bundle: createTool('Simulate Transaction Bundle', 'Simulate several transactions in order, in one block, each seeing the state the previous ones left — e.g. ' +
209
+ 'approve then swap, or deposit then borrow. Nothing is broadcast. Returns per transaction whether it ' +
210
+ 'succeeded, gas used, the revert reason, and the assets that moved. Up to 3 transactions go through ' +
211
+ "Alchemy's asset-change simulation (native, ERC20, ERC721, ERC1155, with symbols) where the plan allows it; " +
212
+ 'otherwise eth_simulateV1, which adds decoded return values but reports only native and ERC20 transfers.', z.object({
213
+ chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network to simulate on'),
214
+ from: z.string().optional().describe('Sender for every transaction that does not name its own'),
215
+ calls: z
216
+ .array(z.object({
217
+ to: z.string().describe('Contract or recipient address'),
218
+ functionAbi: z
219
+ .string()
220
+ .optional()
221
+ .describe('Function signature to encode the call, e.g. "function approve(address spender, uint256 amount)"'),
222
+ args: argsSchema.optional().describe('Arguments for functionAbi, in order'),
223
+ data: z.string().optional().describe('Raw calldata, instead of functionAbi and args'),
224
+ value: z.string().optional().describe('Native value to send, in wei'),
225
+ from: z.string().optional().describe('Sender of this transaction, if not the bundle-wide from')
226
+ }))
227
+ .min(1)
228
+ .max(MAX_BUNDLE)
229
+ .describe('Transactions to run, in order'),
230
+ blockNumber: z.string().optional().describe('Block to simulate on top of (defaults to latest)')
231
+ }), async (args) => {
232
+ const chain = args.chain;
233
+ const calls = args.calls.map((call, index) => bundleCall(call, args.from, index));
234
+ const blockNumber = args.blockNumber ? BigInt(args.blockNumber) : undefined;
235
+ let outcomes;
236
+ let via = 'alchemy_simulateAssetChangesBundle';
237
+ let fallbackReason;
238
+ if (calls.length <= ALCHEMY_BUNDLE_LIMIT) {
239
+ try {
240
+ outcomes = await viaAlchemy(chain, calls, blockNumber);
241
+ }
242
+ catch (error) {
243
+ // A free plan, a chain Alchemy does not simulate on, or a custom RPC that is not Alchemy.
244
+ fallbackReason = rpcReason(error);
245
+ }
246
+ }
247
+ else {
248
+ fallbackReason = `Alchemy simulates at most ${ALCHEMY_BUNDLE_LIMIT} transactions per bundle`;
249
+ }
250
+ if (!outcomes) {
251
+ via = 'eth_simulateV1';
252
+ try {
253
+ outcomes = await viaSimulateV1(chain, calls, blockNumber);
254
+ }
255
+ catch (error) {
256
+ return formatResponse({ success: false, chain, error: rpcReason(error), alchemyBundleError: fallbackReason });
257
+ }
258
+ }
259
+ return formatResponse({
260
+ success: outcomes.every((outcome) => outcome.status === 'success'),
261
+ chain,
262
+ via,
263
+ ...(fallbackReason && { fallbackReason }),
264
+ totalGasUsed: outcomes.reduce((sum, outcome) => sum + BigInt(outcome.gasUsed ?? 0), 0n),
265
+ calls: outcomes.map((outcome, index) => ({
266
+ index,
267
+ to: calls[index]?.to,
268
+ ...(calls[index]?.abi && { functionName: calls[index].abi.name }),
269
+ ...outcome
270
+ }))
271
+ });
272
+ },
273
+ // Offered only where a provider RPC backs it: public endpoints rarely serve eth_simulateV1.
274
+ () => Boolean(getClientManager().getConfig().alchemyApiKey)),
275
+ estimate_gas: createTool('Estimate Gas', 'Estimate gas required for a transaction. Supports contract calls, transfers, and deployments.', z.object({
276
+ chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
277
+ to: z.string().optional().describe('Recipient address (omit for contract deployment)'),
278
+ from: z.string().optional().describe('Sender address (optional)'),
279
+ value: z.string().optional().describe('ETH value to send (in wei as string)'),
280
+ data: z.string().optional().describe('Transaction data (hex string for contract calls or deployment bytecode)'),
281
+ functionAbi: z.string().optional().describe('Optional: Function ABI signature to encode call data automatically'),
282
+ args: z
283
+ .array(z.union([z.string(), z.number(), z.boolean(), z.null()]))
284
+ .optional()
285
+ .describe('Optional: Function arguments (only used with functionAbi)')
286
+ }), async (args) => {
287
+ if (args.to && !isAddress(args.to)) {
288
+ throw new Error(`Invalid to address: ${args.to}`);
289
+ }
290
+ if (args.from && !isAddress(args.from)) {
291
+ throw new Error(`Invalid from address: ${args.from}`);
292
+ }
293
+ const clientManager = getClientManager();
294
+ const client = clientManager.getClient(args.chain);
295
+ let callData = args.data;
296
+ // If functionAbi is provided, encode the call data
297
+ if (args.functionAbi) {
298
+ const abiItem = parseAbiItem(args.functionAbi);
299
+ const convertedArgs = convertArgumentsToTypes(args.args || [], abiItem.inputs);
300
+ callData = encodeFunctionData({
301
+ abi: [abiItem],
302
+ functionName: abiItem.name,
303
+ args: convertedArgs
304
+ });
305
+ }
306
+ const gasEstimate = await client.estimateGas({
307
+ to: args.to ? args.to : undefined,
308
+ account: args.from ? args.from : undefined,
309
+ value: args.value ? BigInt(args.value) : undefined,
310
+ data: callData
311
+ });
312
+ return formatResponse({
313
+ success: true,
314
+ chain: args.chain,
315
+ gasEstimate: gasEstimate.toString(),
316
+ to: args.to,
317
+ from: args.from,
318
+ value: args.value
319
+ });
320
+ }),
321
+ get_gas_price: createTool('Get Gas Price', 'Get current gas prices for a chain. Returns both legacy gasPrice and EIP-1559 fees (maxFeePerGas, maxPriorityFeePerGas).', z.object({
322
+ chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
323
+ formatted: z.boolean().optional().default(true).describe('Return prices in Gwei (default: true). If false, returns wei.')
324
+ }), async (args) => {
325
+ const clientManager = getClientManager();
326
+ const client = clientManager.getClient(args.chain);
327
+ // Get both legacy and EIP-1559 gas prices
328
+ const [gasPrice, feeData] = await Promise.all([
329
+ client.getGasPrice(),
330
+ client.estimateFeesPerGas().catch(() => null) // Some chains don't support EIP-1559
331
+ ]);
332
+ const formatPrice = (wei) => {
333
+ if (args.formatted) {
334
+ // Convert to Gwei (1 Gwei = 1e9 wei)
335
+ const gwei = Number(wei) / 1e9;
336
+ return `${gwei.toFixed(2)} Gwei`;
337
+ }
338
+ return wei.toString();
339
+ };
340
+ const response = {
341
+ chain: args.chain,
342
+ timestamp: new Date().toISOString(),
343
+ legacy: {
344
+ gasPrice: args.formatted ? formatPrice(gasPrice) : gasPrice.toString(),
345
+ gasPriceWei: gasPrice.toString()
346
+ }
347
+ };
348
+ // Add EIP-1559 data if available
349
+ if (feeData) {
350
+ response.eip1559 = {
351
+ maxFeePerGas: args.formatted ? formatPrice(feeData.maxFeePerGas) : feeData.maxFeePerGas.toString(),
352
+ maxPriorityFeePerGas: args.formatted
353
+ ? formatPrice(feeData.maxPriorityFeePerGas)
354
+ : feeData.maxPriorityFeePerGas.toString(),
355
+ maxFeePerGasWei: feeData.maxFeePerGas.toString(),
356
+ maxPriorityFeePerGasWei: feeData.maxPriorityFeePerGas.toString()
357
+ };
358
+ // Calculate estimated total cost for a standard 21000 gas transaction
359
+ const standardGasLimit = 21000n;
360
+ const estimatedCost = feeData.maxFeePerGas * standardGasLimit;
361
+ response.eip1559.estimatedCostFor21kGas = args.formatted
362
+ ? `${(Number(estimatedCost) / 1e18).toFixed(6)} ETH`
363
+ : estimatedCost.toString();
364
+ }
365
+ return formatResponse(response);
366
+ })
367
+ };
368
+ //# sourceMappingURL=gas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas.js","sourceRoot":"","sources":["../../../src/tools/read/gas.ts"],"names":[],"mappings":"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"}
@@ -4,21 +4,21 @@ declare const _default: {
4
4
  title: string;
5
5
  description: string;
6
6
  schema: z.ZodObject<{
7
- chain: z.ZodEnum<["arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
7
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
8
8
  eventAbi: z.ZodString;
9
9
  address: z.ZodOptional<z.ZodString>;
10
10
  fromBlock: z.ZodOptional<z.ZodString>;
11
11
  toBlock: z.ZodOptional<z.ZodString>;
12
12
  eventArgs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">]>>>;
13
13
  }, "strip", z.ZodTypeAny, {
14
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
14
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
15
15
  eventAbi: string;
16
16
  address?: string | undefined;
17
17
  fromBlock?: string | undefined;
18
18
  toBlock?: string | undefined;
19
19
  eventArgs?: Record<string, string | number | boolean | (string | number | boolean)[]> | undefined;
20
20
  }, {
21
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
21
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
22
22
  eventAbi: string;
23
23
  address?: string | undefined;
24
24
  fromBlock?: string | undefined;
@@ -26,13 +26,14 @@ declare const _default: {
26
26
  eventArgs?: Record<string, string | number | boolean | (string | number | boolean)[]> | undefined;
27
27
  }>;
28
28
  handler: (args: {
29
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
29
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
30
30
  eventAbi: string;
31
31
  address?: string | undefined;
32
32
  fromBlock?: string | undefined;
33
33
  toBlock?: string | undefined;
34
34
  eventArgs?: Record<string, string | number | boolean | (string | number | boolean)[]> | undefined;
35
- }) => Promise<import("../types.js").ToolResult>;
35
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
36
+ available: (() => boolean) | undefined;
36
37
  };
37
38
  };
38
39
  export default _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/tools/read/logs.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwHvB,wBA8JC"}
@@ -1,8 +1,8 @@
1
1
  import { HypersyncClient, LogField } from '@envio-dev/hypersync-client';
2
2
  import { decodeEventLog, isAddress, keccak256, numberToHex, padHex, parseAbiItem, toBytes, toEventSignature } from 'viem';
3
3
  import { z } from 'zod';
4
- import { getClientManager, SUPPORTED_CHAINS } from '../client.js';
5
- import { convertEventArgsToTypes, createTool, formatResponse } from '../utils.js';
4
+ import { getClientManager, SUPPORTED_CHAINS } from '../../client.js';
5
+ import { convertEventArgsToTypes, createTool, formatResponse } from '../../utils.js';
6
6
  /**
7
7
  * A topic is always 32 bytes, so an address, a number or a short hex value has to be
8
8
  * left-padded to fit. Passing one through unpadded is rejected outright by Hypersync.