web3-tools-mcp 1.5.0 → 2.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.
- package/CHANGELOG.md +95 -0
- package/README.md +346 -164
- package/dist/anvil.d.ts +1 -1
- package/dist/anvil.d.ts.map +1 -1
- package/dist/anvil.js +11 -9
- package/dist/anvil.js.map +1 -1
- package/dist/chain-meta.d.ts.map +1 -1
- package/dist/chain-meta.js +7 -3
- package/dist/chain-meta.js.map +1 -1
- package/dist/chains.d.ts +960 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +108 -0
- package/dist/chains.js.map +1 -0
- package/dist/client.d.ts +10 -1717
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +33 -216
- package/dist/client.js.map +1 -1
- package/dist/http-server.d.ts +18 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +89 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.js +77 -32
- package/dist/index.js.map +1 -1
- package/dist/kv-storage.d.ts +23 -0
- package/dist/kv-storage.d.ts.map +1 -0
- package/dist/kv-storage.js +69 -0
- package/dist/kv-storage.js.map +1 -0
- package/dist/oauth.d.ts +31 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +227 -0
- package/dist/oauth.js.map +1 -0
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +14 -4
- package/dist/preview.js.map +1 -1
- package/dist/tools/advanced.d.ts +4 -4
- package/dist/tools/advanced.d.ts.map +1 -1
- package/dist/tools/advanced.js +228 -247
- package/dist/tools/advanced.js.map +1 -1
- package/dist/tools/balance.d.ts +1 -1
- package/dist/tools/balance.d.ts.map +1 -1
- package/dist/tools/balance.js +97 -103
- package/dist/tools/balance.js.map +1 -1
- package/dist/tools/contract-info.d.ts +3 -3
- package/dist/tools/contract-info.d.ts.map +1 -1
- package/dist/tools/contract-info.js +150 -161
- package/dist/tools/contract-info.js.map +1 -1
- package/dist/tools/contract.d.ts +4 -4
- package/dist/tools/contract.d.ts.map +1 -1
- package/dist/tools/contract.js +91 -110
- package/dist/tools/contract.js.map +1 -1
- package/dist/tools/ens.d.ts +6 -6
- package/dist/tools/ens.d.ts.map +1 -1
- package/dist/tools/ens.js +239 -297
- package/dist/tools/ens.js.map +1 -1
- package/dist/tools/gas.d.ts +4 -4
- package/dist/tools/gas.d.ts.map +1 -1
- package/dist/tools/gas.js +90 -138
- package/dist/tools/gas.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/logs.d.ts +1 -1
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +36 -37
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/signatures.d.ts.map +1 -1
- package/dist/tools/signatures.js +67 -89
- package/dist/tools/signatures.js.map +1 -1
- package/dist/tools/transactions.d.ts +48 -4
- package/dist/tools/transactions.d.ts.map +1 -1
- package/dist/tools/transactions.js +228 -44
- package/dist/tools/transactions.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +3 -8
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +36 -98
- package/dist/utils.js.map +1 -1
- package/dist/wallet-client.d.ts +11 -1
- package/dist/wallet-client.d.ts.map +1 -1
- package/dist/wallet-client.js +27 -9
- package/dist/wallet-client.js.map +1 -1
- package/dist/walletconnect.d.ts +52 -0
- package/dist/walletconnect.d.ts.map +1 -0
- package/dist/walletconnect.js +221 -0
- package/dist/walletconnect.js.map +1 -0
- package/package.json +21 -9
- package/src/anvil.ts +15 -18
- package/src/chain-meta.ts +8 -4
- package/src/chains.ts +145 -0
- package/src/client.ts +39 -252
- package/src/http-server.ts +117 -0
- package/src/index.ts +98 -49
- package/src/kv-storage.ts +83 -0
- package/src/oauth.ts +270 -0
- package/src/preview.ts +15 -14
- package/src/tools/advanced.ts +195 -213
- package/src/tools/balance.ts +103 -108
- package/src/tools/contract-info.ts +163 -184
- package/src/tools/contract.ts +123 -144
- package/src/tools/ens.ts +290 -345
- package/src/tools/gas.ts +122 -170
- package/src/tools/index.ts +2 -2
- package/src/tools/logs.ts +45 -43
- package/src/tools/signatures.ts +68 -86
- package/src/tools/transactions.ts +283 -50
- package/src/types.ts +2 -15
- package/src/utils.ts +56 -127
- package/src/wallet-client.ts +31 -9
- package/src/walletconnect.ts +269 -0
package/src/tools/signatures.ts
CHANGED
|
@@ -2,12 +2,12 @@ import {
|
|
|
2
2
|
type AbiEvent,
|
|
3
3
|
type AbiFunction,
|
|
4
4
|
type AbiParameter,
|
|
5
|
+
encodeFunctionData,
|
|
5
6
|
keccak256,
|
|
6
7
|
parseAbiItem,
|
|
7
8
|
toBytes,
|
|
8
9
|
toEventSignature,
|
|
9
|
-
toFunctionSignature
|
|
10
|
-
encodeFunctionData
|
|
10
|
+
toFunctionSignature
|
|
11
11
|
} from 'viem'
|
|
12
12
|
import { z } from 'zod'
|
|
13
13
|
import type { AbiError } from '../types.js'
|
|
@@ -24,9 +24,7 @@ const EventAbiSchema = z.object({
|
|
|
24
24
|
})
|
|
25
25
|
|
|
26
26
|
const ErrorAbiSchema = z.object({
|
|
27
|
-
errorAbi: z
|
|
28
|
-
.string()
|
|
29
|
-
.describe('Error ABI definition (e.g., "error InsufficientBalance(uint256 available, uint256 required)")')
|
|
27
|
+
errorAbi: z.string().describe('Error ABI definition (e.g., "error InsufficientBalance(uint256 available, uint256 required)")')
|
|
30
28
|
})
|
|
31
29
|
|
|
32
30
|
export default {
|
|
@@ -34,33 +32,27 @@ export default {
|
|
|
34
32
|
'Calculate Function Signatures',
|
|
35
33
|
'Generate 4-byte function selectors from ABI definitions. BATCH OPTIMIZED - use for transaction decoding.',
|
|
36
34
|
z.object({
|
|
37
|
-
items: z
|
|
38
|
-
.array(FunctionAbiSchema)
|
|
39
|
-
.describe('Array of function ABI definitions. Batch multiple functions for efficiency.')
|
|
35
|
+
items: z.array(FunctionAbiSchema).describe('Array of function ABI definitions. Batch multiple functions for efficiency.')
|
|
40
36
|
}),
|
|
41
37
|
async (args) => {
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const selector = hash.slice(0, 10)
|
|
38
|
+
const results = args.items.map((item) => {
|
|
39
|
+
const abiItem = parseAbiItem(item.functionAbi) as AbiFunction
|
|
40
|
+
const signature = toFunctionSignature(abiItem)
|
|
41
|
+
const hash = keccak256(toBytes(signature))
|
|
42
|
+
const selector = hash.slice(0, 10)
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
return {
|
|
45
|
+
signature: selector,
|
|
46
|
+
fullSignature: signature,
|
|
47
|
+
functionName: abiItem.name,
|
|
48
|
+
inputs: abiItem.inputs,
|
|
49
|
+
outputs: abiItem.outputs || [],
|
|
50
|
+
stateMutability: abiItem.stateMutability,
|
|
51
|
+
originalAbi: item.functionAbi
|
|
52
|
+
}
|
|
53
|
+
})
|
|
59
54
|
|
|
60
|
-
|
|
61
|
-
} catch (error) {
|
|
62
|
-
throw new Error(`Failed to parse function ABI: ${error}`)
|
|
63
|
-
}
|
|
55
|
+
return formatResponse(results)
|
|
64
56
|
}
|
|
65
57
|
),
|
|
66
58
|
|
|
@@ -71,27 +63,23 @@ export default {
|
|
|
71
63
|
items: z.array(EventAbiSchema).describe('Array of event ABI definitions. Batch multiple events for optimal performance.')
|
|
72
64
|
}),
|
|
73
65
|
async (args) => {
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const hash = keccak256(toBytes(signature))
|
|
66
|
+
const results = args.items.map((item) => {
|
|
67
|
+
const abiItem = parseAbiItem(item.eventAbi) as AbiEvent
|
|
68
|
+
const signature = toEventSignature(abiItem)
|
|
69
|
+
const hash = keccak256(toBytes(signature))
|
|
79
70
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
71
|
+
return {
|
|
72
|
+
signature: hash,
|
|
73
|
+
topic0: hash,
|
|
74
|
+
fullSignature: signature,
|
|
75
|
+
eventName: abiItem.name,
|
|
76
|
+
inputs: abiItem.inputs,
|
|
77
|
+
anonymous: abiItem.anonymous || false,
|
|
78
|
+
originalAbi: item.eventAbi
|
|
79
|
+
}
|
|
80
|
+
})
|
|
90
81
|
|
|
91
|
-
|
|
92
|
-
} catch (error) {
|
|
93
|
-
throw new Error(`Failed to parse event ABI: ${error}`)
|
|
94
|
-
}
|
|
82
|
+
return formatResponse(results)
|
|
95
83
|
}
|
|
96
84
|
),
|
|
97
85
|
|
|
@@ -102,58 +90,52 @@ export default {
|
|
|
102
90
|
items: z.array(ErrorAbiSchema).describe('Array of error ABI definitions. Batch related errors for efficiency.')
|
|
103
91
|
}),
|
|
104
92
|
async (args) => {
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const selector = hash.slice(0, 10)
|
|
93
|
+
const results = args.items.map((item) => {
|
|
94
|
+
const abiItem = parseAbiItem(item.errorAbi) as AbiError
|
|
95
|
+
const signature = `${abiItem.name}(${abiItem.inputs.map((input: AbiParameter) => input.type).join(',')})`
|
|
96
|
+
const hash = keccak256(toBytes(signature))
|
|
97
|
+
const selector = hash.slice(0, 10)
|
|
111
98
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
99
|
+
return {
|
|
100
|
+
signature: selector,
|
|
101
|
+
fullSignature: signature,
|
|
102
|
+
errorName: abiItem.name,
|
|
103
|
+
inputs: abiItem.inputs,
|
|
104
|
+
originalAbi: item.errorAbi
|
|
105
|
+
}
|
|
106
|
+
})
|
|
120
107
|
|
|
121
|
-
|
|
122
|
-
} catch (error) {
|
|
123
|
-
throw new Error(`Failed to parse error ABI: ${error}`)
|
|
124
|
-
}
|
|
108
|
+
return formatResponse(results)
|
|
125
109
|
}
|
|
126
110
|
),
|
|
127
111
|
|
|
128
112
|
encode_function_data: createTool(
|
|
129
113
|
'Encode Function Call Data',
|
|
130
|
-
'Encode a function call with parameters into transaction data. Use this before calling
|
|
114
|
+
'Encode a function call with parameters into transaction data. Use this before calling write_contract.',
|
|
131
115
|
z.object({
|
|
132
116
|
functionAbi: z.string().describe('Function ABI definition (e.g., "function transfer(address to, uint256 amount)")'),
|
|
133
|
-
args: z
|
|
117
|
+
args: z
|
|
118
|
+
.array(z.union([z.string(), z.number(), z.boolean()]))
|
|
119
|
+
.describe('Function arguments in order matching the ABI signature. Automatically type-converted.')
|
|
134
120
|
}),
|
|
135
121
|
async (args) => {
|
|
136
|
-
|
|
137
|
-
const abiItem = parseAbiItem(args.functionAbi) as AbiFunction
|
|
122
|
+
const abiItem = parseAbiItem(args.functionAbi) as AbiFunction
|
|
138
123
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
124
|
+
// Encode the function data
|
|
125
|
+
const data = encodeFunctionData({
|
|
126
|
+
abi: [abiItem],
|
|
127
|
+
functionName: abiItem.name,
|
|
128
|
+
args: args.args as readonly unknown[]
|
|
129
|
+
})
|
|
145
130
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
} catch (error) {
|
|
155
|
-
throw new Error(`Failed to encode function data: ${error}`)
|
|
156
|
-
}
|
|
131
|
+
return formatResponse({
|
|
132
|
+
data,
|
|
133
|
+
functionName: abiItem.name,
|
|
134
|
+
functionSignature: toFunctionSignature(abiItem),
|
|
135
|
+
selector: data.slice(0, 10),
|
|
136
|
+
encodedArgs: data.slice(10),
|
|
137
|
+
message: 'Function data encoded successfully. Use this data with write_contract tool.'
|
|
138
|
+
})
|
|
157
139
|
}
|
|
158
140
|
)
|
|
159
141
|
}
|