web3-tools-mcp 2.0.2 → 3.1.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 +182 -1
- package/README.md +76 -47
- package/dist/anvil.d.ts +17 -19
- package/dist/anvil.d.ts.map +1 -1
- package/dist/anvil.js +124 -228
- package/dist/anvil.js.map +1 -1
- package/dist/chain-meta.d.ts.map +1 -1
- package/dist/chain-meta.js +19 -8
- package/dist/chain-meta.js.map +1 -1
- package/dist/chains.d.ts +9 -1
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +11 -2
- package/dist/chains.js.map +1 -1
- package/dist/clear-signing.d.ts.map +1 -1
- package/dist/clear-signing.js +17 -6
- package/dist/clear-signing.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +22 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +24 -0
- package/dist/context.js.map +1 -0
- package/dist/hosted.d.ts +12 -0
- package/dist/hosted.d.ts.map +1 -0
- package/dist/hosted.js +12 -0
- package/dist/hosted.js.map +1 -0
- package/dist/http-server.d.ts +13 -0
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +22 -7
- package/dist/http-server.js.map +1 -1
- package/dist/index.js +20 -12
- package/dist/index.js.map +1 -1
- package/dist/kv-storage.d.ts +2 -1
- package/dist/kv-storage.d.ts.map +1 -1
- package/dist/kv-storage.js +5 -2
- package/dist/kv-storage.js.map +1 -1
- package/dist/lib.d.ts +24 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +23 -0
- package/dist/lib.js.map +1 -0
- package/dist/mcp-server.d.ts +4 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +43 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/oauth.d.ts +57 -8
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +133 -63
- package/dist/oauth.js.map +1 -1
- package/dist/preview.d.ts +7 -0
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +21 -7
- package/dist/preview.js.map +1 -1
- package/dist/signing-requests.d.ts +81 -0
- package/dist/signing-requests.d.ts.map +1 -0
- package/dist/signing-requests.js +138 -0
- package/dist/signing-requests.js.map +1 -0
- package/dist/tools/index.d.ts +27 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +50 -15
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +39 -30
- package/dist/tools/read/advanced.d.ts.map +1 -0
- package/dist/tools/{advanced.js → read/advanced.js} +53 -41
- package/dist/tools/read/advanced.js.map +1 -0
- package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
- package/dist/tools/read/balance.d.ts.map +1 -0
- package/dist/tools/{balance.js → read/balance.js} +18 -33
- package/dist/tools/read/balance.js.map +1 -0
- package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +20 -15
- package/dist/tools/read/contract-info.d.ts.map +1 -0
- package/dist/tools/{contract-info.js → read/contract-info.js} +54 -123
- package/dist/tools/read/contract-info.js.map +1 -0
- package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
- package/dist/tools/read/contract.d.ts.map +1 -0
- package/dist/tools/{contract.js → read/contract.js} +3 -2
- package/dist/tools/read/contract.js.map +1 -0
- package/dist/tools/read/ens.d.ts +104 -0
- package/dist/tools/read/ens.d.ts.map +1 -0
- package/dist/tools/{ens.js → read/ens.js} +25 -33
- package/dist/tools/read/ens.js.map +1 -0
- package/dist/tools/read/gas.d.ts +171 -0
- package/dist/tools/read/gas.d.ts.map +1 -0
- package/dist/tools/read/gas.js +333 -0
- package/dist/tools/read/gas.js.map +1 -0
- package/dist/tools/read/logs.d.ts +101 -0
- package/dist/tools/read/logs.d.ts.map +1 -0
- package/dist/tools/read/logs.js +211 -0
- package/dist/tools/read/logs.js.map +1 -0
- package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
- package/dist/tools/read/signatures.d.ts.map +1 -0
- package/dist/tools/{signatures.js → read/signatures.js} +4 -3
- package/dist/tools/read/signatures.js.map +1 -0
- package/dist/tools/read/signing.d.ts +27 -0
- package/dist/tools/read/signing.d.ts.map +1 -0
- package/dist/tools/read/signing.js +81 -0
- package/dist/tools/read/signing.js.map +1 -0
- package/dist/tools/sign/errors.d.ts +9 -0
- package/dist/tools/sign/errors.d.ts.map +1 -0
- package/dist/tools/sign/errors.js +29 -0
- package/dist/tools/sign/errors.js.map +1 -0
- package/dist/tools/sign/transactions.d.ts +141 -0
- package/dist/tools/sign/transactions.d.ts.map +1 -0
- package/dist/tools/sign/transactions.js +361 -0
- package/dist/tools/sign/transactions.js.map +1 -0
- package/dist/tools/sign/wallet.d.ts +50 -0
- package/dist/tools/sign/wallet.d.ts.map +1 -0
- package/dist/tools/sign/wallet.js +180 -0
- package/dist/tools/sign/wallet.js.map +1 -0
- package/dist/utils.d.ts +23 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +48 -3
- package/dist/utils.js.map +1 -1
- package/dist/wallet-client.d.ts +34 -4
- package/dist/wallet-client.d.ts.map +1 -1
- package/dist/wallet-client.js +106 -27
- package/dist/wallet-client.js.map +1 -1
- package/dist/walletconnect.d.ts +100 -13
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js +215 -50
- package/dist/walletconnect.js.map +1 -1
- package/package.json +12 -9
- package/src/anvil.ts +150 -271
- package/src/chain-meta.ts +16 -7
- package/src/chains.ts +14 -2
- package/src/clear-signing.ts +15 -9
- package/src/client.ts +0 -1
- package/src/context.ts +27 -0
- package/src/hosted.ts +11 -0
- package/src/http-server.ts +38 -8
- package/src/index.ts +20 -13
- package/src/kv-storage.ts +6 -3
- package/src/lib.ts +24 -0
- package/src/mcp-server.ts +47 -0
- package/src/oauth.ts +181 -69
- package/src/preview.ts +28 -7
- package/src/signing-requests.ts +198 -0
- package/src/tools/index.ts +78 -16
- package/src/tools/{advanced.ts → read/advanced.ts} +74 -43
- package/src/tools/{balance.ts → read/balance.ts} +20 -35
- package/src/tools/{contract-info.ts → read/contract-info.ts} +66 -146
- package/src/tools/{contract.ts → read/contract.ts} +4 -3
- package/src/tools/{ens.ts → read/ens.ts} +27 -34
- package/src/tools/read/gas.ts +443 -0
- package/src/tools/read/logs.ts +281 -0
- package/src/tools/{signatures.ts → read/signatures.ts} +5 -5
- package/src/tools/read/signing.ts +92 -0
- package/src/tools/sign/errors.ts +28 -0
- package/src/tools/sign/transactions.ts +479 -0
- package/src/tools/sign/wallet.ts +216 -0
- package/src/utils.ts +52 -3
- package/src/wallet-client.ts +107 -24
- package/src/walletconnect.ts +250 -48
- package/dist/tools/advanced.d.ts.map +0 -1
- package/dist/tools/advanced.js.map +0 -1
- package/dist/tools/balance.d.ts.map +0 -1
- package/dist/tools/balance.js.map +0 -1
- package/dist/tools/contract-info.d.ts.map +0 -1
- package/dist/tools/contract-info.js.map +0 -1
- package/dist/tools/contract.d.ts.map +0 -1
- package/dist/tools/contract.js.map +0 -1
- package/dist/tools/ens.d.ts +0 -119
- package/dist/tools/ens.d.ts.map +0 -1
- package/dist/tools/ens.js.map +0 -1
- package/dist/tools/gas.d.ts +0 -99
- package/dist/tools/gas.d.ts.map +0 -1
- package/dist/tools/gas.js +0 -181
- package/dist/tools/gas.js.map +0 -1
- package/dist/tools/logs.d.ts +0 -39
- package/dist/tools/logs.d.ts.map +0 -1
- package/dist/tools/logs.js +0 -230
- package/dist/tools/logs.js.map +0 -1
- package/dist/tools/signatures.d.ts.map +0 -1
- package/dist/tools/signatures.js.map +0 -1
- package/dist/tools/transactions.d.ts +0 -155
- package/dist/tools/transactions.d.ts.map +0 -1
- package/dist/tools/transactions.js +0 -365
- package/dist/tools/transactions.js.map +0 -1
- package/src/tools/gas.ts +0 -219
- package/src/tools/logs.ts +0 -293
- package/src/tools/transactions.ts +0 -456
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
send_native_token: {
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
schema: z.ZodObject<{
|
|
7
|
+
chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
|
|
8
|
+
to: z.ZodString;
|
|
9
|
+
amount: z.ZodString;
|
|
10
|
+
data: z.ZodOptional<z.ZodString>;
|
|
11
|
+
signWith: z.ZodEnum<["phone", "browser"]>;
|
|
12
|
+
account: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
15
|
+
to: string;
|
|
16
|
+
amount: string;
|
|
17
|
+
signWith: "browser" | "phone";
|
|
18
|
+
data?: string | undefined;
|
|
19
|
+
account?: string | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
22
|
+
to: string;
|
|
23
|
+
amount: string;
|
|
24
|
+
signWith: "browser" | "phone";
|
|
25
|
+
data?: string | undefined;
|
|
26
|
+
account?: string | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
handler: (args: {
|
|
29
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
30
|
+
to: string;
|
|
31
|
+
amount: string;
|
|
32
|
+
signWith: "browser" | "phone";
|
|
33
|
+
data?: string | undefined;
|
|
34
|
+
account?: string | undefined;
|
|
35
|
+
}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
36
|
+
available: (() => boolean) | undefined;
|
|
37
|
+
};
|
|
38
|
+
send_erc20_token: {
|
|
39
|
+
title: string;
|
|
40
|
+
description: string;
|
|
41
|
+
schema: z.ZodObject<{
|
|
42
|
+
chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
|
|
43
|
+
tokenAddress: z.ZodString;
|
|
44
|
+
to: z.ZodString;
|
|
45
|
+
amount: z.ZodString;
|
|
46
|
+
decimals: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
signWith: z.ZodEnum<["phone", "browser"]>;
|
|
48
|
+
account: z.ZodOptional<z.ZodString>;
|
|
49
|
+
}, "strip", z.ZodTypeAny, {
|
|
50
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
51
|
+
to: string;
|
|
52
|
+
tokenAddress: string;
|
|
53
|
+
amount: string;
|
|
54
|
+
signWith: "browser" | "phone";
|
|
55
|
+
account?: string | undefined;
|
|
56
|
+
decimals?: number | undefined;
|
|
57
|
+
}, {
|
|
58
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
59
|
+
to: string;
|
|
60
|
+
tokenAddress: string;
|
|
61
|
+
amount: string;
|
|
62
|
+
signWith: "browser" | "phone";
|
|
63
|
+
account?: string | undefined;
|
|
64
|
+
decimals?: number | undefined;
|
|
65
|
+
}>;
|
|
66
|
+
handler: (args: {
|
|
67
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
68
|
+
to: string;
|
|
69
|
+
tokenAddress: string;
|
|
70
|
+
amount: string;
|
|
71
|
+
signWith: "browser" | "phone";
|
|
72
|
+
account?: string | undefined;
|
|
73
|
+
decimals?: number | undefined;
|
|
74
|
+
}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
75
|
+
available: (() => boolean) | undefined;
|
|
76
|
+
};
|
|
77
|
+
write_contract: {
|
|
78
|
+
title: string;
|
|
79
|
+
description: string;
|
|
80
|
+
schema: z.ZodObject<{
|
|
81
|
+
chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
|
|
82
|
+
contractAddress: z.ZodString;
|
|
83
|
+
functionAbi: z.ZodString;
|
|
84
|
+
args: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodEffects<z.ZodNumber, number, number>, z.ZodBoolean]>, "many">>;
|
|
85
|
+
value: z.ZodOptional<z.ZodString>;
|
|
86
|
+
signWith: z.ZodEnum<["phone", "browser"]>;
|
|
87
|
+
account: z.ZodOptional<z.ZodString>;
|
|
88
|
+
}, "strip", z.ZodTypeAny, {
|
|
89
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
90
|
+
contractAddress: string;
|
|
91
|
+
functionAbi: string;
|
|
92
|
+
signWith: "browser" | "phone";
|
|
93
|
+
value?: string | undefined;
|
|
94
|
+
account?: string | undefined;
|
|
95
|
+
args?: (string | number | boolean)[] | undefined;
|
|
96
|
+
}, {
|
|
97
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
98
|
+
contractAddress: string;
|
|
99
|
+
functionAbi: string;
|
|
100
|
+
signWith: "browser" | "phone";
|
|
101
|
+
value?: string | undefined;
|
|
102
|
+
account?: string | undefined;
|
|
103
|
+
args?: (string | number | boolean)[] | undefined;
|
|
104
|
+
}>;
|
|
105
|
+
handler: (args: {
|
|
106
|
+
chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
|
|
107
|
+
contractAddress: string;
|
|
108
|
+
functionAbi: string;
|
|
109
|
+
signWith: "browser" | "phone";
|
|
110
|
+
value?: string | undefined;
|
|
111
|
+
account?: string | undefined;
|
|
112
|
+
args?: (string | number | boolean)[] | undefined;
|
|
113
|
+
}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
114
|
+
available: (() => boolean) | undefined;
|
|
115
|
+
};
|
|
116
|
+
sign_message: {
|
|
117
|
+
title: string;
|
|
118
|
+
description: string;
|
|
119
|
+
schema: z.ZodObject<{
|
|
120
|
+
message: z.ZodString;
|
|
121
|
+
signWith: z.ZodEnum<["phone", "browser"]>;
|
|
122
|
+
account: z.ZodOptional<z.ZodString>;
|
|
123
|
+
}, "strip", z.ZodTypeAny, {
|
|
124
|
+
message: string;
|
|
125
|
+
signWith: "browser" | "phone";
|
|
126
|
+
account?: string | undefined;
|
|
127
|
+
}, {
|
|
128
|
+
message: string;
|
|
129
|
+
signWith: "browser" | "phone";
|
|
130
|
+
account?: string | undefined;
|
|
131
|
+
}>;
|
|
132
|
+
handler: (args: {
|
|
133
|
+
message: string;
|
|
134
|
+
signWith: "browser" | "phone";
|
|
135
|
+
account?: string | undefined;
|
|
136
|
+
}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
137
|
+
available: (() => boolean) | undefined;
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
export default _default;
|
|
141
|
+
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../src/tools/sign/transactions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwPvB,wBAoOC"}
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { encodeFunctionData, isAddress, parseAbiItem, parseUnits, toHex } from 'viem';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { tokenMeta } from '../../chain-meta.js';
|
|
5
|
+
import { getClientManager, SUPPORTED_CHAINS } from '../../client.js';
|
|
6
|
+
import { log } from '../../log.js';
|
|
7
|
+
import { buildTxPreview } from '../../preview.js';
|
|
8
|
+
import { signingCall } from '../../signing-requests.js';
|
|
9
|
+
import { convertArgumentsToTypes, createTool, formatResponse } from '../../utils.js';
|
|
10
|
+
import { getWalletClient } from '../../wallet-client.js';
|
|
11
|
+
import { getPhoneSigner } from '../../walletconnect.js';
|
|
12
|
+
import { failure } from './errors.js';
|
|
13
|
+
function generateRequestId() {
|
|
14
|
+
return randomBytes(16).toString('hex');
|
|
15
|
+
}
|
|
16
|
+
function requireAddress(label, address) {
|
|
17
|
+
if (!isAddress(address))
|
|
18
|
+
throw new Error(`Invalid ${label}: ${address}`);
|
|
19
|
+
return address;
|
|
20
|
+
}
|
|
21
|
+
function explorerTxUrl(chain, txHash) {
|
|
22
|
+
return getClientManager().explorerUrl(chain, `/tx/${txHash}`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Which wallet to send the request to. Deliberately required on every signing tool: both
|
|
26
|
+
* signers can be live at once, and only the person holding the devices knows which one is
|
|
27
|
+
* actually to hand. Guessing strands the request in front of a screen nobody is looking at.
|
|
28
|
+
*
|
|
29
|
+
* Either way the transaction is decoded and simulated first — the wallet shows its own
|
|
30
|
+
* summary, so the preview is returned to the caller too, to be read before approving.
|
|
31
|
+
*/
|
|
32
|
+
const SignWithSchema = z
|
|
33
|
+
.enum(['phone', 'browser'])
|
|
34
|
+
.describe('Where to approve this: "phone" for a paired WalletConnect wallet, "browser" for the wallet signing page. Ask the user which they want — do not assume, even when only one is connected. Call wallet_status first: it says which signers are ready, and when no signing page is open it returns walletUrl. In that case give the user that link, ask them to open it and connect a wallet, and only call this once they confirm — a signing request cannot reach a page nobody has open.');
|
|
35
|
+
/** Only meaningful with several wallets paired; wallet_status lists them. */
|
|
36
|
+
const AccountSchema = z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe('Which paired wallet to ask, by address. Only needed when wallet_status reports more than one — omit it and the most recently paired one is used.');
|
|
40
|
+
/** This identity's phone wallet and the address to sign from, or an error saying what to do. */
|
|
41
|
+
async function requirePhoneSession(identity, account) {
|
|
42
|
+
const phone = getPhoneSigner();
|
|
43
|
+
if (!phone) {
|
|
44
|
+
throw new Error('Phone signing is not configured on this server. Set WALLETCONNECT_PROJECT_ID, or sign in the browser instead.');
|
|
45
|
+
}
|
|
46
|
+
const session = await phone.session(identity, account);
|
|
47
|
+
if (!session) {
|
|
48
|
+
const paired = await phone.sessions(identity);
|
|
49
|
+
throw new Error(account
|
|
50
|
+
? `No paired wallet holds ${account}. Paired: ${paired.flatMap((s) => s.accounts).join(', ') || 'none'}.`
|
|
51
|
+
: 'No phone wallet is paired. Run pair_phone_wallet and scan the QR, or sign in the browser instead.');
|
|
52
|
+
}
|
|
53
|
+
// A session can expose several addresses; the one asked for, spelled as the wallet
|
|
54
|
+
// reported it, or its first when the caller did not choose.
|
|
55
|
+
const wanted = account?.toLowerCase();
|
|
56
|
+
const from = session.accounts.find((a) => a.toLowerCase() === wanted) ?? session.accounts[0];
|
|
57
|
+
return { phone, session, from };
|
|
58
|
+
}
|
|
59
|
+
/** The phone's wallet reaches chains through its own RPC, which cannot see this machine's node. */
|
|
60
|
+
function requireReachable(chain, signWith) {
|
|
61
|
+
if (chain === 'localhost' && signWith === 'phone') {
|
|
62
|
+
throw new Error('A phone wallet cannot sign on localhost: it has no route to this machine\'s node. Use signWith "browser".');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The token's own decimals. A caller-supplied figure is only a cross-check: trusting a wrong
|
|
67
|
+
* one moves orders of magnitude more or less than was asked for.
|
|
68
|
+
*/
|
|
69
|
+
async function tokenDecimals(chain, token, claimed) {
|
|
70
|
+
const onChain = (await tokenMeta(chain, token).catch(() => undefined))?.decimals;
|
|
71
|
+
if (onChain === undefined) {
|
|
72
|
+
if (claimed === undefined) {
|
|
73
|
+
throw new Error(`Could not read decimals() from ${token} on ${chain}. Check it is an ERC20 token on this chain, or pass "decimals" explicitly.`);
|
|
74
|
+
}
|
|
75
|
+
return claimed;
|
|
76
|
+
}
|
|
77
|
+
if (claimed !== undefined && claimed !== onChain) {
|
|
78
|
+
throw new Error(`"decimals" was ${claimed}, but ${token} reports ${onChain} on ${chain}. Nothing was sent.`);
|
|
79
|
+
}
|
|
80
|
+
return onChain;
|
|
81
|
+
}
|
|
82
|
+
/** Long enough for a congested chain, short enough that a stuck one is reported rather than hung on. */
|
|
83
|
+
const RECEIPT_TIMEOUT = 180_000;
|
|
84
|
+
/**
|
|
85
|
+
* Wait for the transaction to actually be mined.
|
|
86
|
+
*
|
|
87
|
+
* A hash means broadcast, nothing more. Reporting that as success is how a reverted
|
|
88
|
+
* transaction — gas spent, nothing done — gets read back as if it had worked.
|
|
89
|
+
*/
|
|
90
|
+
async function confirm(chain, txHash) {
|
|
91
|
+
try {
|
|
92
|
+
const receipt = await getClientManager()
|
|
93
|
+
.getClient(chain)
|
|
94
|
+
.waitForTransactionReceipt({ hash: txHash, timeout: RECEIPT_TIMEOUT });
|
|
95
|
+
return {
|
|
96
|
+
status: receipt.status === 'success' ? 'mined' : 'reverted',
|
|
97
|
+
blockNumber: receipt.blockNumber.toString(),
|
|
98
|
+
gasUsed: receipt.gasUsed.toString()
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// Still out there — it simply has not been mined yet. Not a failure, and saying so beats
|
|
103
|
+
// claiming either outcome.
|
|
104
|
+
log('warning', 'Transaction', `No receipt for ${txHash} yet: ${error.message}`);
|
|
105
|
+
return { status: 'broadcast' };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function signOnPhone(chain, tx, identity, account, progress) {
|
|
109
|
+
const { phone, from } = await requirePhoneSession(identity, account);
|
|
110
|
+
const preview = await buildTxPreview(chain, tx, from);
|
|
111
|
+
const txHash = await phone.request(chain, 'eth_sendTransaction', [{ from, to: tx.to, value: tx.value ?? '0x0', ...(tx.data && { data: tx.data }) }], { identity, account, onWaiting: progress.waiting });
|
|
112
|
+
progress.mining(String(txHash));
|
|
113
|
+
return { txHash, preview, signedWith: 'phone', receipt: await confirm(chain, txHash) };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* `onWaiting` is what decides whether the tool call waits.
|
|
117
|
+
*
|
|
118
|
+
* The browser signer never calls it: the tab is opened and the title flashes, so somebody is
|
|
119
|
+
* looking within seconds and the grace period is worth spending. A phone is only as loud as
|
|
120
|
+
* the wallet, and the two people actually use push nothing at all — so that path hands back
|
|
121
|
+
* a request id as soon as the wallet has it, rather than spending the grace on silence.
|
|
122
|
+
*/
|
|
123
|
+
async function requestSignature(chain, tx, signWith, identity, account, progress) {
|
|
124
|
+
log('info', 'Transaction', `${chain} → ${tx.to}, signing with ${signWith}`);
|
|
125
|
+
requireReachable(chain, signWith);
|
|
126
|
+
if (signWith === 'phone')
|
|
127
|
+
return signOnPhone(chain, tx, identity, account, progress);
|
|
128
|
+
const wallet = getWalletClient(identity);
|
|
129
|
+
await wallet.waitForSigner();
|
|
130
|
+
const preview = await buildTxPreview(chain, tx, wallet.getAddress());
|
|
131
|
+
const txHash = await wallet.request({
|
|
132
|
+
id: generateRequestId(),
|
|
133
|
+
type: 'send_transaction',
|
|
134
|
+
chain,
|
|
135
|
+
data: { to: tx.to, value: tx.value ?? '0x0', ...(tx.data && { data: tx.data }) },
|
|
136
|
+
preview
|
|
137
|
+
});
|
|
138
|
+
progress.mining(String(txHash));
|
|
139
|
+
return { txHash, preview, signedWith: 'browser', receipt: await confirm(chain, txHash) };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* What to tell the agent when nobody has approved yet.
|
|
143
|
+
*
|
|
144
|
+
* Emphatically not a failure: the request is in front of a wallet right now. Calling the
|
|
145
|
+
* signing tool again would put a second, separately approvable request there — so the way
|
|
146
|
+
* back is the id, and this says so plainly enough that an agent does not retry instead.
|
|
147
|
+
*/
|
|
148
|
+
function awaitingApproval(request) {
|
|
149
|
+
return formatResponse({
|
|
150
|
+
success: true,
|
|
151
|
+
status: 'awaiting_approval',
|
|
152
|
+
requestId: request.id,
|
|
153
|
+
signedWith: request.signer,
|
|
154
|
+
what: request.summary,
|
|
155
|
+
nextStep: `Tell the user to approve it${request.signer === 'phone' ? ' in their phone wallet — some wallets do not notify, so they may need to open the app themselves' : ' in the signing page'}, then call check_signing_request with requestId "${request.id}". Do not call this tool again: that would ask for a second signature.`,
|
|
156
|
+
message: 'Sent to the wallet. Nothing has been signed or broadcast yet.'
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Whether it worked, which is not the same question as whether it was sent.
|
|
161
|
+
*
|
|
162
|
+
* A reverted transaction is mined, costs gas and does nothing. Reporting it as a success
|
|
163
|
+
* because a hash came back is how an agent goes on to build on a state change that never
|
|
164
|
+
* happened.
|
|
165
|
+
*/
|
|
166
|
+
function minedOutcome(receipt) {
|
|
167
|
+
if (receipt.status === 'reverted') {
|
|
168
|
+
return {
|
|
169
|
+
success: false,
|
|
170
|
+
status: 'reverted',
|
|
171
|
+
blockNumber: receipt.blockNumber,
|
|
172
|
+
gasUsed: receipt.gasUsed,
|
|
173
|
+
message: 'Mined, but it reverted. The gas was spent and nothing else changed.'
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (receipt.status === 'broadcast') {
|
|
177
|
+
return {
|
|
178
|
+
success: true,
|
|
179
|
+
status: 'broadcast',
|
|
180
|
+
message: 'Signed and broadcast, but not mined yet. Check the explorer link before treating it as done.'
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return { success: true, status: 'mined', blockNumber: receipt.blockNumber, gasUsed: receipt.gasUsed };
|
|
184
|
+
}
|
|
185
|
+
/** What the caller should see about a transaction before it is approved. */
|
|
186
|
+
function previewSummary(preview) {
|
|
187
|
+
return {
|
|
188
|
+
action: preview.decoded?.intent ?? preview.decoded?.functionName,
|
|
189
|
+
protocol: preview.decoded?.protocol ?? preview.toLabel,
|
|
190
|
+
// Labels come from the contracts themselves, so the address they belong to goes too.
|
|
191
|
+
to: preview.to,
|
|
192
|
+
details: preview.decoded?.fields.map((f) => `${f.name}: ${f.value}${f.warning ? ` (${f.warning})` : ''}`),
|
|
193
|
+
simulation: preview.simulation
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
export default {
|
|
197
|
+
send_native_token: createTool('Send Native Token', 'Send native tokens (ETH, MATIC, BNB, etc.) to an address. Simulates the transaction, then sends it to the signer you choose for approval.', z.object({
|
|
198
|
+
chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
|
|
199
|
+
to: z.string().describe('Recipient address'),
|
|
200
|
+
amount: z.string().describe('Amount in native token (e.g., "0.1" for 0.1 ETH)'),
|
|
201
|
+
data: z.string().optional().describe('Optional hex-encoded data to include with transaction'),
|
|
202
|
+
signWith: SignWithSchema,
|
|
203
|
+
account: AccountSchema
|
|
204
|
+
}), async (args, identity) => {
|
|
205
|
+
try {
|
|
206
|
+
const to = requireAddress('recipient address', args.to);
|
|
207
|
+
const value = `0x${parseUnits(args.amount, 18).toString(16)}`;
|
|
208
|
+
const outcome = await signingCall({ identity, signer: args.signWith, summary: `Send ${args.amount} on ${args.chain} to ${to}` }, (progress) => requestSignature(args.chain, { to, value, data: args.data }, args.signWith, identity, args.account, progress));
|
|
209
|
+
if (!outcome.done)
|
|
210
|
+
return awaitingApproval(outcome.request);
|
|
211
|
+
const { txHash, preview, signedWith, receipt } = outcome.result;
|
|
212
|
+
return formatResponse({
|
|
213
|
+
...minedOutcome(receipt),
|
|
214
|
+
chain: args.chain,
|
|
215
|
+
transactionHash: txHash,
|
|
216
|
+
to,
|
|
217
|
+
amount: args.amount,
|
|
218
|
+
signedWith,
|
|
219
|
+
preview: previewSummary(preview),
|
|
220
|
+
explorerUrl: explorerTxUrl(args.chain, txHash)
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return failure(error, 'Transaction failed or was rejected');
|
|
225
|
+
}
|
|
226
|
+
}),
|
|
227
|
+
send_erc20_token: createTool('Send ERC20 Token', 'Send ERC20 tokens to an address. Simulates the transfer, then sends it to the signer you choose for approval.', z.object({
|
|
228
|
+
chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
|
|
229
|
+
tokenAddress: z.string().describe('ERC20 token contract address'),
|
|
230
|
+
to: z.string().describe('Recipient address'),
|
|
231
|
+
amount: z.string().describe('Amount in token units (e.g., "100" for 100 USDC)'),
|
|
232
|
+
decimals: z
|
|
233
|
+
.number()
|
|
234
|
+
.int()
|
|
235
|
+
.optional()
|
|
236
|
+
.describe('Token decimals. Read from the token when omitted; when given, must match what the token reports.'),
|
|
237
|
+
signWith: SignWithSchema,
|
|
238
|
+
account: AccountSchema
|
|
239
|
+
}), async (args, identity) => {
|
|
240
|
+
try {
|
|
241
|
+
const tokenAddress = requireAddress('token address', args.tokenAddress);
|
|
242
|
+
const to = requireAddress('recipient address', args.to);
|
|
243
|
+
const decimals = await tokenDecimals(args.chain, tokenAddress, args.decimals);
|
|
244
|
+
const data = encodeFunctionData({
|
|
245
|
+
abi: [parseAbiItem('function transfer(address to, uint256 amount)')],
|
|
246
|
+
args: [to, parseUnits(args.amount, decimals)]
|
|
247
|
+
});
|
|
248
|
+
const outcome = await signingCall({ identity, signer: args.signWith, summary: `Send ${args.amount} of ${tokenAddress} on ${args.chain} to ${to}` }, (progress) => requestSignature(args.chain, { to: tokenAddress, data, value: '0x0' }, args.signWith, identity, args.account, progress));
|
|
249
|
+
if (!outcome.done)
|
|
250
|
+
return awaitingApproval(outcome.request);
|
|
251
|
+
const { txHash, preview, signedWith, receipt } = outcome.result;
|
|
252
|
+
return formatResponse({
|
|
253
|
+
...minedOutcome(receipt),
|
|
254
|
+
chain: args.chain,
|
|
255
|
+
transactionHash: txHash,
|
|
256
|
+
tokenAddress,
|
|
257
|
+
to,
|
|
258
|
+
amount: args.amount,
|
|
259
|
+
signedWith,
|
|
260
|
+
preview: previewSummary(preview),
|
|
261
|
+
explorerUrl: explorerTxUrl(args.chain, txHash)
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
return failure(error, 'Token transfer failed or was rejected');
|
|
266
|
+
}
|
|
267
|
+
}),
|
|
268
|
+
write_contract: createTool('Write Contract', 'Send a transaction that calls a state-changing contract function. Simulates it first, then asks your wallet to approve. Costs gas.', z.object({
|
|
269
|
+
chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
|
|
270
|
+
contractAddress: z.string().describe('Contract address'),
|
|
271
|
+
functionAbi: z.string().describe('Function ABI definition (e.g., "function transfer(address to, uint256 amount)")'),
|
|
272
|
+
args: z
|
|
273
|
+
.array(z.union([
|
|
274
|
+
z.string(),
|
|
275
|
+
// JSON numbers past 2^53 arrive already rounded, so signing one would send a different value.
|
|
276
|
+
z.number().refine(Number.isSafeInteger, {
|
|
277
|
+
message: 'Numbers must be integers within ±2^53-1. Pass large or exact values as strings, e.g. "1000000000000000000".'
|
|
278
|
+
}),
|
|
279
|
+
z.boolean()
|
|
280
|
+
]))
|
|
281
|
+
.optional()
|
|
282
|
+
.describe('Function arguments in order matching the ABI signature. Pass uint/int values as strings.'),
|
|
283
|
+
value: z.string().optional().describe('Optional native value to send with transaction (in ETH units, e.g., "0.1")'),
|
|
284
|
+
signWith: SignWithSchema,
|
|
285
|
+
account: AccountSchema
|
|
286
|
+
}), async (args, identity) => {
|
|
287
|
+
try {
|
|
288
|
+
const contractAddress = requireAddress('contract address', args.contractAddress);
|
|
289
|
+
const abiItem = parseAbiItem(args.functionAbi);
|
|
290
|
+
const data = encodeFunctionData({
|
|
291
|
+
abi: [abiItem],
|
|
292
|
+
functionName: abiItem.name,
|
|
293
|
+
args: convertArgumentsToTypes(args.args || [], abiItem.inputs)
|
|
294
|
+
});
|
|
295
|
+
const value = args.value ? `0x${parseUnits(args.value, 18).toString(16)}` : '0x0';
|
|
296
|
+
const outcome = await signingCall({ identity, signer: args.signWith, summary: `${abiItem.name}() on ${contractAddress} (${args.chain})` }, (progress) => requestSignature(args.chain, { to: contractAddress, data, value }, args.signWith, identity, args.account, progress));
|
|
297
|
+
if (!outcome.done)
|
|
298
|
+
return awaitingApproval(outcome.request);
|
|
299
|
+
const { txHash, preview, signedWith, receipt } = outcome.result;
|
|
300
|
+
return formatResponse({
|
|
301
|
+
...minedOutcome(receipt),
|
|
302
|
+
chain: args.chain,
|
|
303
|
+
transactionHash: txHash,
|
|
304
|
+
contractAddress,
|
|
305
|
+
functionName: abiItem.name,
|
|
306
|
+
signedWith,
|
|
307
|
+
preview: previewSummary(preview),
|
|
308
|
+
explorerUrl: explorerTxUrl(args.chain, txHash)
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
return failure(error, 'Contract call failed or was rejected');
|
|
313
|
+
}
|
|
314
|
+
}),
|
|
315
|
+
sign_message: createTool('Sign Message', 'Sign a message with your wallet, on whichever signer you choose.', z.object({
|
|
316
|
+
message: z.string().describe('Message to sign'),
|
|
317
|
+
signWith: SignWithSchema,
|
|
318
|
+
account: AccountSchema
|
|
319
|
+
}), async (args, identity) => {
|
|
320
|
+
try {
|
|
321
|
+
const sign = async (progress) => {
|
|
322
|
+
if (args.signWith === 'phone') {
|
|
323
|
+
const { phone, session, from } = await requirePhoneSession(identity, args.account);
|
|
324
|
+
// personal_sign is chain-agnostic, but the request still has to name a chain the session holds.
|
|
325
|
+
const chain = SUPPORTED_CHAINS.find((c) => session.chains.includes(getClientManager().getChainId(c)));
|
|
326
|
+
if (!chain)
|
|
327
|
+
throw new Error(`The paired wallet approved no chain this server knows: ${session.chains.join(', ')}.`);
|
|
328
|
+
return phone.request(chain, 'personal_sign', [toHex(args.message), from], {
|
|
329
|
+
identity,
|
|
330
|
+
account: args.account,
|
|
331
|
+
onWaiting: progress.waiting
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
const wallet = getWalletClient(identity);
|
|
335
|
+
await wallet.waitForSigner();
|
|
336
|
+
return wallet.request({
|
|
337
|
+
id: generateRequestId(),
|
|
338
|
+
type: 'sign_message',
|
|
339
|
+
chain: 'any',
|
|
340
|
+
// Hex on both signers: a wallet reads a raw "0x…" string as bytes, so the same text
|
|
341
|
+
// would otherwise sign differently depending on where it was approved.
|
|
342
|
+
data: { message: toHex(args.message) }
|
|
343
|
+
});
|
|
344
|
+
};
|
|
345
|
+
const outcome = await signingCall({ identity, signer: args.signWith, summary: `Sign the message "${args.message.slice(0, 60)}"` }, sign);
|
|
346
|
+
if (!outcome.done)
|
|
347
|
+
return awaitingApproval(outcome.request);
|
|
348
|
+
return formatResponse({
|
|
349
|
+
success: true,
|
|
350
|
+
message: args.message,
|
|
351
|
+
signature: outcome.result,
|
|
352
|
+
signedWith: args.signWith,
|
|
353
|
+
signatureType: 'personal_sign'
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
return failure(error, 'Message signing failed or was rejected');
|
|
358
|
+
}
|
|
359
|
+
})
|
|
360
|
+
};
|
|
361
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../src/tools/sign/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
pair_phone_wallet: {
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
schema: z.ZodObject<{
|
|
7
|
+
chains: z.ZodOptional<z.ZodArray<z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>, "many">>;
|
|
8
|
+
wallet: z.ZodOptional<z.ZodString>;
|
|
9
|
+
agent: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
wallet?: string | undefined;
|
|
12
|
+
chains?: ("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[] | undefined;
|
|
13
|
+
agent?: string | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
wallet?: string | undefined;
|
|
16
|
+
chains?: ("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[] | undefined;
|
|
17
|
+
agent?: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
handler: (args: {
|
|
20
|
+
wallet?: string | undefined;
|
|
21
|
+
chains?: ("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[] | undefined;
|
|
22
|
+
agent?: string | undefined;
|
|
23
|
+
}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
24
|
+
available: (() => boolean) | undefined;
|
|
25
|
+
};
|
|
26
|
+
disconnect_phone_wallet: {
|
|
27
|
+
title: string;
|
|
28
|
+
description: string;
|
|
29
|
+
schema: z.ZodObject<{
|
|
30
|
+
account: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
account?: string | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
account?: string | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
handler: (args: {
|
|
37
|
+
account?: string | undefined;
|
|
38
|
+
}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
39
|
+
available: (() => boolean) | undefined;
|
|
40
|
+
};
|
|
41
|
+
wallet_status: {
|
|
42
|
+
title: string;
|
|
43
|
+
description: string;
|
|
44
|
+
schema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
45
|
+
handler: (args: {}, identity: string) => Promise<import("../../types.js").ToolResult>;
|
|
46
|
+
available: (() => boolean) | undefined;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export default _default;
|
|
50
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/tools/sign/wallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBvB,wBAkMC"}
|