web3-tools-mcp 1.4.0 โ 1.6.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 +106 -7
- package/dist/chain-meta.d.ts +27 -0
- package/dist/chain-meta.d.ts.map +1 -0
- package/dist/chain-meta.js +92 -0
- package/dist/chain-meta.js.map +1 -0
- package/dist/clear-signing.d.ts +62 -0
- package/dist/clear-signing.d.ts.map +1 -0
- package/dist/clear-signing.js +139 -0
- package/dist/clear-signing.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -2
- package/dist/client.js.map +1 -1
- package/dist/erc7730-index.json.gz +0 -0
- package/dist/http-server.d.ts +12 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +74 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.js +37 -13
- 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/preview.d.ts +3 -0
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +46 -87
- package/dist/preview.js.map +1 -1
- package/dist/tools/transactions.d.ts +16 -2
- package/dist/tools/transactions.d.ts.map +1 -1
- package/dist/tools/transactions.js +128 -18
- package/dist/tools/transactions.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +2 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/dist/walletconnect.d.ts +31 -0
- package/dist/walletconnect.d.ts.map +1 -0
- package/dist/walletconnect.js +128 -0
- package/dist/walletconnect.js.map +1 -0
- package/package.json +9 -4
- package/src/chain-meta.ts +102 -0
- package/src/clear-signing.ts +206 -0
- package/src/client.ts +4 -2
- package/src/erc7730-index.json.gz +0 -0
- package/src/http-server.ts +94 -0
- package/src/index.ts +38 -13
- package/src/kv-storage.ts +83 -0
- package/src/preview.ts +49 -94
- package/src/tools/transactions.ts +146 -20
- package/src/types.ts +1 -0
- package/src/utils.ts +4 -17
- package/src/walletconnect.ts +157 -0
package/README.md
CHANGED
|
@@ -5,7 +5,8 @@ A Model Context Protocol (MCP) server for blockchain interactions using [viem](h
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- Multi-chain support (Ethereum, Arbitrum, Avalanche, Base, BNB Chain, Gnosis, Sonic, Optimism, Polygon, zkSync Era, Linea, Unichain)
|
|
8
|
-
- **๐ Transaction
|
|
8
|
+
- **๐ Transaction signing** in a browser wallet (MetaMask, Rabby, Coinbase) or on your phone over WalletConnect
|
|
9
|
+
- Clear signing: transactions are decoded, named and simulated before you approve them
|
|
9
10
|
- Smart contract interactions (read & write functions, ABI retrieval, source code)
|
|
10
11
|
- Contract simulation & gas estimation (simulate transactions, estimate costs)
|
|
11
12
|
- Real-time gas price tracking (legacy & EIP-1559)
|
|
@@ -45,6 +46,11 @@ All API keys are optional. The server uses public RPCs by default. Add keys to u
|
|
|
45
46
|
- `--alchemy-api-key` or `ALCHEMY_API_KEY` - Enhanced RPC reliability
|
|
46
47
|
- `--infura-api-key` or `INFURA_API_KEY` - Additional RPC provider
|
|
47
48
|
- `--custom-rpc` - Custom RPC URLs as JSON
|
|
49
|
+
- `--walletconnect-project-id` or `WALLETCONNECT_PROJECT_ID` - Sign from a phone
|
|
50
|
+
|
|
51
|
+
**Wallet relay (all optional):**
|
|
52
|
+
- `WALLET_SERVER_URL` + `WALLET_TOKEN` - Use a hosted relay instead of a local one
|
|
53
|
+
- `PORT`, `HOST`, `WALLET_PUBLIC_URL` - Read by the relay itself when you host it
|
|
48
54
|
|
|
49
55
|
**Get free API keys:**
|
|
50
56
|
- Etherscan: [etherscan.io/apis](https://etherscan.io/apis)
|
|
@@ -79,7 +85,7 @@ npx web3-tools-mcp
|
|
|
79
85
|
| zkSync Era | 324 | โ
|
|
|
80
86
|
| Linea | 59144 | โ
|
|
|
81
87
|
| Unichain | 130 | โ
|
|
|
82
|
-
| Localhost |
|
|
88
|
+
| Localhost | 1337 | โ |
|
|
83
89
|
|
|
84
90
|
## ๐ Browser Wallet Integration
|
|
85
91
|
|
|
@@ -88,7 +94,7 @@ The server includes a built-in wallet interface for secure transaction signing w
|
|
|
88
94
|
### How It Works
|
|
89
95
|
|
|
90
96
|
1. When you use a transaction tool (e.g., `send_native_token`), the server automatically:
|
|
91
|
-
- Starts a local wallet relay on `http://
|
|
97
|
+
- Starts a local wallet relay on `http://127.0.0.1:3456` (the next free port up to 3460)
|
|
92
98
|
- Opens your browser to connect your wallet (MetaMask, Rabby, Coinbase Wallet, etc.)
|
|
93
99
|
2. You connect your wallet once in the browser
|
|
94
100
|
3. The transaction is decoded and simulated, then the request appears in the browser for approval
|
|
@@ -106,15 +112,105 @@ a token kept in `~/.config/web3-tools-mcp/relay-token` (mode 0600); delete it to
|
|
|
106
112
|
|
|
107
113
|
Each request shows what the transaction actually does, not just calldata:
|
|
108
114
|
|
|
109
|
-
- **
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
- **What it means** โ for contracts in the [Ledger ERC-7730 registry](https://github.com/LedgerHQ/clear-signing-erc7730-registry)
|
|
116
|
+
(651 contracts, 3253 selectors), the protocol's own intent and field labels: *Supply ยท
|
|
117
|
+
Aave ยท Amount to supply: 250 USDC*, rather than `supply(address,uint256,address,uint16)`.
|
|
118
|
+
The index ships gzipped (~60KB) and a weekly workflow opens a PR when it changes.
|
|
119
|
+
- **Decoded call** โ otherwise the function name and named arguments, from the verified ABI
|
|
120
|
+
(Sourcify / Etherscan) or, for unverified contracts, from selectors recovered from bytecode
|
|
121
|
+
via [WhatsABI](https://github.com/shazow/whatsabi). Proxies resolve to their implementation.
|
|
112
122
|
- **Token amounts** โ formatted with on-chain decimals and symbol; unlimited approvals are
|
|
113
123
|
flagged explicitly.
|
|
114
124
|
- **Simulation** โ `eth_simulateV1` (falling back to `eth_call` + `estimateGas`) reports the
|
|
115
125
|
gas estimate and every ERC20 transfer the transaction would cause, marked in/out for your
|
|
116
126
|
account. A reverting transaction is shown as such before you can approve it.
|
|
117
127
|
|
|
128
|
+
### Signing From a Phone
|
|
129
|
+
|
|
130
|
+
A phone cannot run the relay, so it does not have to: with a
|
|
131
|
+
[WalletConnect](https://dashboard.reown.com) project id the MCP server talks to your phone
|
|
132
|
+
wallet directly, over WalletConnect's own (end-to-end encrypted) relay. No page to load,
|
|
133
|
+
nothing to host.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npx web3-tools-mcp --walletconnect-project-id YOUR_PROJECT_ID
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Then ask the agent to pair โ `pair_phone_wallet` returns a QR code to scan with MetaMask,
|
|
140
|
+
Rabby, Trust or any WalletConnect wallet. The session is stored in
|
|
141
|
+
`~/.config/web3-tools-mcp/walletconnect.db`, so you pair once and it survives restarts.
|
|
142
|
+
|
|
143
|
+
While a phone is paired it signs everything; the browser page takes over again when it is
|
|
144
|
+
not. Either way the transaction is decoded and simulated first, and that summary comes back
|
|
145
|
+
in the tool response โ your phone wallet shows its own preview, so read ours before you
|
|
146
|
+
approve theirs.
|
|
147
|
+
|
|
148
|
+
### Hosting Your Own
|
|
149
|
+
|
|
150
|
+
With WalletConnect there is nothing left that has to run next to you โ no browser to open,
|
|
151
|
+
no page to reach โ so the server can live in the cloud and still have your phone sign.
|
|
152
|
+
|
|
153
|
+
Run your own instance rather than sharing one: it keeps your wallet, your API keys and your
|
|
154
|
+
WalletConnect quota to yourself, and there is no multi-tenant server in the middle that
|
|
155
|
+
could send someone else's transaction to your phone.
|
|
156
|
+
|
|
157
|
+
[](https://render.com/deploy?repo=https://github.com/hajnalben/web3-tools-mcp)
|
|
158
|
+
|
|
159
|
+
Render reads `render.yaml`, generates `MCP_TOKEN` for you and asks for
|
|
160
|
+
`WALLETCONNECT_PROJECT_ID` (free from [dashboard.reown.com](https://dashboard.reown.com)).
|
|
161
|
+
Or on [Fly](https://fly.io), where volumes come with any plan, so the pairing survives
|
|
162
|
+
redeploys without paying for a disk:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
fly launch --no-deploy --copy-config # pick a name and region
|
|
166
|
+
fly volumes create data --size 1
|
|
167
|
+
fly secrets set MCP_TOKEN=$(openssl rand -hex 24) WALLETCONNECT_PROJECT_ID=<id>
|
|
168
|
+
fly deploy
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
There is also a plain `Dockerfile`, so Railway, Cloud Run or your own box work the same way:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
docker build -t web3-tools-mcp .
|
|
175
|
+
docker run -p 8080:8080 \
|
|
176
|
+
-e MCP_TOKEN=<long random string> \
|
|
177
|
+
-e WALLETCONNECT_PROJECT_ID=<id> \
|
|
178
|
+
web3-tools-mcp
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Or without any host at all:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
MCP_HTTP_PORT=3457 MCP_TOKEN=<long random string> \
|
|
185
|
+
WALLETCONNECT_PROJECT_ID=<id> npx web3-tools-mcp
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
claude mcp add --transport http web3-tools https://your-host/mcp \
|
|
190
|
+
--header "Authorization: Bearer <MCP_TOKEN>"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
`MCP_TOKEN` is mandatory and the server refuses to start without it: anyone who can reach
|
|
194
|
+
`/mcp` while your phone is paired can push signing prompts at it. You would still approve
|
|
195
|
+
each one, but that is a phishing surface, not a feature.
|
|
196
|
+
|
|
197
|
+
Two things decide whether the pairing survives:
|
|
198
|
+
|
|
199
|
+
- **Keep the instance awake.** Sleeping drops the WalletConnect socket your phone pairing
|
|
200
|
+
depends on, so the first transaction after an idle period waits for the host to wake
|
|
201
|
+
(about a minute on a free tier) before it reaches your phone.
|
|
202
|
+
- **Give the session somewhere durable to live.** Most hosts have an ephemeral filesystem,
|
|
203
|
+
so a plain file is lost on every redeploy and you rescan the QR. Either attach a volume
|
|
204
|
+
and point `XDG_CONFIG_HOME` at it (what `render.yaml` does), or set
|
|
205
|
+
`UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN`
|
|
206
|
+
([Upstash](https://upstash.com) has a free plan) and the session moves to Redis.
|
|
207
|
+
|
|
208
|
+
Render's own free Key Value instance is not an option for this: it has no persistence, so
|
|
209
|
+
the pairing would disappear on its next maintenance.
|
|
210
|
+
|
|
211
|
+
A hosted server skips the wallet relay entirely โ there is no browser on the host to open โ
|
|
212
|
+
so WalletConnect is its only way to sign.
|
|
213
|
+
|
|
118
214
|
### Hosting the Wallet Page
|
|
119
215
|
|
|
120
216
|
The relay lives in its own workspace, [`wallet/`](wallet), and depends only on express, cors
|
|
@@ -163,6 +259,7 @@ Visit the wallet URL printed by the server (`wallet_status` also returns it) any
|
|
|
163
259
|
- `get_function_signature` - Generate 4-byte function selectors
|
|
164
260
|
- `get_event_signature` - Generate 32-byte event topic0 hashes
|
|
165
261
|
- `get_error_signature` - Generate 4-byte error selectors
|
|
262
|
+
- `encode_function_data` - Encode a call's calldata from its ABI and arguments
|
|
166
263
|
|
|
167
264
|
### Contract Info
|
|
168
265
|
- `get_contract_abi` - Get ABI with proxy detection and verification status
|
|
@@ -179,7 +276,8 @@ Visit the wallet URL printed by the server (`wallet_status` also returns it) any
|
|
|
179
276
|
- `send_native_token` - Send ETH/native tokens to an address
|
|
180
277
|
- `send_erc20_token` - Send ERC20 tokens to an address
|
|
181
278
|
- `sign_message` - Sign messages with your wallet
|
|
182
|
-
- `wallet_status` - Check
|
|
279
|
+
- `wallet_status` - Check which signer is connected (phone or browser)
|
|
280
|
+
- `pair_phone_wallet` - Pair a phone wallet over WalletConnect, returning a QR to scan
|
|
183
281
|
|
|
184
282
|
### Gas & Simulation
|
|
185
283
|
- `estimate_gas` - Estimate gas cost for any transaction
|
|
@@ -202,6 +300,7 @@ Visit the wallet URL printed by the server (`wallet_status` also returns it) any
|
|
|
202
300
|
- `get_storage_at` - Read storage slots with type decoding
|
|
203
301
|
- `get_block_info` - Get block data (timestamp, hash, etc.)
|
|
204
302
|
- `trace_transaction` - Trace execution (call tree, VM, state diff)
|
|
303
|
+
- `debug_call` - Trace a call without broadcasting it, falling back to a local anvil fork
|
|
205
304
|
|
|
206
305
|
## Advanced Configuration
|
|
207
306
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* On-chain metadata every layer of the preview needs: contract ABIs, token symbols and
|
|
3
|
+
* human labels for addresses. Kept apart from the preview and the clear-signing registry
|
|
4
|
+
* so both can use it without importing each other.
|
|
5
|
+
*/
|
|
6
|
+
import { type Abi } from 'viem';
|
|
7
|
+
import type { ChainName } from './types.js';
|
|
8
|
+
export declare function loadAbi(chain: ChainName, address: string): Promise<{
|
|
9
|
+
abi: Abi;
|
|
10
|
+
source: "verified" | "guessed";
|
|
11
|
+
proxy?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function tokenMeta(chain: ChainName, token: string): Promise<{
|
|
15
|
+
symbol?: string;
|
|
16
|
+
decimals?: number;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Human label for an address: token symbol first (more recognisable than the contract
|
|
20
|
+
* name โ "USDC" beats "FiatTokenProxy"), then the verified contract name. EOAs get none,
|
|
21
|
+
* and the bytecode check keeps us from asking explorers about plain wallets.
|
|
22
|
+
*/
|
|
23
|
+
export declare function addressLabel(chain: ChainName, address: string): Promise<string | undefined>;
|
|
24
|
+
/** uint256 max and anything near it means "infinite" in an approval. */
|
|
25
|
+
export declare const MAX_UINT256: bigint;
|
|
26
|
+
export declare const UNLIMITED_THRESHOLD: bigint;
|
|
27
|
+
//# sourceMappingURL=chain-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-meta.d.ts","sourceRoot":"","sources":["../src/chain-meta.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,GAAG,EAA8B,MAAM,MAAM,CAAA;AAG3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAW3C,wBAAsB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;SAJvB,GAAG;YAAU,UAAU,GAAG,SAAS;YAAU,MAAM;WAAS,MAAM;GAmCzG;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;aAnClB,MAAM;eAAa,MAAM;GAuDrE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiBjG;AAGD,wEAAwE;AACxE,eAAO,MAAM,WAAW,QAAoB,CAAA;AAC5C,eAAO,MAAM,mBAAmB,QAAmB,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* On-chain metadata every layer of the preview needs: contract ABIs, token symbols and
|
|
3
|
+
* human labels for addresses. Kept apart from the preview and the clear-signing registry
|
|
4
|
+
* so both can use it without importing each other.
|
|
5
|
+
*/
|
|
6
|
+
import { parseAbiItem } from 'viem';
|
|
7
|
+
import { whatsabi } from '@shazow/whatsabi';
|
|
8
|
+
import { getClientManager } from './client.js';
|
|
9
|
+
const ERC20_META_ABI = [
|
|
10
|
+
parseAbiItem('function decimals() view returns (uint8)'),
|
|
11
|
+
parseAbiItem('function symbol() view returns (string)')
|
|
12
|
+
];
|
|
13
|
+
const abiCache = new Map();
|
|
14
|
+
const labelCache = new Map();
|
|
15
|
+
const metaCache = new Map();
|
|
16
|
+
export async function loadAbi(chain, address) {
|
|
17
|
+
const key = `${chain}:${address.toLowerCase()}`;
|
|
18
|
+
const cached = abiCache.get(key);
|
|
19
|
+
if (cached)
|
|
20
|
+
return cached;
|
|
21
|
+
const clientManager = getClientManager();
|
|
22
|
+
const client = clientManager.getClient(chain);
|
|
23
|
+
const etherscanApiKey = clientManager.getConfig().etherscanApiKey;
|
|
24
|
+
const loaders = [new whatsabi.loaders.SourcifyABILoader({ chainId: clientManager.getChainId(chain) })];
|
|
25
|
+
if (etherscanApiKey) {
|
|
26
|
+
loaders.push(new whatsabi.loaders.EtherscanV2ABILoader({ apiKey: etherscanApiKey, chainId: clientManager.getChainId(chain) }));
|
|
27
|
+
}
|
|
28
|
+
const result = await whatsabi.autoload(address, {
|
|
29
|
+
provider: client,
|
|
30
|
+
abiLoader: new whatsabi.loaders.MultiABILoader(loaders),
|
|
31
|
+
signatureLookup: new whatsabi.loaders.OpenChainSignatureLookup(),
|
|
32
|
+
followProxies: true
|
|
33
|
+
});
|
|
34
|
+
// Bytecode-guessed ABIs carry no argument names; verified ones do.
|
|
35
|
+
const source = result.abi.some((item) => item.type === 'function' && item.inputs?.some((i) => i.name)) ? 'verified' : 'guessed';
|
|
36
|
+
const loaded = {
|
|
37
|
+
abi: result.abi,
|
|
38
|
+
source: source,
|
|
39
|
+
proxy: result.address !== address ? result.address : undefined,
|
|
40
|
+
name: result.contractResult?.name ?? undefined
|
|
41
|
+
};
|
|
42
|
+
abiCache.set(key, loaded);
|
|
43
|
+
return loaded;
|
|
44
|
+
}
|
|
45
|
+
export async function tokenMeta(chain, token) {
|
|
46
|
+
const key = `${chain}:${token.toLowerCase()}`;
|
|
47
|
+
const cached = metaCache.get(key);
|
|
48
|
+
if (cached)
|
|
49
|
+
return cached;
|
|
50
|
+
const client = getClientManager().getClient(chain);
|
|
51
|
+
const [decimals, symbol] = await client.multicall({
|
|
52
|
+
contracts: [
|
|
53
|
+
{ address: token, abi: ERC20_META_ABI, functionName: 'decimals' },
|
|
54
|
+
{ address: token, abi: ERC20_META_ABI, functionName: 'symbol' }
|
|
55
|
+
],
|
|
56
|
+
...(chain === 'localhost' && { deployless: true })
|
|
57
|
+
});
|
|
58
|
+
const meta = {
|
|
59
|
+
decimals: decimals.status === 'success' ? Number(decimals.result) : undefined,
|
|
60
|
+
symbol: symbol.status === 'success' ? symbol.result : undefined
|
|
61
|
+
};
|
|
62
|
+
metaCache.set(key, meta);
|
|
63
|
+
return meta;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Human label for an address: token symbol first (more recognisable than the contract
|
|
67
|
+
* name โ "USDC" beats "FiatTokenProxy"), then the verified contract name. EOAs get none,
|
|
68
|
+
* and the bytecode check keeps us from asking explorers about plain wallets.
|
|
69
|
+
*/
|
|
70
|
+
export async function addressLabel(chain, address) {
|
|
71
|
+
const key = `${chain}:${address.toLowerCase()}`;
|
|
72
|
+
if (labelCache.has(key))
|
|
73
|
+
return labelCache.get(key);
|
|
74
|
+
let label;
|
|
75
|
+
try {
|
|
76
|
+
const code = await getClientManager().getClient(chain).getBytecode({ address: address });
|
|
77
|
+
if (code && code !== '0x') {
|
|
78
|
+
label = (await tokenMeta(chain, address).catch(() => ({ symbol: undefined }))).symbol;
|
|
79
|
+
if (!label)
|
|
80
|
+
label = (await loadAbi(chain, address)).name;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Unknown address โ show it bare rather than failing the preview.
|
|
85
|
+
}
|
|
86
|
+
labelCache.set(key, label);
|
|
87
|
+
return label;
|
|
88
|
+
}
|
|
89
|
+
/** uint256 max and anything near it means "infinite" in an approval. */
|
|
90
|
+
export const MAX_UINT256 = (1n << 256n) - 1n;
|
|
91
|
+
export const UNLIMITED_THRESHOLD = MAX_UINT256 / 2n;
|
|
92
|
+
//# sourceMappingURL=chain-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-meta.js","sourceRoot":"","sources":["../src/chain-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ChainName } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Clear signing from the Ledger ERC-7730 registry: for a known contract and selector it
|
|
4
|
+
* says what the transaction *means* ("Swap", "Approve spending") and labels each field the
|
|
5
|
+
* way the protocol intends, instead of showing raw ABI argument names.
|
|
6
|
+
*
|
|
7
|
+
* The index is built from the registry by scripts/build-erc7730-index.mjs.
|
|
8
|
+
*/
|
|
9
|
+
interface IndexField {
|
|
10
|
+
label?: string;
|
|
11
|
+
path?: string;
|
|
12
|
+
format?: string;
|
|
13
|
+
/** tokenAmount: `tokenPath` points at the field holding the token address. */
|
|
14
|
+
params?: {
|
|
15
|
+
tokenPath?: string;
|
|
16
|
+
tokenAddress?: string;
|
|
17
|
+
[k: string]: unknown;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
interface IndexSelector {
|
|
21
|
+
name: string;
|
|
22
|
+
intent: string;
|
|
23
|
+
/** Full signature, needed to ABI-decode the calldata these paths address. */
|
|
24
|
+
signature?: string;
|
|
25
|
+
fields: IndexField[];
|
|
26
|
+
}
|
|
27
|
+
interface IndexEntry {
|
|
28
|
+
protocol: string;
|
|
29
|
+
chainIds: number[];
|
|
30
|
+
selectors: Record<string, IndexSelector>;
|
|
31
|
+
}
|
|
32
|
+
export interface ClearSigningField {
|
|
33
|
+
label: string;
|
|
34
|
+
format: string;
|
|
35
|
+
value: string;
|
|
36
|
+
address?: string;
|
|
37
|
+
name?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ClearSigningInfo {
|
|
40
|
+
protocol: string;
|
|
41
|
+
intent: string;
|
|
42
|
+
functionName: string;
|
|
43
|
+
fields: ClearSigningField[];
|
|
44
|
+
}
|
|
45
|
+
export declare function protocolLabel(slug: string): string;
|
|
46
|
+
interface TxContext {
|
|
47
|
+
to: string;
|
|
48
|
+
value?: string;
|
|
49
|
+
from?: string;
|
|
50
|
+
}
|
|
51
|
+
/** Registry entry for a contract, if it is listed for this chain. */
|
|
52
|
+
export declare function lookupContract(chain: ChainName, address: string): IndexEntry | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Clear-signing info for a transaction, or null when the contract/selector is unlisted.
|
|
55
|
+
* `decodedArgs` is supplied by the caller, which has already decoded the calldata against
|
|
56
|
+
* the contract's real ABI โ the registry's own signature is only a fallback for naming.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveClearSigning(chain: ChainName, tx: TxContext & {
|
|
59
|
+
data?: string;
|
|
60
|
+
}, decodedArgs: Record<string, unknown>): Promise<ClearSigningInfo | null>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=clear-signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-signing.d.ts","sourceRoot":"","sources":["../src/clear-signing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;;;GAMG;AAEH,UAAU,UAAU;IAElB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8EAA8E;IAC9E,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC7E;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAC5B;AAkCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAiBD,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AA+DD,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAKxF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,SAAS,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAiBlC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { gunzipSync } from 'node:zlib';
|
|
3
|
+
import { formatUnits, getAddress, isAddress } from 'viem';
|
|
4
|
+
import { addressLabel, tokenMeta, UNLIMITED_THRESHOLD } from './chain-meta.js';
|
|
5
|
+
import { getClientManager } from './client.js';
|
|
6
|
+
// Prettier names for registry directory slugs; unknown ones read fine as-is.
|
|
7
|
+
const PROTOCOL_LABELS = {
|
|
8
|
+
lifi: 'LI.FI',
|
|
9
|
+
'1inch': '1inch',
|
|
10
|
+
uniswap: 'Uniswap',
|
|
11
|
+
paraswap: 'ParaSwap',
|
|
12
|
+
cowswap: 'CoW Swap',
|
|
13
|
+
'0x': '0x Protocol',
|
|
14
|
+
aave: 'Aave',
|
|
15
|
+
morpho: 'Morpho',
|
|
16
|
+
safe: 'Safe',
|
|
17
|
+
lido: 'Lido',
|
|
18
|
+
eigenlayer: 'EigenLayer',
|
|
19
|
+
ens: 'ENS'
|
|
20
|
+
};
|
|
21
|
+
const require = createRequire(import.meta.url);
|
|
22
|
+
let index;
|
|
23
|
+
/** Loaded on first use: ~1.5MB of JSON, shipped gzipped at ~60KB. */
|
|
24
|
+
function registry() {
|
|
25
|
+
if (!index) {
|
|
26
|
+
try {
|
|
27
|
+
const path = require.resolve('./erc7730-index.json.gz');
|
|
28
|
+
index = JSON.parse(gunzipSync(require('node:fs').readFileSync(path)).toString());
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
index = {};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return index;
|
|
35
|
+
}
|
|
36
|
+
export function protocolLabel(slug) {
|
|
37
|
+
return PROTOCOL_LABELS[slug] ?? slug;
|
|
38
|
+
}
|
|
39
|
+
/** Resolve a registry path ("params.amountIn", "#.to", "[0].value") against decoded args. */
|
|
40
|
+
function getByPath(root, path) {
|
|
41
|
+
let current = root;
|
|
42
|
+
for (const part of path.replace(/^[#@]\./, '').split('.')) {
|
|
43
|
+
if (current == null)
|
|
44
|
+
return undefined;
|
|
45
|
+
const arrayIndex = part.match(/^\[(\d*)\]$/);
|
|
46
|
+
if (arrayIndex) {
|
|
47
|
+
current = Array.isArray(current) ? current[arrayIndex[1] === '' ? 0 : Number(arrayIndex[1])] : undefined;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
current = current[part];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return current;
|
|
54
|
+
}
|
|
55
|
+
function resolvePath(root, tx, path) {
|
|
56
|
+
if (path.startsWith('@.')) {
|
|
57
|
+
if (path.slice(2) === 'to')
|
|
58
|
+
return tx.to;
|
|
59
|
+
if (path.slice(2) === 'value')
|
|
60
|
+
return tx.value;
|
|
61
|
+
if (path.slice(2) === 'from')
|
|
62
|
+
return tx.from;
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return getByPath(root, path);
|
|
66
|
+
}
|
|
67
|
+
async function formatField(chain, field, root, tx) {
|
|
68
|
+
// A missing format with a token reference still means an amount.
|
|
69
|
+
const format = field.format ?? (field.params?.tokenPath || field.params?.tokenAddress ? 'tokenAmount' : 'raw');
|
|
70
|
+
const label = field.label ?? field.path ?? format;
|
|
71
|
+
const raw = field.path ? resolvePath(root, tx, field.path) : undefined;
|
|
72
|
+
const out = { label, format, value: '' };
|
|
73
|
+
// Unresolved: show the descriptor's path rather than an empty row.
|
|
74
|
+
if (raw == null) {
|
|
75
|
+
out.value = field.path ?? '';
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
switch (format) {
|
|
79
|
+
case 'tokenAmount':
|
|
80
|
+
case 'amount': {
|
|
81
|
+
const amount = typeof raw === 'bigint' ? raw : BigInt(raw);
|
|
82
|
+
const token = field.params?.tokenAddress ?? (field.params?.tokenPath ? resolvePath(root, tx, field.params.tokenPath) : undefined);
|
|
83
|
+
const meta = typeof token === 'string' && isAddress(token)
|
|
84
|
+
? await tokenMeta(chain, token).catch(() => ({ symbol: undefined, decimals: undefined }))
|
|
85
|
+
: { symbol: undefined, decimals: undefined };
|
|
86
|
+
const symbol = meta.symbol ? ` ${meta.symbol}` : '';
|
|
87
|
+
out.value = amount > UNLIMITED_THRESHOLD ? `Unlimited${symbol}` : `${formatUnits(amount, meta.decimals ?? 18)}${symbol}`;
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
case 'addressName':
|
|
91
|
+
case 'address':
|
|
92
|
+
case 'tokenName': {
|
|
93
|
+
if (!isAddress(raw)) {
|
|
94
|
+
out.value = String(raw);
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
const address = getAddress(raw);
|
|
98
|
+
const name = registry()[address.toLowerCase()]?.protocol;
|
|
99
|
+
out.address = address;
|
|
100
|
+
out.name = name ? protocolLabel(name) : await addressLabel(chain, address).catch(() => undefined);
|
|
101
|
+
out.value = out.name ?? address;
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
out.value = typeof raw === 'bigint' ? raw.toString() : String(raw);
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Registry entry for a contract, if it is listed for this chain. */
|
|
110
|
+
export function lookupContract(chain, address) {
|
|
111
|
+
const entry = registry()[address.toLowerCase()];
|
|
112
|
+
if (!entry)
|
|
113
|
+
return undefined;
|
|
114
|
+
const chainId = getClientManager().getChainId(chain);
|
|
115
|
+
return entry.chainIds.includes(chainId) ? entry : undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Clear-signing info for a transaction, or null when the contract/selector is unlisted.
|
|
119
|
+
* `decodedArgs` is supplied by the caller, which has already decoded the calldata against
|
|
120
|
+
* the contract's real ABI โ the registry's own signature is only a fallback for naming.
|
|
121
|
+
*/
|
|
122
|
+
export async function resolveClearSigning(chain, tx, decodedArgs) {
|
|
123
|
+
if (!tx.data || tx.data.length < 10)
|
|
124
|
+
return null;
|
|
125
|
+
const entry = lookupContract(chain, tx.to);
|
|
126
|
+
const format = entry?.selectors[tx.data.slice(0, 10).toLowerCase()];
|
|
127
|
+
if (!entry || !format)
|
|
128
|
+
return null;
|
|
129
|
+
// Fields with neither a path nor a label carry nothing a signer could read.
|
|
130
|
+
const usable = format.fields.filter((field) => field.path || field.label);
|
|
131
|
+
const fields = await Promise.all(usable.map((field) => formatField(chain, field, decodedArgs, tx)));
|
|
132
|
+
return {
|
|
133
|
+
protocol: protocolLabel(entry.protocol),
|
|
134
|
+
intent: format.intent,
|
|
135
|
+
functionName: format.name,
|
|
136
|
+
fields
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=clear-signing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-signing.js","sourceRoot":"","sources":["../src/clear-signing.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAgB/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAgB/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAsFnD,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAbP,CAAC;;;;;;;;;;;;mCA6BzB,CAAD;uCAKS,CAAC;;;;;;;;;;;;;;;;;;;;;;gCAuDA,CAAC;wCAKD,CAAC;;;kCAED,CAAC;4BAA+B,CAAC;;;;;;;;;;;;;;;;;;kCAqB9C,CAAA;yCAIQ,CAAC;2CAMH,CAAC;+BAEC,CAAC;+BACT,CAAA;;;wCAOE,CAAF;oCACa,CAAC;4CACoB,CAAC;kCAE7B,CAAR;4BAEM,CAAJ;kCAEE,CAAD;;;;;;;;;;;;;;;;;;yCA4BU,CAAC;2CAGO,CAAC;;;;wCAMT,CAAC;oCACc,CAAC;4CAK3B,CAAC;kCAEI,CAAA;4BAA6C,CAAC;kCACtB,CAAC;;;;;;;;;;;;;;;;;;yCAU8jB,CAAC;2CAA4D,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;kCAAuI,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;yCAAmyB,CAAC;;;;gCAAiM,CAAC;;;;kCAAiL,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;;2CAA03B,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;kCAAuI,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;oCAAsR,CAAC;mCAAiD,CAAC;;;;;;;;;;4BAAsgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA3Ml4I,CAAC;;;;;;;;;;;;mCA4Bd,CAAC;uCAKD,CAAF;;;;;;;;;;;;;;;;;;;;;;gCAwDI,CAAH;wCAEmB,CAAC;;;kCAMS,CAAC;4BAA+B,CAAC;;;;;;;;;;;;;;;;;;kCAiBtD,CAAC;yCAKH,CAAC;2CAKF,CAAC;+BAKH,CAAC;+BAEF,CAAC;;;wCAIU,CAAC;oCAIX,CAAD;4CACqB,CAAC;kCACU,CAAC;4BACF,CAAC;kCAG7B,CAAL;;;;;;;;;;;;;;;;;;yCA2B4B,CAAC;2CAGT,CAAC;;;;wCAQjB,CAAC;oCACQ,CAAC;4CAEb,CAAF;kCAIC,CAAC;4BAEF,CAAA;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;yCAWqf,CAAC;2CAA4D,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;kCAAuI,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;yCAAmyB,CAAC;;;;gCAAiM,CAAC;;;;kCAAiL,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;;2CAA03B,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;kCAAuI,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;oCAAsR,CAAC;mCAAiD,CAAC;;;;;;;;;;4BAAsgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA/Np1I,CAAC;;;;;;;;;;;;mCAkBH,CAAF;uCAEI,CAAL;;;;;;;;;;;;;;;;;;;;;;;kCA2CuB,CAAC;yCAIX,CAAC;2CAEsB,CAAC;+BAKhC,CAAC;+BAEL,CAAH;;;wCASG,CAAA;oCAEmB,CAAC;4CAKpB,CAAA;;;;;;;;;;;;;;;;;;;;yCAgCgC,CAAC;2CACI,CAAC;;;;wCAGtB,CAAC;oCACL,CAAC;4CACC,CAAA;;;;;;;;;;;;;;;;;;;;yCA0CF,CAAC;2CAGJ,CAAC;;;gCAKU,CAAC;wCAEnB,CAAH;;;;;;;;;;;;;;;;;;;;;;yCAoCD,CAAA;;;;gCAKsF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;2CAAqlC,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;;;;;;;;;;;;;;;;;;;;;gCAAu+B,CAAC;wCAAyD,CAAC;;;;;;;;;;;;;;;;;;;;;;gCAA46B,CAAC;wCAAyD,CAAC;;;;;;;;;;;;;;;;;;;mCAAg4B,CAAC;;;oCAAmJ,CAAC;;;4BAAgI,CAAC;;;;;;;;;;;4BAAskB,CAAC;4BAAiD,CAAC;2BAAgD,CAAC;6BAAkD,CAAC;0BAA+C,CAAC;4BAAwD,CAAC;6BAA0C,CAAC;gCAAqD,CAAC;wCAA6D,CAAC;oCAAqD,CAAC;4CAA6D,CAAC;6BAA8C,CAAC;kCAAuC,CAAC;2CAAgD,CAAC;2BAAgC,CAAC;gCAAqC,CAAC;yCAA8C,CAAC;kCAAuC,CAAC;;4BAA+D,CAAC;4BAAiD,CAAC;2BAAgD,CAAC;6BAAkD,CAAC;0BAA+C,CAAC;4BAAwD,CAAC;6BAA0C,CAAC;gCAAqD,CAAC;wCAA6D,CAAC;oCAAqD,CAAC;4CAA6D,CAAC;kCAAmD,CAAC;6BAAwE,CAAC;2CAAgD,CAAC;2BAAgC,CAAC;gCAAqC,CAAC;yCAA8C,CAAC;kCAAuC,CAAC;;4BAA+D,CAAC;4BAAiD,CAAC;2BAAgD,CAAC;6BAAkD,CAAC;0BAA+C,CAAC;4BAAwD,CAAC;6BAA0C,CAAC;gCAAqD,CAAC;wCAAyD,CAAC;oCAAqD,CAAC;4CAAiE,CAAC;kCAAuD,CAAC;6BAAwE,CAAC;2CAAgD,CAAC;2BAAgC,CAAC;gCAAqC,CAAC;yCAA8C,CAAC;kCAAuC,CAAC;;4BAA+D,CAAC;4BAAyC,CAAC;4BAAiD,CAAC;2BAAgD,CAAC;6BAAkD,CAAC;6BAAkD,CAAC;;gCAA+F,CAAC;oCAAqD,CAAC;4CAAiE,CAAC;;kCAAwG,CAAC;;2CAAsM,CAAC;2BAA2D,CAAC;gCAAoE,CAAC;yCAA+G,CAAC;kCAAuC,CAAC;;4BAA+D,CAAC;gCAA6C,CAAC;wCAAyD,CAAC;oCAAqD,CAAC;4CAAiE,CAAC;0BAA+C,CAAC;4BAAwD,CAAC;4BAAiD,CAAC;2BAAgD,CAAC;6BAAkD,CAAC;6BAAkD,CAAC;kCAAuD,CAAC;yCAAoF,CAAC;6BAAkF,CAAC;2CAAgD,CAAC;2BAAgC,CAAC;gCAAqC,CAAC;kCAAuC,CAAC;;4BAA+D,CAAC;4BAAiD,CAAC;2BAAgD,CAAC;6BAAkD,CAAC;0BAA+C,CAAC;;6BAAgG,CAAC;gCAAqD,CAAC;wCAAyD,CAAC;oCAAqD,CAAC;4CAAiE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA/MpyU,CAAC;;;;;;;;;;;;mCAmBuB,CAAC;uCAIE,CAAC;;;;;;;;;;;;;;;;;;;;;;gCA0DpC,CAAJ;wCAEuB,CAAC;;;kCASrB,CAAC;4BACgB,CAAC;;;;;;;;;;;;;;;;;;kCAmBjB,CAAC;yCACA,CAAC;2CACD,CAAC;+BAGC,CAAA;+BAEF,CAAC;;;wCAUE,CAAC;oCAKL,CAAC;4CACgC,CAAC;kCAG9B,CAAC;4BACa,CAAC;kCAIf,CAAC;;;;;;;;;;;;;;;;;;yCA2BE,CAAC;2CAEE,CAAA;;;;wCAKH,CAAC;oCAEe,CAAC;4CAGQ,CAAC;kCAEhC,CAAC;4BAGO,CAAC;kCACM,CAAC;;;;;;;;;;;;;;;;;;yCAmBsU,CAAC;2CAA4D,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;kCAAuI,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;yCAAmyB,CAAC;;;;gCAAiM,CAAC;;;;kCAAiL,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;;;;;;;;;;;;;2CAA03B,CAAC;;;gCAAmH,CAAC;wCAAyD,CAAC;;;kCAAuI,CAAC;4BAA6C,CAAC;kCAAmD,CAAC;;;;;;;oCAAsR,CAAC;mCAAiD,CAAC;;;;;;;;;;4BAAsgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;0BAvR5oI,CAAF;;;;;0BAOM,CAAC;;;;;;;;2BASF,CAAC;oCACgD,CAAC;0BAE3B,CAAC;0CAGzB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;CAoJF,CAAA;AAGF,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAc7D,CAAA;AAED,eAAO,MAAM,gBAAgB,oJAcnB,CAAA;AAGV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAQ;gBAEV,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,SAAS,EAAE,SAAS,GAcX,UAAU,CAAC,OAAO,kBAAkB,CAAC;IAGxD,SAAS,IAAI,MAAM;IAInB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAmBhD,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAKvC,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;CAIzC;AAKD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAGrE;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
|
package/dist/client.js
CHANGED
|
@@ -15,7 +15,8 @@ function getRpcUrl(chainName, config) {
|
|
|
15
15
|
: 'https://ethereum-rpc.publicnode.com',
|
|
16
16
|
base: config.alchemyApiKey
|
|
17
17
|
? `https://base-mainnet.g.alchemy.com/v2/${config.alchemyApiKey}`
|
|
18
|
-
|
|
18
|
+
// publicnode refuses receipts and anything else it calls an archive request
|
|
19
|
+
: 'https://mainnet.base.org',
|
|
19
20
|
arbitrum: config.alchemyApiKey
|
|
20
21
|
? `https://arb-mainnet.g.alchemy.com/v2/${config.alchemyApiKey}`
|
|
21
22
|
: config.infuraApiKey
|
|
@@ -25,7 +26,8 @@ function getRpcUrl(chainName, config) {
|
|
|
25
26
|
? `https://polygon-mainnet.g.alchemy.com/v2/${config.alchemyApiKey}`
|
|
26
27
|
: config.infuraApiKey
|
|
27
28
|
? `https://polygon-mainnet.infura.io/v3/${config.infuraApiKey}`
|
|
28
|
-
|
|
29
|
+
// polygon-rpc.com now answers 401 "API key disabled" to anonymous callers
|
|
30
|
+
: 'https://polygon-bor-rpc.publicnode.com',
|
|
29
31
|
optimism: config.alchemyApiKey
|
|
30
32
|
? `https://opt-mainnet.g.alchemy.com/v2/${config.alchemyApiKey}`
|
|
31
33
|
: config.infuraApiKey
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAC/C,OAAO,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACP,MAAM,aAAa,CAAA;AAGpB,2CAA2C;AAC3C,SAAS,SAAS,CAAC,SAAiB,EAAE,MAAc;IAClD,kCAAkC;IAClC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC;IAED,kCAAkC;IAClC,MAAM,YAAY,GAA2B;QAC3C,OAAO,EAAE,MAAM,CAAC,aAAa;YAC3B,CAAC,CAAC,wCAAwC,MAAM,CAAC,aAAa,EAAE;YAChE,CAAC,CAAC,MAAM,CAAC,YAAY;gBACnB,CAAC,CAAC,gCAAgC,MAAM,CAAC,YAAY,EAAE;gBACvD,CAAC,CAAC,qCAAqC;QAE3C,IAAI,EAAE,MAAM,CAAC,aAAa;YACxB,CAAC,CAAC,yCAAyC,MAAM,CAAC,aAAa,EAAE;YACjE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export interface HttpServerOptions {
|
|
3
|
+
port?: number;
|
|
4
|
+
host?: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
createMcpServer: () => McpServer;
|
|
7
|
+
}
|
|
8
|
+
export declare function startHttpServer(options: HttpServerOptions): Promise<{
|
|
9
|
+
url: string;
|
|
10
|
+
port: number;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=http-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAyBxE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,SAAS,CAAA;CACjC;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA0DxG"}
|