web3-tools-mcp 1.2.0 → 1.2.2
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 +91 -228
- package/package.json +5 -5
- package/dist/package.json +0 -63
- package/dist/test/tools/advanced.test.d.ts +0 -2
- package/dist/test/tools/advanced.test.d.ts.map +0 -1
- package/dist/test/tools/advanced.test.js +0 -235
- package/dist/test/tools/advanced.test.js.map +0 -1
- package/dist/test/tools/balance.test.d.ts +0 -2
- package/dist/test/tools/balance.test.d.ts.map +0 -1
- package/dist/test/tools/balance.test.js +0 -167
- package/dist/test/tools/balance.test.js.map +0 -1
- package/dist/test/tools/contract-info.test.d.ts +0 -2
- package/dist/test/tools/contract-info.test.d.ts.map +0 -1
- package/dist/test/tools/contract-info.test.js +0 -286
- package/dist/test/tools/contract-info.test.js.map +0 -1
- package/dist/test/tools/contract.test.d.ts +0 -2
- package/dist/test/tools/contract.test.d.ts.map +0 -1
- package/dist/test/tools/contract.test.js +0 -234
- package/dist/test/tools/contract.test.js.map +0 -1
- package/dist/test/tools/ens.test.d.ts +0 -2
- package/dist/test/tools/ens.test.d.ts.map +0 -1
- package/dist/test/tools/ens.test.js +0 -236
- package/dist/test/tools/ens.test.js.map +0 -1
- package/dist/test/tools/logs.test.d.ts +0 -2
- package/dist/test/tools/logs.test.d.ts.map +0 -1
- package/dist/test/tools/logs.test.js +0 -196
- package/dist/test/tools/logs.test.js.map +0 -1
- package/dist/test/tools/signatures.test.d.ts +0 -2
- package/dist/test/tools/signatures.test.d.ts.map +0 -1
- package/dist/test/tools/signatures.test.js +0 -112
- package/dist/test/tools/signatures.test.js.map +0 -1
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll } from 'vitest';
|
|
2
|
-
import { config } from 'dotenv';
|
|
3
|
-
import { initializeClientManager } from '../../src/client.js';
|
|
4
|
-
import ensTools from '../../src/tools/ens.js';
|
|
5
|
-
// Load environment variables
|
|
6
|
-
config();
|
|
7
|
-
describe('ENS Tools', () => {
|
|
8
|
-
beforeAll(() => {
|
|
9
|
-
// Initialize client manager with config
|
|
10
|
-
initializeClientManager({
|
|
11
|
-
alchemyApiKey: process.env.ALCHEMY_API_KEY,
|
|
12
|
-
infuraApiKey: process.env.INFURA_API_KEY,
|
|
13
|
-
etherscanApiKey: process.env.ETHERSCAN_API_KEY,
|
|
14
|
-
hypersyncApiKey: process.env.HYPERSYNC_API_KEY
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
describe('resolve_ens_name', () => {
|
|
18
|
-
it('should resolve vitalik.eth to an address', async () => {
|
|
19
|
-
const result = await ensTools.resolve_ens_name.handler({
|
|
20
|
-
chain: 'mainnet',
|
|
21
|
-
name: 'vitalik.eth'
|
|
22
|
-
});
|
|
23
|
-
const data = JSON.parse(result.content[0].text);
|
|
24
|
-
expect(data.success).toBe(true);
|
|
25
|
-
expect(data.name).toBe('vitalik.eth');
|
|
26
|
-
expect(data.address).toBeTruthy();
|
|
27
|
-
expect(data.address).toMatch(/^0x[a-fA-F0-9]{40}$/);
|
|
28
|
-
}, 30000);
|
|
29
|
-
it('should return null for non-existent ENS name', async () => {
|
|
30
|
-
const result = await ensTools.resolve_ens_name.handler({
|
|
31
|
-
chain: 'mainnet',
|
|
32
|
-
name: 'this-name-definitely-does-not-exist-12345.eth'
|
|
33
|
-
});
|
|
34
|
-
const data = JSON.parse(result.content[0].text);
|
|
35
|
-
expect(data.success).toBe(false);
|
|
36
|
-
expect(data.address).toBeNull();
|
|
37
|
-
}, 30000);
|
|
38
|
-
});
|
|
39
|
-
describe('reverse_resolve_ens', () => {
|
|
40
|
-
it('should reverse resolve vitalik.eth address to name', async () => {
|
|
41
|
-
// First resolve vitalik.eth to get the address
|
|
42
|
-
const resolveResult = await ensTools.resolve_ens_name.handler({
|
|
43
|
-
chain: 'mainnet',
|
|
44
|
-
name: 'vitalik.eth'
|
|
45
|
-
});
|
|
46
|
-
const resolveData = JSON.parse(resolveResult.content[0].text);
|
|
47
|
-
const address = resolveData.address;
|
|
48
|
-
// Then reverse resolve
|
|
49
|
-
const result = await ensTools.reverse_resolve_ens.handler({
|
|
50
|
-
chain: 'mainnet',
|
|
51
|
-
address
|
|
52
|
-
});
|
|
53
|
-
const data = JSON.parse(result.content[0].text);
|
|
54
|
-
expect(data.success).toBe(true);
|
|
55
|
-
expect(data.address).toBe(address);
|
|
56
|
-
expect(data.name).toBeTruthy();
|
|
57
|
-
}, 30000);
|
|
58
|
-
it('should return null for address without reverse record', async () => {
|
|
59
|
-
const result = await ensTools.reverse_resolve_ens.handler({
|
|
60
|
-
chain: 'mainnet',
|
|
61
|
-
address: '0x0000000000000000000000000000000000000001'
|
|
62
|
-
});
|
|
63
|
-
const data = JSON.parse(result.content[0].text);
|
|
64
|
-
expect(data.success).toBe(false);
|
|
65
|
-
expect(data.name).toBeNull();
|
|
66
|
-
}, 30000);
|
|
67
|
-
});
|
|
68
|
-
describe('get_ens_text_record', () => {
|
|
69
|
-
it('should get text record from ENS name', async () => {
|
|
70
|
-
const result = await ensTools.get_ens_text_record.handler({
|
|
71
|
-
chain: 'mainnet',
|
|
72
|
-
name: 'vitalik.eth',
|
|
73
|
-
key: 'url'
|
|
74
|
-
});
|
|
75
|
-
const data = JSON.parse(result.content[0].text);
|
|
76
|
-
// vitalik.eth may or may not have a url record, so we just check the structure
|
|
77
|
-
expect(data).toHaveProperty('success');
|
|
78
|
-
expect(data.name).toBe('vitalik.eth');
|
|
79
|
-
expect(data.key).toBe('url');
|
|
80
|
-
}, 30000);
|
|
81
|
-
});
|
|
82
|
-
describe('get_ens_avatar', () => {
|
|
83
|
-
it('should get avatar from ENS name with avatar set', async () => {
|
|
84
|
-
const result = await ensTools.get_ens_avatar.handler({
|
|
85
|
-
chain: 'mainnet',
|
|
86
|
-
name: 'vitalik.eth'
|
|
87
|
-
});
|
|
88
|
-
const data = JSON.parse(result.content[0].text);
|
|
89
|
-
expect(data).toHaveProperty('success');
|
|
90
|
-
expect(data.name).toBe('vitalik.eth');
|
|
91
|
-
// Avatar may or may not be set
|
|
92
|
-
if (data.success) {
|
|
93
|
-
expect(data.avatar).toBeTruthy();
|
|
94
|
-
}
|
|
95
|
-
}, 30000);
|
|
96
|
-
});
|
|
97
|
-
describe('batch_resolve_ens_names', () => {
|
|
98
|
-
it('should batch resolve multiple ENS names', async () => {
|
|
99
|
-
const result = await ensTools.batch_resolve_ens_names.handler({
|
|
100
|
-
chain: 'mainnet',
|
|
101
|
-
names: ['vitalik.eth', 'nick.eth', 'nonexistent12345.eth']
|
|
102
|
-
});
|
|
103
|
-
const data = JSON.parse(result.content[0].text);
|
|
104
|
-
expect(data.success).toBe(true);
|
|
105
|
-
expect(data.totalNames).toBe(3);
|
|
106
|
-
expect(data.results).toHaveLength(3);
|
|
107
|
-
expect(data.successfulResolves).toBeGreaterThan(0);
|
|
108
|
-
// Check that vitalik.eth resolved successfully
|
|
109
|
-
const vitalikResult = data.results.find((r) => r.name === 'vitalik.eth');
|
|
110
|
-
expect(vitalikResult).toBeTruthy();
|
|
111
|
-
expect(vitalikResult.success).toBe(true);
|
|
112
|
-
expect(vitalikResult.address).toBeTruthy();
|
|
113
|
-
}, 30000);
|
|
114
|
-
});
|
|
115
|
-
// Base ENS Tests
|
|
116
|
-
describe('Base ENS Support', () => {
|
|
117
|
-
const BASE_TEST_NAME = 'ben👾the👾dev.base.eth';
|
|
118
|
-
const BASE_TEST_ADDRESS = '0xc880e213f2aB4BAe36C8bF19a6Df6757152242c0';
|
|
119
|
-
describe('resolve_ens_name on Base', () => {
|
|
120
|
-
it('should resolve Base ENS name to address', async () => {
|
|
121
|
-
const result = await ensTools.resolve_ens_name.handler({
|
|
122
|
-
chain: 'base',
|
|
123
|
-
name: BASE_TEST_NAME
|
|
124
|
-
});
|
|
125
|
-
const data = JSON.parse(result.content[0].text);
|
|
126
|
-
expect(data.success).toBe(true);
|
|
127
|
-
expect(data.name).toBe(BASE_TEST_NAME);
|
|
128
|
-
expect(data.address).toBe(BASE_TEST_ADDRESS);
|
|
129
|
-
expect(data.chain).toBe('base');
|
|
130
|
-
}, 30000);
|
|
131
|
-
it('should return null for non-existent Base ENS name', async () => {
|
|
132
|
-
const result = await ensTools.resolve_ens_name.handler({
|
|
133
|
-
chain: 'base',
|
|
134
|
-
name: 'this-definitely-does-not-exist-12345.base.eth'
|
|
135
|
-
});
|
|
136
|
-
const data = JSON.parse(result.content[0].text);
|
|
137
|
-
expect(data.success).toBe(false);
|
|
138
|
-
expect(data.address).toBeNull();
|
|
139
|
-
}, 30000);
|
|
140
|
-
});
|
|
141
|
-
describe('reverse_resolve_ens on Base', () => {
|
|
142
|
-
it('should reverse resolve Base address to ENS name', async () => {
|
|
143
|
-
const result = await ensTools.reverse_resolve_ens.handler({
|
|
144
|
-
chain: 'base',
|
|
145
|
-
address: BASE_TEST_ADDRESS
|
|
146
|
-
});
|
|
147
|
-
const data = JSON.parse(result.content[0].text);
|
|
148
|
-
expect(data.success).toBe(true);
|
|
149
|
-
expect(data.address).toBe(BASE_TEST_ADDRESS);
|
|
150
|
-
expect(data.name).toBe(BASE_TEST_NAME);
|
|
151
|
-
expect(data.chain).toBe('base');
|
|
152
|
-
}, 30000);
|
|
153
|
-
it('should return null for Base address without reverse record', async () => {
|
|
154
|
-
const result = await ensTools.reverse_resolve_ens.handler({
|
|
155
|
-
chain: 'base',
|
|
156
|
-
address: '0x0000000000000000000000000000000000000001'
|
|
157
|
-
});
|
|
158
|
-
const data = JSON.parse(result.content[0].text);
|
|
159
|
-
expect(data.success).toBe(false);
|
|
160
|
-
expect(data.name).toBeNull();
|
|
161
|
-
}, 30000);
|
|
162
|
-
});
|
|
163
|
-
describe('get_ens_text_record on Base', () => {
|
|
164
|
-
it('should get twitter text record from Base ENS name', async () => {
|
|
165
|
-
const result = await ensTools.get_ens_text_record.handler({
|
|
166
|
-
chain: 'base',
|
|
167
|
-
name: BASE_TEST_NAME,
|
|
168
|
-
key: 'com.twitter'
|
|
169
|
-
});
|
|
170
|
-
const data = JSON.parse(result.content[0].text);
|
|
171
|
-
expect(data.success).toBe(true);
|
|
172
|
-
expect(data.name).toBe(BASE_TEST_NAME);
|
|
173
|
-
expect(data.key).toBe('com.twitter');
|
|
174
|
-
expect(data.value).toBe('hajnalben');
|
|
175
|
-
expect(data.chain).toBe('base');
|
|
176
|
-
}, 30000);
|
|
177
|
-
it('should get location text record from Base ENS name', async () => {
|
|
178
|
-
const result = await ensTools.get_ens_text_record.handler({
|
|
179
|
-
chain: 'base',
|
|
180
|
-
name: BASE_TEST_NAME,
|
|
181
|
-
key: 'location'
|
|
182
|
-
});
|
|
183
|
-
const data = JSON.parse(result.content[0].text);
|
|
184
|
-
expect(data.success).toBe(true);
|
|
185
|
-
expect(data.value).toBe('Budapest, Hungary');
|
|
186
|
-
}, 30000);
|
|
187
|
-
it('should return null for non-existent text record on Base', async () => {
|
|
188
|
-
const result = await ensTools.get_ens_text_record.handler({
|
|
189
|
-
chain: 'base',
|
|
190
|
-
name: BASE_TEST_NAME,
|
|
191
|
-
key: 'nonexistent-key-12345'
|
|
192
|
-
});
|
|
193
|
-
const data = JSON.parse(result.content[0].text);
|
|
194
|
-
expect(data.success).toBe(false);
|
|
195
|
-
expect(data.value).toBeNull();
|
|
196
|
-
}, 30000);
|
|
197
|
-
});
|
|
198
|
-
describe('get_ens_avatar on Base', () => {
|
|
199
|
-
it('should get avatar from Base ENS name', async () => {
|
|
200
|
-
const result = await ensTools.get_ens_avatar.handler({
|
|
201
|
-
chain: 'base',
|
|
202
|
-
name: BASE_TEST_NAME
|
|
203
|
-
});
|
|
204
|
-
const data = JSON.parse(result.content[0].text);
|
|
205
|
-
expect(data.success).toBe(true);
|
|
206
|
-
expect(data.name).toBe(BASE_TEST_NAME);
|
|
207
|
-
expect(data.avatar).toBeTruthy();
|
|
208
|
-
expect(data.avatar).toContain('ipfs://');
|
|
209
|
-
expect(data.chain).toBe('base');
|
|
210
|
-
}, 30000);
|
|
211
|
-
});
|
|
212
|
-
describe('batch_resolve_ens_names on Base', () => {
|
|
213
|
-
it('should batch resolve multiple Base ENS names', async () => {
|
|
214
|
-
const result = await ensTools.batch_resolve_ens_names.handler({
|
|
215
|
-
chain: 'base',
|
|
216
|
-
names: [BASE_TEST_NAME, 'nonexistent12345.base.eth']
|
|
217
|
-
});
|
|
218
|
-
const data = JSON.parse(result.content[0].text);
|
|
219
|
-
expect(data.success).toBe(true);
|
|
220
|
-
expect(data.chain).toBe('base');
|
|
221
|
-
expect(data.totalNames).toBe(2);
|
|
222
|
-
expect(data.results).toHaveLength(2);
|
|
223
|
-
// Check that our test name resolved successfully
|
|
224
|
-
const testResult = data.results.find((r) => r.name === BASE_TEST_NAME);
|
|
225
|
-
expect(testResult).toBeTruthy();
|
|
226
|
-
expect(testResult.success).toBe(true);
|
|
227
|
-
expect(testResult.address).toBe(BASE_TEST_ADDRESS);
|
|
228
|
-
// Check that non-existent name failed
|
|
229
|
-
const nonExistentResult = data.results.find((r) => r.name === 'nonexistent12345.base.eth');
|
|
230
|
-
expect(nonExistentResult).toBeTruthy();
|
|
231
|
-
expect(nonExistentResult.success).toBe(false);
|
|
232
|
-
}, 30000);
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
//# sourceMappingURL=ens.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ens.test.js","sourceRoot":"","sources":["../../../test/tools/ens.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.test.d.ts","sourceRoot":"","sources":["../../../test/tools/logs.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll } from 'vitest';
|
|
2
|
-
import { config } from 'dotenv';
|
|
3
|
-
import { initializeClientManager } from '../../src/client.js';
|
|
4
|
-
import logsTools from '../../src/tools/logs.js';
|
|
5
|
-
// Load environment variables
|
|
6
|
-
config();
|
|
7
|
-
describe('Logs Tools', () => {
|
|
8
|
-
beforeAll(() => {
|
|
9
|
-
// Initialize client manager with config
|
|
10
|
-
initializeClientManager({
|
|
11
|
-
alchemyApiKey: process.env.ALCHEMY_API_KEY,
|
|
12
|
-
infuraApiKey: process.env.INFURA_API_KEY,
|
|
13
|
-
etherscanApiKey: process.env.ETHERSCAN_API_KEY,
|
|
14
|
-
hypersyncApiKey: process.env.HYPERSYNC_API_KEY
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
describe('get_logs', () => {
|
|
18
|
-
it('should fetch Transfer events from USDC contract', async () => {
|
|
19
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
20
|
-
const result = await logsTools.get_logs.handler({
|
|
21
|
-
chain: 'mainnet',
|
|
22
|
-
address: USDC_CONTRACT,
|
|
23
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
24
|
-
fromBlock: '21000000',
|
|
25
|
-
toBlock: '21000100'
|
|
26
|
-
});
|
|
27
|
-
const data = JSON.parse(result.content[0].text);
|
|
28
|
-
expect(data.logs).toBeDefined();
|
|
29
|
-
expect(Array.isArray(data.logs)).toBe(true);
|
|
30
|
-
expect(data.chain).toBe('mainnet');
|
|
31
|
-
expect(data.filters.address).toBe(USDC_CONTRACT);
|
|
32
|
-
expect(data.fromBlock).toBe('21000000');
|
|
33
|
-
expect(data.toBlock).toBe('21000100');
|
|
34
|
-
}, 30000);
|
|
35
|
-
it('should filter Transfer events by indexed from parameter', async () => {
|
|
36
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
37
|
-
const BINANCE_ADDRESS = '0x28C6c06298d514Db089934071355E5743bf21d60';
|
|
38
|
-
const result = await logsTools.get_logs.handler({
|
|
39
|
-
chain: 'mainnet',
|
|
40
|
-
address: USDC_CONTRACT,
|
|
41
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
42
|
-
eventArgs: {
|
|
43
|
-
from: BINANCE_ADDRESS
|
|
44
|
-
},
|
|
45
|
-
fromBlock: '21000000',
|
|
46
|
-
toBlock: '21000100'
|
|
47
|
-
});
|
|
48
|
-
const data = JSON.parse(result.content[0].text);
|
|
49
|
-
expect(data.logs).toBeDefined();
|
|
50
|
-
// All events should have the specified 'from' address
|
|
51
|
-
if (data.logs.length > 0) {
|
|
52
|
-
data.logs.forEach((event) => {
|
|
53
|
-
expect(event.decoded.args.from.toLowerCase()).toBe(BINANCE_ADDRESS.toLowerCase());
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}, 30000);
|
|
57
|
-
it('should filter Transfer events by indexed to parameter', async () => {
|
|
58
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
59
|
-
const RECEIVER_ADDRESS = '0x28C6c06298d514Db089934071355E5743bf21d60';
|
|
60
|
-
const result = await logsTools.get_logs.handler({
|
|
61
|
-
chain: 'mainnet',
|
|
62
|
-
address: USDC_CONTRACT,
|
|
63
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
64
|
-
eventArgs: {
|
|
65
|
-
to: RECEIVER_ADDRESS
|
|
66
|
-
},
|
|
67
|
-
fromBlock: '21000000',
|
|
68
|
-
toBlock: '21000100'
|
|
69
|
-
});
|
|
70
|
-
const data = JSON.parse(result.content[0].text);
|
|
71
|
-
expect(data.logs).toBeDefined();
|
|
72
|
-
// All events should have the specified 'to' address
|
|
73
|
-
if (data.logs.length > 0) {
|
|
74
|
-
data.logs.forEach((event) => {
|
|
75
|
-
expect(event.decoded.args.to.toLowerCase()).toBe(RECEIVER_ADDRESS.toLowerCase());
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}, 30000);
|
|
79
|
-
it('should decode event arguments correctly', async () => {
|
|
80
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
81
|
-
const result = await logsTools.get_logs.handler({
|
|
82
|
-
chain: 'mainnet',
|
|
83
|
-
address: USDC_CONTRACT,
|
|
84
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
85
|
-
fromBlock: '21000000',
|
|
86
|
-
toBlock: '21000010'
|
|
87
|
-
});
|
|
88
|
-
const data = JSON.parse(result.content[0].text);
|
|
89
|
-
if (data.logs.length > 0) {
|
|
90
|
-
const event = data.logs[0];
|
|
91
|
-
expect(event.decoded.args).toBeDefined();
|
|
92
|
-
expect(event.decoded.args.from).toBeDefined();
|
|
93
|
-
expect(event.decoded.args.to).toBeDefined();
|
|
94
|
-
expect(event.decoded.args.value).toBeDefined();
|
|
95
|
-
expect(event.blockNumber).toBeDefined();
|
|
96
|
-
expect(event.transactionHash).toBeDefined();
|
|
97
|
-
expect(event.logIndex).toBeDefined();
|
|
98
|
-
}
|
|
99
|
-
}, 30000);
|
|
100
|
-
it('should fetch Approval events', async () => {
|
|
101
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
102
|
-
const result = await logsTools.get_logs.handler({
|
|
103
|
-
chain: 'mainnet',
|
|
104
|
-
address: USDC_CONTRACT,
|
|
105
|
-
eventAbi: 'event Approval(address indexed owner, address indexed spender, uint256 value)',
|
|
106
|
-
fromBlock: '21000000',
|
|
107
|
-
toBlock: '21000100'
|
|
108
|
-
});
|
|
109
|
-
const data = JSON.parse(result.content[0].text);
|
|
110
|
-
expect(data.logs).toBeDefined();
|
|
111
|
-
if (data.logs.length > 0) {
|
|
112
|
-
const event = data.logs[0];
|
|
113
|
-
expect(event.decoded.args.owner).toBeDefined();
|
|
114
|
-
expect(event.decoded.args.spender).toBeDefined();
|
|
115
|
-
expect(event.decoded.args.value).toBeDefined();
|
|
116
|
-
}
|
|
117
|
-
}, 30000);
|
|
118
|
-
it('should work without address filter (query all contracts)', async () => {
|
|
119
|
-
const result = await logsTools.get_logs.handler({
|
|
120
|
-
chain: 'mainnet',
|
|
121
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
122
|
-
fromBlock: '21000000',
|
|
123
|
-
toBlock: '21000001'
|
|
124
|
-
});
|
|
125
|
-
const data = JSON.parse(result.content[0].text);
|
|
126
|
-
expect(data.logs).toBeDefined();
|
|
127
|
-
expect(Array.isArray(data.logs)).toBe(true);
|
|
128
|
-
}, 30000);
|
|
129
|
-
it('should handle events with no results', async () => {
|
|
130
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
131
|
-
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
132
|
-
const result = await logsTools.get_logs.handler({
|
|
133
|
-
chain: 'mainnet',
|
|
134
|
-
address: USDC_CONTRACT,
|
|
135
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
136
|
-
eventArgs: {
|
|
137
|
-
from: ZERO_ADDRESS,
|
|
138
|
-
to: ZERO_ADDRESS
|
|
139
|
-
},
|
|
140
|
-
fromBlock: '21000000',
|
|
141
|
-
toBlock: '21000010'
|
|
142
|
-
});
|
|
143
|
-
const data = JSON.parse(result.content[0].text);
|
|
144
|
-
expect(data.logs).toBeDefined();
|
|
145
|
-
expect(Array.isArray(data.logs)).toBe(true);
|
|
146
|
-
// Might have 0 events, that's valid
|
|
147
|
-
}, 30000);
|
|
148
|
-
it('should work with different chains', async () => {
|
|
149
|
-
const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
|
|
150
|
-
const result = await logsTools.get_logs.handler({
|
|
151
|
-
chain: 'base',
|
|
152
|
-
address: USDC_BASE,
|
|
153
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
154
|
-
fromBlock: '10000000',
|
|
155
|
-
toBlock: '10000010'
|
|
156
|
-
});
|
|
157
|
-
const data = JSON.parse(result.content[0].text);
|
|
158
|
-
expect(data.chain).toBe('base');
|
|
159
|
-
expect(data.logs).toBeDefined();
|
|
160
|
-
}, 30000);
|
|
161
|
-
it('should include event metadata', async () => {
|
|
162
|
-
const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
163
|
-
const result = await logsTools.get_logs.handler({
|
|
164
|
-
chain: 'mainnet',
|
|
165
|
-
address: USDC_CONTRACT,
|
|
166
|
-
eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
|
|
167
|
-
fromBlock: '21000000',
|
|
168
|
-
toBlock: '21000010'
|
|
169
|
-
});
|
|
170
|
-
const data = JSON.parse(result.content[0].text);
|
|
171
|
-
expect(data.count).toBeDefined();
|
|
172
|
-
expect(typeof data.count).toBe('number');
|
|
173
|
-
expect(data.eventSignature).toContain('Transfer');
|
|
174
|
-
}, 30000);
|
|
175
|
-
it('should handle custom events with different parameter types', async () => {
|
|
176
|
-
// Using a well-known contract with custom events - Uniswap V2 Pair
|
|
177
|
-
const UNISWAP_PAIR = '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc'; // USDC-WETH
|
|
178
|
-
const result = await logsTools.get_logs.handler({
|
|
179
|
-
chain: 'mainnet',
|
|
180
|
-
address: UNISWAP_PAIR,
|
|
181
|
-
eventAbi: 'event Sync(uint112 reserve0, uint112 reserve1)',
|
|
182
|
-
fromBlock: '21000000',
|
|
183
|
-
toBlock: '21000010'
|
|
184
|
-
});
|
|
185
|
-
const data = JSON.parse(result.content[0].text);
|
|
186
|
-
expect(data.logs).toBeDefined();
|
|
187
|
-
if (data.logs.length > 0) {
|
|
188
|
-
const event = data.logs[0];
|
|
189
|
-
expect(event.decoded.args).toBeDefined();
|
|
190
|
-
expect(event.decoded.args.reserve0).toBeDefined();
|
|
191
|
-
expect(event.decoded.args.reserve1).toBeDefined();
|
|
192
|
-
}
|
|
193
|
-
}, 30000);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
//# sourceMappingURL=logs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.test.js","sourceRoot":"","sources":["../../../test/tools/logs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,SAAS,MAAM,yBAAyB,CAAA;AAE/C,6BAA6B;AAC7B,MAAM,EAAE,CAAA;AAER,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,wCAAwC;QACxC,uBAAuB,CAAC;YACtB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YAC1C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACxC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC9C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;SAC/C,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAElE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAChD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAClE,MAAM,eAAe,GAAG,4CAA4C,CAAA;YAEpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE;oBACT,IAAI,EAAE,eAAe;iBACtB;gBACD,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAE/B,sDAAsD;YACtD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;oBAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAA;gBACnF,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAClE,MAAM,gBAAgB,GAAG,4CAA4C,CAAA;YAErE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE;oBACT,EAAE,EAAE,gBAAgB;iBACrB;gBACD,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAE/B,oDAAoD;YACpD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;oBAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAA;gBAClF,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAElE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAE/C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;gBACxC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC9C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;gBACvC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC3C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;YACtC,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAElE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,+EAA+E;gBACzF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAE/B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC9C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;gBAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;YAChD,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAClE,MAAM,YAAY,GAAG,4CAA4C,CAAA;YAEjE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE;oBACT,IAAI,EAAE,YAAY;oBAClB,EAAE,EAAE,YAAY;iBACjB;gBACD,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC3C,oCAAoC;QACtC,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,SAAS,GAAG,4CAA4C,CAAA;YAE9D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;QACjC,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,aAAa,GAAG,4CAA4C,CAAA;YAElE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,yEAAyE;gBACnF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;YAChC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACnD,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,mEAAmE;YACnE,MAAM,YAAY,GAAG,4CAA4C,CAAA,CAAC,YAAY;YAE9E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,gDAAgD;gBAC1D,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAE/B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;gBACxC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;gBACjD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;YACnD,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;IACX,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signatures.test.d.ts","sourceRoot":"","sources":["../../../test/tools/signatures.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import signatureTools from "../../src/tools/signatures.js";
|
|
3
|
-
describe("Signature Tools", () => {
|
|
4
|
-
describe("get_function_signature", () => {
|
|
5
|
-
it("should generate correct signature for transfer function", async () => {
|
|
6
|
-
const result = await signatureTools.get_function_signature.handler({
|
|
7
|
-
items: [{ functionAbi: "function transfer(address to, uint256 amount)" }],
|
|
8
|
-
});
|
|
9
|
-
const data = JSON.parse(result.content[0].text);
|
|
10
|
-
expect(data).toHaveLength(1);
|
|
11
|
-
expect(data[0].signature).toBe("0xa9059cbb");
|
|
12
|
-
expect(data[0].functionName).toBe("transfer");
|
|
13
|
-
expect(data[0].inputs).toHaveLength(2);
|
|
14
|
-
});
|
|
15
|
-
it("should handle multiple function signatures in batch", async () => {
|
|
16
|
-
const result = await signatureTools.get_function_signature.handler({
|
|
17
|
-
items: [
|
|
18
|
-
{ functionAbi: "function balanceOf(address owner) view returns (uint256)" },
|
|
19
|
-
{ functionAbi: "function totalSupply() view returns (uint256)" },
|
|
20
|
-
{ functionAbi: "function name() view returns (string)" },
|
|
21
|
-
],
|
|
22
|
-
});
|
|
23
|
-
const data = JSON.parse(result.content[0].text);
|
|
24
|
-
expect(data).toHaveLength(3);
|
|
25
|
-
expect(data[0].signature).toBe("0x70a08231"); // balanceOf
|
|
26
|
-
expect(data[0].functionName).toBe("balanceOf");
|
|
27
|
-
expect(data[1].functionName).toBe("totalSupply");
|
|
28
|
-
expect(data[2].functionName).toBe("name");
|
|
29
|
-
});
|
|
30
|
-
it("should include state mutability information", async () => {
|
|
31
|
-
const result = await signatureTools.get_function_signature.handler({
|
|
32
|
-
items: [{ functionAbi: "function getValue() view returns (uint256)" }],
|
|
33
|
-
});
|
|
34
|
-
const data = JSON.parse(result.content[0].text);
|
|
35
|
-
expect(data[0].stateMutability).toBe("view");
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe("get_event_signature", () => {
|
|
39
|
-
it("should generate correct topic0 for Transfer event", async () => {
|
|
40
|
-
const result = await signatureTools.get_event_signature.handler({
|
|
41
|
-
items: [
|
|
42
|
-
{ eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)" },
|
|
43
|
-
],
|
|
44
|
-
});
|
|
45
|
-
const data = JSON.parse(result.content[0].text);
|
|
46
|
-
expect(data).toHaveLength(1);
|
|
47
|
-
expect(data[0].topic0).toBe("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef");
|
|
48
|
-
expect(data[0].eventName).toBe("Transfer");
|
|
49
|
-
});
|
|
50
|
-
it("should handle multiple events in batch", async () => {
|
|
51
|
-
const result = await signatureTools.get_event_signature.handler({
|
|
52
|
-
items: [
|
|
53
|
-
{ eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)" },
|
|
54
|
-
{
|
|
55
|
-
eventAbi: "event Approval(address indexed owner, address indexed spender, uint256 value)",
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
});
|
|
59
|
-
const data = JSON.parse(result.content[0].text);
|
|
60
|
-
expect(data).toHaveLength(2);
|
|
61
|
-
expect(data[0].eventName).toBe("Transfer");
|
|
62
|
-
expect(data[1].eventName).toBe("Approval");
|
|
63
|
-
});
|
|
64
|
-
it("should include indexed parameter information", async () => {
|
|
65
|
-
const result = await signatureTools.get_event_signature.handler({
|
|
66
|
-
items: [
|
|
67
|
-
{ eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)" },
|
|
68
|
-
],
|
|
69
|
-
});
|
|
70
|
-
const data = JSON.parse(result.content[0].text);
|
|
71
|
-
expect(data[0].inputs).toHaveLength(3);
|
|
72
|
-
expect(data[0].inputs[0].indexed).toBe(true);
|
|
73
|
-
expect(data[0].inputs[1].indexed).toBe(true);
|
|
74
|
-
// Some parsers omit the `indexed` property for non-indexed params -> treat undefined as false
|
|
75
|
-
expect(data[0].inputs[2].indexed ?? false).toBe(false);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe("get_error_signature", () => {
|
|
79
|
-
it("should generate correct signature for custom error", async () => {
|
|
80
|
-
const result = await signatureTools.get_error_signature.handler({
|
|
81
|
-
items: [{ errorAbi: "error InsufficientBalance(uint256 available, uint256 required)" }],
|
|
82
|
-
});
|
|
83
|
-
const data = JSON.parse(result.content[0].text);
|
|
84
|
-
expect(data).toHaveLength(1);
|
|
85
|
-
expect(data[0].signature).toMatch(/^0x[a-f0-9]{8}$/);
|
|
86
|
-
expect(data[0].errorName).toBe("InsufficientBalance");
|
|
87
|
-
expect(data[0].inputs).toHaveLength(2);
|
|
88
|
-
});
|
|
89
|
-
it("should handle multiple errors in batch", async () => {
|
|
90
|
-
const result = await signatureTools.get_error_signature.handler({
|
|
91
|
-
items: [
|
|
92
|
-
{ errorAbi: "error InsufficientBalance(uint256 available, uint256 required)" },
|
|
93
|
-
{ errorAbi: "error Unauthorized()" },
|
|
94
|
-
{ errorAbi: "error InvalidAddress(address addr)" },
|
|
95
|
-
],
|
|
96
|
-
});
|
|
97
|
-
const data = JSON.parse(result.content[0].text);
|
|
98
|
-
expect(data).toHaveLength(3);
|
|
99
|
-
expect(data[0].errorName).toBe("InsufficientBalance");
|
|
100
|
-
expect(data[1].errorName).toBe("Unauthorized");
|
|
101
|
-
expect(data[2].errorName).toBe("InvalidAddress");
|
|
102
|
-
});
|
|
103
|
-
it("should handle errors with no parameters", async () => {
|
|
104
|
-
const result = await signatureTools.get_error_signature.handler({
|
|
105
|
-
items: [{ errorAbi: "error Unauthorized()" }],
|
|
106
|
-
});
|
|
107
|
-
const data = JSON.parse(result.content[0].text);
|
|
108
|
-
expect(data[0].inputs).toHaveLength(0);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
//# sourceMappingURL=signatures.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signatures.test.js","sourceRoot":"","sources":["../../../test/tools/signatures.test.ts"],"names":[],"mappings":"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"}
|