web3-tools-mcp 1.2.1 → 1.2.3
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/dist/client.d.ts.map +1 -0
- package/dist/client.js.map +1 -0
- package/dist/{src/index.d.ts.map → index.d.ts.map} +1 -1
- package/dist/index.js.map +1 -0
- package/dist/tools/advanced.d.ts.map +1 -0
- package/dist/tools/advanced.js.map +1 -0
- package/dist/tools/balance.d.ts.map +1 -0
- package/dist/tools/balance.js.map +1 -0
- package/dist/tools/contract-info.d.ts.map +1 -0
- package/dist/tools/contract-info.js.map +1 -0
- package/dist/tools/contract.d.ts.map +1 -0
- package/dist/tools/contract.js.map +1 -0
- package/dist/tools/ens.d.ts.map +1 -0
- package/dist/tools/ens.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/signatures.d.ts.map +1 -0
- package/dist/tools/signatures.js.map +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js.map +1 -0
- package/package.json +4 -4
- package/dist/package.json +0 -63
- package/dist/src/client.d.ts.map +0 -1
- package/dist/src/client.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/tools/advanced.d.ts.map +0 -1
- package/dist/src/tools/advanced.js.map +0 -1
- package/dist/src/tools/balance.d.ts.map +0 -1
- package/dist/src/tools/balance.js.map +0 -1
- package/dist/src/tools/contract-info.d.ts.map +0 -1
- package/dist/src/tools/contract-info.js.map +0 -1
- package/dist/src/tools/contract.d.ts.map +0 -1
- package/dist/src/tools/contract.js.map +0 -1
- package/dist/src/tools/ens.d.ts.map +0 -1
- package/dist/src/tools/ens.js.map +0 -1
- package/dist/src/tools/index.d.ts.map +0 -1
- package/dist/src/tools/index.js.map +0 -1
- package/dist/src/tools/logs.d.ts.map +0 -1
- package/dist/src/tools/logs.js.map +0 -1
- package/dist/src/tools/signatures.d.ts.map +0 -1
- package/dist/src/tools/signatures.js.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js.map +0 -1
- 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
- /package/dist/{src/client.d.ts → client.d.ts} +0 -0
- /package/dist/{src/client.js → client.js} +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/index.js → index.js} +0 -0
- /package/dist/{src/tools → tools}/advanced.d.ts +0 -0
- /package/dist/{src/tools → tools}/advanced.js +0 -0
- /package/dist/{src/tools → tools}/balance.d.ts +0 -0
- /package/dist/{src/tools → tools}/balance.js +0 -0
- /package/dist/{src/tools → tools}/contract-info.d.ts +0 -0
- /package/dist/{src/tools → tools}/contract-info.js +0 -0
- /package/dist/{src/tools → tools}/contract.d.ts +0 -0
- /package/dist/{src/tools → tools}/contract.js +0 -0
- /package/dist/{src/tools → tools}/ens.d.ts +0 -0
- /package/dist/{src/tools → tools}/ens.js +0 -0
- /package/dist/{src/tools → tools}/index.d.ts +0 -0
- /package/dist/{src/tools → tools}/index.js +0 -0
- /package/dist/{src/tools → tools}/logs.d.ts +0 -0
- /package/dist/{src/tools → tools}/logs.js +0 -0
- /package/dist/{src/tools → tools}/signatures.d.ts +0 -0
- /package/dist/{src/tools → tools}/signatures.js +0 -0
- /package/dist/{src/types.d.ts → types.d.ts} +0 -0
- /package/dist/{src/types.js → types.js} +0 -0
- /package/dist/{src/utils.d.ts → utils.d.ts} +0 -0
- /package/dist/{src/utils.js → utils.js} +0 -0
|
@@ -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":"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"}
|
|
@@ -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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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|