web3-tools-mcp 1.0.1 → 1.2.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.
- package/README.md +46 -230
- package/dist/package.json +63 -0
- package/dist/src/client.d.ts +1653 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +142 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +88 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/tools/advanced.d.ts +75 -0
- package/dist/src/tools/advanced.d.ts.map +1 -0
- package/dist/src/tools/advanced.js +234 -0
- package/dist/src/tools/advanced.js.map +1 -0
- package/dist/src/tools/balance.d.ts +55 -0
- package/dist/src/tools/balance.d.ts.map +1 -0
- package/dist/src/tools/balance.js +146 -0
- package/dist/src/tools/balance.js.map +1 -0
- package/dist/src/tools/contract-info.d.ts +79 -0
- package/dist/src/tools/contract-info.d.ts.map +1 -0
- package/dist/src/tools/contract-info.js +450 -0
- package/dist/src/tools/contract-info.js.map +1 -0
- package/dist/src/tools/contract.d.ts +79 -0
- package/dist/src/tools/contract.d.ts.map +1 -0
- package/dist/src/tools/contract.js +140 -0
- package/dist/src/tools/contract.js.map +1 -0
- package/dist/src/tools/ens.d.ts +119 -0
- package/dist/src/tools/ens.d.ts.map +1 -0
- package/dist/src/tools/ens.js +425 -0
- package/dist/src/tools/ens.js.map +1 -0
- package/dist/src/tools/index.d.ts +3 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +29 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/logs.d.ts +39 -0
- package/dist/src/tools/logs.d.ts.map +1 -0
- package/dist/src/tools/logs.js +231 -0
- package/dist/src/tools/logs.js.map +1 -0
- package/dist/src/tools/signatures.d.ts +83 -0
- package/dist/src/tools/signatures.d.ts.map +1 -0
- package/dist/src/tools/signatures.js +93 -0
- package/dist/src/tools/signatures.js.map +1 -0
- package/dist/src/types.d.ts +22 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +22 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +183 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/test/tools/advanced.test.d.ts +2 -0
- package/dist/test/tools/advanced.test.d.ts.map +1 -0
- package/dist/test/tools/advanced.test.js +235 -0
- package/dist/test/tools/advanced.test.js.map +1 -0
- package/dist/test/tools/balance.test.d.ts +2 -0
- package/dist/test/tools/balance.test.d.ts.map +1 -0
- package/dist/test/tools/balance.test.js +167 -0
- package/dist/test/tools/balance.test.js.map +1 -0
- package/dist/test/tools/contract-info.test.d.ts +2 -0
- package/dist/test/tools/contract-info.test.d.ts.map +1 -0
- package/dist/test/tools/contract-info.test.js +286 -0
- package/dist/test/tools/contract-info.test.js.map +1 -0
- package/dist/test/tools/contract.test.d.ts +2 -0
- package/dist/test/tools/contract.test.d.ts.map +1 -0
- package/dist/test/tools/contract.test.js +234 -0
- package/dist/test/tools/contract.test.js.map +1 -0
- package/dist/test/tools/ens.test.d.ts +2 -0
- package/dist/test/tools/ens.test.d.ts.map +1 -0
- package/dist/test/tools/ens.test.js +236 -0
- package/dist/test/tools/ens.test.js.map +1 -0
- package/dist/test/tools/logs.test.d.ts +2 -0
- package/dist/test/tools/logs.test.d.ts.map +1 -0
- package/dist/test/tools/logs.test.js +196 -0
- package/dist/test/tools/logs.test.js.map +1 -0
- package/dist/test/tools/signatures.test.d.ts +2 -0
- package/dist/test/tools/signatures.test.d.ts.map +1 -0
- package/dist/test/tools/signatures.test.js +112 -0
- package/dist/test/tools/signatures.test.js.map +1 -0
- package/package.json +37 -22
- package/src/client.ts +160 -0
- package/src/index.ts +96 -0
- package/src/tools/advanced.ts +262 -0
- package/src/tools/balance.ts +176 -0
- package/src/tools/contract-info.ts +582 -0
- package/src/tools/contract.ts +180 -0
- package/src/tools/ens.ts +493 -0
- package/src/tools/index.ts +37 -0
- package/src/tools/logs.ts +291 -0
- package/src/tools/signatures.ts +126 -0
- package/src/types.ts +29 -0
- package/src/utils.ts +222 -0
- package/dist/hypersync-client.darwin-arm64-7fegfwn5.node +0 -0
- package/dist/index.js +0 -28282
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { HypersyncClient, LogField } from '@envio-dev/hypersync-client';
|
|
2
|
+
import { isAddress, keccak256, parseAbiItem, toBytes, toEventSignature } from 'viem';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { getClientManager, HYPERSYNC_URLS, SUPPORTED_CHAINS } from '../client.js';
|
|
5
|
+
import { convertEventArgsToTypes, createTool, formatResponse } from '../utils.js';
|
|
6
|
+
async function getLogsWithHypersync(chainName, eventAbi, hypersyncApiKey, address, fromBlock, toBlock, eventArgs) {
|
|
7
|
+
const hypersyncUrl = HYPERSYNC_URLS[chainName];
|
|
8
|
+
if (!hypersyncUrl) {
|
|
9
|
+
throw new Error(`Hypersync not supported for chain: ${chainName}`);
|
|
10
|
+
}
|
|
11
|
+
const client = HypersyncClient.new({
|
|
12
|
+
url: hypersyncUrl,
|
|
13
|
+
bearerToken: hypersyncApiKey
|
|
14
|
+
});
|
|
15
|
+
const abiItem = parseAbiItem(eventAbi);
|
|
16
|
+
const eventSignature = toEventSignature(abiItem);
|
|
17
|
+
const topic0 = keccak256(toBytes(eventSignature));
|
|
18
|
+
// Build topics array for filtering
|
|
19
|
+
const topics = [topic0];
|
|
20
|
+
// Add indexed parameter filtering if eventArgs provided
|
|
21
|
+
if (eventArgs && Object.keys(eventArgs).length > 0) {
|
|
22
|
+
const indexedInputs = abiItem.inputs.filter(input => input.indexed);
|
|
23
|
+
for (let i = 0; i < indexedInputs.length && i < 3; i++) {
|
|
24
|
+
const input = indexedInputs[i];
|
|
25
|
+
const argValue = input?.name ? eventArgs[input.name] : undefined;
|
|
26
|
+
if (argValue !== undefined) {
|
|
27
|
+
// Convert the argument to the proper format for topic filtering
|
|
28
|
+
let topicValue;
|
|
29
|
+
if (typeof argValue === 'string' && argValue.startsWith('0x')) {
|
|
30
|
+
topicValue = argValue;
|
|
31
|
+
}
|
|
32
|
+
else if (typeof argValue === 'string' && isAddress(argValue)) {
|
|
33
|
+
topicValue = argValue.toLowerCase().padStart(66, '0x000000000000000000000000');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// For other types, we'd need more sophisticated encoding
|
|
37
|
+
topicValue = String(argValue);
|
|
38
|
+
}
|
|
39
|
+
topics.push(topicValue);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
topics.push(null);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const query = {
|
|
47
|
+
fieldSelection: {
|
|
48
|
+
log: [
|
|
49
|
+
LogField.Address,
|
|
50
|
+
LogField.Topic0,
|
|
51
|
+
LogField.Topic1,
|
|
52
|
+
LogField.Topic2,
|
|
53
|
+
LogField.Topic3,
|
|
54
|
+
LogField.Data,
|
|
55
|
+
LogField.BlockNumber,
|
|
56
|
+
LogField.BlockHash,
|
|
57
|
+
LogField.TransactionHash,
|
|
58
|
+
LogField.TransactionIndex,
|
|
59
|
+
LogField.LogIndex
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
fromBlock: fromBlock ? Number.parseInt(fromBlock) : 0,
|
|
63
|
+
toBlock: toBlock ? Number.parseInt(toBlock) : undefined,
|
|
64
|
+
logs: [
|
|
65
|
+
{
|
|
66
|
+
address: address ? [address] : undefined,
|
|
67
|
+
topics: topics.filter(t => t !== null).map(t => (Array.isArray(t) ? t : [t]))
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
};
|
|
71
|
+
const res = await client.get(query);
|
|
72
|
+
// Convert hypersync logs to viem-compatible format
|
|
73
|
+
const decodedLogs = res.data.logs
|
|
74
|
+
.map((log) => {
|
|
75
|
+
try {
|
|
76
|
+
return {
|
|
77
|
+
address: log.address,
|
|
78
|
+
blockHash: log.blockHash,
|
|
79
|
+
blockNumber: log.blockNumber ? BigInt(log.blockNumber) : 0n,
|
|
80
|
+
data: log.data,
|
|
81
|
+
logIndex: log.logIndex,
|
|
82
|
+
topics: log.topics,
|
|
83
|
+
transactionHash: log.transactionHash,
|
|
84
|
+
transactionIndex: log.transactionIndex,
|
|
85
|
+
eventName: abiItem.name,
|
|
86
|
+
args: {}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.warn('Failed to decode log:', error);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
.filter((log) => log !== null);
|
|
95
|
+
return decodedLogs;
|
|
96
|
+
}
|
|
97
|
+
export default {
|
|
98
|
+
get_logs: createTool('Query Contract Events', 'Search and decode contract events with filtering. Uses viem with hypersync fallback. Specify address and block ranges for best performance.', z.object({
|
|
99
|
+
chain: z.enum(SUPPORTED_CHAINS).describe('The blockchain network to use'),
|
|
100
|
+
eventAbi: z
|
|
101
|
+
.string()
|
|
102
|
+
.describe('Event ABI definition (e.g., "event Transfer(address indexed from, address indexed to, uint256 value)")'),
|
|
103
|
+
address: z.string().optional().describe('Contract address (RECOMMENDED for performance)'),
|
|
104
|
+
fromBlock: z.string().optional().describe('Start block (defaults to latest-1000)'),
|
|
105
|
+
toBlock: z.string().optional().describe('End block (defaults to latest)'),
|
|
106
|
+
eventArgs: z
|
|
107
|
+
.record(z.union([
|
|
108
|
+
z.string(),
|
|
109
|
+
z.number(),
|
|
110
|
+
z.boolean(),
|
|
111
|
+
z.array(z.union([z.string(), z.number(), z.boolean()]))
|
|
112
|
+
]))
|
|
113
|
+
.optional()
|
|
114
|
+
.describe('Filter by indexed parameters: {"from": "0x123...", "to": "0x456..."}')
|
|
115
|
+
}), async (args) => {
|
|
116
|
+
const clientManager = getClientManager();
|
|
117
|
+
const config = clientManager.config;
|
|
118
|
+
// First try with regular viem client
|
|
119
|
+
try {
|
|
120
|
+
const client = clientManager.getClient(args.chain);
|
|
121
|
+
const abiItem = parseAbiItem(args.eventAbi);
|
|
122
|
+
// Determine block range
|
|
123
|
+
const fromBlockNum = args.fromBlock ? BigInt(args.fromBlock) : undefined;
|
|
124
|
+
const toBlockNum = args.toBlock ? BigInt(args.toBlock) : undefined;
|
|
125
|
+
// Prepare getLogs parameters
|
|
126
|
+
const getLogsParams = {
|
|
127
|
+
event: abiItem,
|
|
128
|
+
fromBlock: fromBlockNum,
|
|
129
|
+
toBlock: toBlockNum
|
|
130
|
+
};
|
|
131
|
+
// Add address filter if provided
|
|
132
|
+
if (args.address && isAddress(args.address)) {
|
|
133
|
+
getLogsParams.address = args.address;
|
|
134
|
+
}
|
|
135
|
+
// Add event argument filters if provided
|
|
136
|
+
if (args.eventArgs && Object.keys(args.eventArgs).length > 0) {
|
|
137
|
+
// Convert event arguments to proper types based on ABI
|
|
138
|
+
const convertedEventArgs = convertEventArgsToTypes(args.eventArgs, abiItem.inputs);
|
|
139
|
+
getLogsParams.args = convertedEventArgs;
|
|
140
|
+
}
|
|
141
|
+
// Use client.getLogs with proper typing
|
|
142
|
+
const logs = await client.getLogs(getLogsParams);
|
|
143
|
+
// Convert logs to serializable format
|
|
144
|
+
const serializedLogs = logs.map(log => {
|
|
145
|
+
const baseLogData = {
|
|
146
|
+
address: log.address,
|
|
147
|
+
blockHash: log.blockHash,
|
|
148
|
+
blockNumber: log.blockNumber?.toString(),
|
|
149
|
+
data: log.data,
|
|
150
|
+
logIndex: log.logIndex,
|
|
151
|
+
topics: log.topics,
|
|
152
|
+
transactionHash: log.transactionHash,
|
|
153
|
+
transactionIndex: log.transactionIndex
|
|
154
|
+
};
|
|
155
|
+
return {
|
|
156
|
+
...baseLogData,
|
|
157
|
+
decoded: {
|
|
158
|
+
eventName: log.eventName,
|
|
159
|
+
args: log.args
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
return formatResponse({
|
|
164
|
+
logs: serializedLogs,
|
|
165
|
+
eventSignature: toEventSignature(abiItem),
|
|
166
|
+
chain: args.chain,
|
|
167
|
+
fromBlock: fromBlockNum?.toString() || 'latest',
|
|
168
|
+
toBlock: toBlockNum?.toString() || 'latest',
|
|
169
|
+
count: logs.length,
|
|
170
|
+
dataSource: 'viem',
|
|
171
|
+
filters: {
|
|
172
|
+
address: args.address || null,
|
|
173
|
+
eventArgs: args.eventArgs || null
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch (viemError) {
|
|
178
|
+
// If viem fails and we have hypersync support for this chain, try hypersync as fallback
|
|
179
|
+
if (HYPERSYNC_URLS[args.chain] && args.chain !== 'localhost') {
|
|
180
|
+
console.warn(`Viem getLogs failed for ${args.chain}, trying hypersync fallback:`, viemError);
|
|
181
|
+
try {
|
|
182
|
+
const hypersyncLogs = await getLogsWithHypersync(args.chain, args.eventAbi, config.hypersyncApiKey, args.address, args.fromBlock, args.toBlock, args.eventArgs);
|
|
183
|
+
const abiItem = parseAbiItem(args.eventAbi);
|
|
184
|
+
const fromBlockNum = args.fromBlock ? BigInt(args.fromBlock) : undefined;
|
|
185
|
+
const toBlockNum = args.toBlock ? BigInt(args.toBlock) : undefined;
|
|
186
|
+
// Convert hypersync logs to the same format as viem logs
|
|
187
|
+
const serializedLogs = hypersyncLogs.map(log => {
|
|
188
|
+
const baseLogData = {
|
|
189
|
+
address: log.address,
|
|
190
|
+
blockHash: log.blockHash,
|
|
191
|
+
blockNumber: log.blockNumber?.toString(),
|
|
192
|
+
data: log.data,
|
|
193
|
+
logIndex: log.logIndex,
|
|
194
|
+
topics: log.topics,
|
|
195
|
+
transactionHash: log.transactionHash,
|
|
196
|
+
transactionIndex: log.transactionIndex
|
|
197
|
+
};
|
|
198
|
+
return {
|
|
199
|
+
...baseLogData,
|
|
200
|
+
decoded: {
|
|
201
|
+
eventName: log.eventName,
|
|
202
|
+
args: log.args
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
return formatResponse({
|
|
207
|
+
logs: serializedLogs,
|
|
208
|
+
eventSignature: toEventSignature(abiItem),
|
|
209
|
+
chain: args.chain,
|
|
210
|
+
fromBlock: fromBlockNum?.toString() || 'latest',
|
|
211
|
+
toBlock: toBlockNum?.toString() || 'latest',
|
|
212
|
+
count: hypersyncLogs.length,
|
|
213
|
+
dataSource: 'hypersync',
|
|
214
|
+
filters: {
|
|
215
|
+
address: args.address || null,
|
|
216
|
+
eventArgs: args.eventArgs || null
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
catch (hypersyncError) {
|
|
221
|
+
throw new Error(`Both viem and hypersync failed. Viem error: ${viemError}. Hypersync error: ${hypersyncError}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// No hypersync fallback available for this chain
|
|
226
|
+
throw new Error(`Failed to get logs with viem (hypersync not available for ${args.chain}): ${viemError}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/tools/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
get_function_signature: {
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
schema: z.ZodObject<{
|
|
7
|
+
items: z.ZodArray<z.ZodObject<{
|
|
8
|
+
functionAbi: z.ZodString;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
functionAbi: string;
|
|
11
|
+
}, {
|
|
12
|
+
functionAbi: string;
|
|
13
|
+
}>, "many">;
|
|
14
|
+
}, "strip", z.ZodTypeAny, {
|
|
15
|
+
items: {
|
|
16
|
+
functionAbi: string;
|
|
17
|
+
}[];
|
|
18
|
+
}, {
|
|
19
|
+
items: {
|
|
20
|
+
functionAbi: string;
|
|
21
|
+
}[];
|
|
22
|
+
}>;
|
|
23
|
+
handler: (args: {
|
|
24
|
+
items: {
|
|
25
|
+
functionAbi: string;
|
|
26
|
+
}[];
|
|
27
|
+
}) => Promise<import("../types.js").ToolResult>;
|
|
28
|
+
};
|
|
29
|
+
get_event_signature: {
|
|
30
|
+
title: string;
|
|
31
|
+
description: string;
|
|
32
|
+
schema: z.ZodObject<{
|
|
33
|
+
items: z.ZodArray<z.ZodObject<{
|
|
34
|
+
eventAbi: z.ZodString;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
eventAbi: string;
|
|
37
|
+
}, {
|
|
38
|
+
eventAbi: string;
|
|
39
|
+
}>, "many">;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
items: {
|
|
42
|
+
eventAbi: string;
|
|
43
|
+
}[];
|
|
44
|
+
}, {
|
|
45
|
+
items: {
|
|
46
|
+
eventAbi: string;
|
|
47
|
+
}[];
|
|
48
|
+
}>;
|
|
49
|
+
handler: (args: {
|
|
50
|
+
items: {
|
|
51
|
+
eventAbi: string;
|
|
52
|
+
}[];
|
|
53
|
+
}) => Promise<import("../types.js").ToolResult>;
|
|
54
|
+
};
|
|
55
|
+
get_error_signature: {
|
|
56
|
+
title: string;
|
|
57
|
+
description: string;
|
|
58
|
+
schema: z.ZodObject<{
|
|
59
|
+
items: z.ZodArray<z.ZodObject<{
|
|
60
|
+
errorAbi: z.ZodString;
|
|
61
|
+
}, "strip", z.ZodTypeAny, {
|
|
62
|
+
errorAbi: string;
|
|
63
|
+
}, {
|
|
64
|
+
errorAbi: string;
|
|
65
|
+
}>, "many">;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
items: {
|
|
68
|
+
errorAbi: string;
|
|
69
|
+
}[];
|
|
70
|
+
}, {
|
|
71
|
+
items: {
|
|
72
|
+
errorAbi: string;
|
|
73
|
+
}[];
|
|
74
|
+
}>;
|
|
75
|
+
handler: (args: {
|
|
76
|
+
items: {
|
|
77
|
+
errorAbi: string;
|
|
78
|
+
}[];
|
|
79
|
+
}) => Promise<import("../types.js").ToolResult>;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export default _default;
|
|
83
|
+
//# sourceMappingURL=signatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../../src/tools/signatures.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBvB,wBA+FC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { keccak256, parseAbiItem, toBytes, toEventSignature, toFunctionSignature } from 'viem';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { createTool, formatResponse } from '../utils.js';
|
|
4
|
+
const FunctionAbiSchema = z.object({
|
|
5
|
+
functionAbi: z.string().describe('Function ABI definition (e.g., "function transfer(address to, uint256 amount)")')
|
|
6
|
+
});
|
|
7
|
+
const EventAbiSchema = z.object({
|
|
8
|
+
eventAbi: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe('Event ABI definition (e.g., "event Transfer(address indexed from, address indexed to, uint256 value)")')
|
|
11
|
+
});
|
|
12
|
+
const ErrorAbiSchema = z.object({
|
|
13
|
+
errorAbi: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe('Error ABI definition (e.g., "error InsufficientBalance(uint256 available, uint256 required)")')
|
|
16
|
+
});
|
|
17
|
+
export default {
|
|
18
|
+
get_function_signature: createTool('Calculate Function Signatures', 'Generate 4-byte function selectors from ABI definitions. BATCH OPTIMIZED - use for transaction decoding.', z.object({
|
|
19
|
+
items: z
|
|
20
|
+
.array(FunctionAbiSchema)
|
|
21
|
+
.describe('Array of function ABI definitions. Batch multiple functions for efficiency.')
|
|
22
|
+
}), async (args) => {
|
|
23
|
+
try {
|
|
24
|
+
const results = args.items.map((item) => {
|
|
25
|
+
const abiItem = parseAbiItem(item.functionAbi);
|
|
26
|
+
const signature = toFunctionSignature(abiItem);
|
|
27
|
+
const hash = keccak256(toBytes(signature));
|
|
28
|
+
const selector = hash.slice(0, 10);
|
|
29
|
+
return {
|
|
30
|
+
signature: selector,
|
|
31
|
+
fullSignature: signature,
|
|
32
|
+
functionName: abiItem.name,
|
|
33
|
+
inputs: abiItem.inputs,
|
|
34
|
+
outputs: abiItem.outputs || [],
|
|
35
|
+
stateMutability: abiItem.stateMutability,
|
|
36
|
+
originalAbi: item.functionAbi
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
return formatResponse(results);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new Error(`Failed to parse function ABI: ${error}`);
|
|
43
|
+
}
|
|
44
|
+
}),
|
|
45
|
+
get_event_signature: createTool('Calculate Event Signatures', 'Generate event topic0 hashes from ABI definitions. BATCH OPTIMIZED - use for log filtering setup.', z.object({
|
|
46
|
+
items: z.array(EventAbiSchema).describe('Array of event ABI definitions. Batch multiple events for optimal performance.')
|
|
47
|
+
}), async (args) => {
|
|
48
|
+
try {
|
|
49
|
+
const results = args.items.map((item) => {
|
|
50
|
+
const abiItem = parseAbiItem(item.eventAbi);
|
|
51
|
+
const signature = toEventSignature(abiItem);
|
|
52
|
+
const hash = keccak256(toBytes(signature));
|
|
53
|
+
return {
|
|
54
|
+
signature: hash,
|
|
55
|
+
topic0: hash,
|
|
56
|
+
fullSignature: signature,
|
|
57
|
+
eventName: abiItem.name,
|
|
58
|
+
inputs: abiItem.inputs,
|
|
59
|
+
anonymous: abiItem.anonymous || false,
|
|
60
|
+
originalAbi: item.eventAbi
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
return formatResponse(results);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`Failed to parse event ABI: ${error}`);
|
|
67
|
+
}
|
|
68
|
+
}),
|
|
69
|
+
get_error_signature: createTool('Calculate Error Signatures', 'Generate 4-byte error selectors from ABI definitions. BATCH OPTIMIZED - use for revert reason decoding.', z.object({
|
|
70
|
+
items: z.array(ErrorAbiSchema).describe('Array of error ABI definitions. Batch related errors for efficiency.')
|
|
71
|
+
}), async (args) => {
|
|
72
|
+
try {
|
|
73
|
+
const results = args.items.map((item) => {
|
|
74
|
+
const abiItem = parseAbiItem(item.errorAbi);
|
|
75
|
+
const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;
|
|
76
|
+
const hash = keccak256(toBytes(signature));
|
|
77
|
+
const selector = hash.slice(0, 10);
|
|
78
|
+
return {
|
|
79
|
+
signature: selector,
|
|
80
|
+
fullSignature: signature,
|
|
81
|
+
errorName: abiItem.name,
|
|
82
|
+
inputs: abiItem.inputs,
|
|
83
|
+
originalAbi: item.errorAbi
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
return formatResponse(results);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
throw new Error(`Failed to parse error ABI: ${error}`);
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=signatures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../../src/tools/signatures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AbiParameter } from 'viem';
|
|
2
|
+
export interface AbiError {
|
|
3
|
+
type: 'error';
|
|
4
|
+
name: string;
|
|
5
|
+
inputs: readonly AbiParameter[];
|
|
6
|
+
}
|
|
7
|
+
export interface Config {
|
|
8
|
+
etherscanApiKey?: string;
|
|
9
|
+
alchemyApiKey?: string;
|
|
10
|
+
infuraApiKey?: string;
|
|
11
|
+
customRpcUrls?: Record<string, string>;
|
|
12
|
+
hypersyncApiKey?: string;
|
|
13
|
+
}
|
|
14
|
+
export type ChainName = 'mainnet' | 'base' | 'arbitrum' | 'polygon' | 'optimism' | 'celo' | 'localhost';
|
|
15
|
+
export interface ToolResult {
|
|
16
|
+
[x: string]: unknown;
|
|
17
|
+
content: Array<{
|
|
18
|
+
type: 'text';
|
|
19
|
+
text: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGxC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;CAChC;AAGD,MAAM,WAAW,MAAM;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAGD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,CAAA;AAGvG,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AbiParameter } from 'viem';
|
|
2
|
+
import type { ToolResult } from './types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export declare function createTool<T extends z.ZodType>(title: string, description: string, schema: T, handler: (args: z.infer<T>) => Promise<ToolResult>): {
|
|
5
|
+
title: string;
|
|
6
|
+
description: string;
|
|
7
|
+
schema: T;
|
|
8
|
+
handler: (args: z.infer<T>) => Promise<ToolResult>;
|
|
9
|
+
};
|
|
10
|
+
export declare function convertBigIntToString(obj: unknown): unknown;
|
|
11
|
+
export declare function convertArgumentsToTypes(args: (string | number | boolean | null)[], abiInputs: readonly AbiParameter[]): unknown[];
|
|
12
|
+
export declare function convertEventArgsToTypes(eventArgs: Record<string, unknown>, abiInputs: readonly AbiParameter[]): Record<string, unknown>;
|
|
13
|
+
export declare function formatResponse(data: unknown): ToolResult;
|
|
14
|
+
export declare function parseCommandLineArgs(): {
|
|
15
|
+
etherscanApiKey?: string;
|
|
16
|
+
alchemyApiKey?: string;
|
|
17
|
+
infuraApiKey?: string;
|
|
18
|
+
customRpcUrls?: Record<string, string>;
|
|
19
|
+
hypersyncApiKey?: string;
|
|
20
|
+
showHelp?: boolean;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAC5C,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC;;;;oBAAlC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC;EAQnD;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAe3D;AAGD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,EAC1C,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,OAAO,EAAE,CAiDX;AAGD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2DzB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAUxD;AAGD,wBAAgB,oBAAoB,IAAI;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CA2CA"}
|