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.
Files changed (180) hide show
  1. package/CHANGELOG.md +182 -1
  2. package/README.md +76 -47
  3. package/dist/anvil.d.ts +17 -19
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/anvil.js +124 -228
  6. package/dist/anvil.js.map +1 -1
  7. package/dist/chain-meta.d.ts.map +1 -1
  8. package/dist/chain-meta.js +19 -8
  9. package/dist/chain-meta.js.map +1 -1
  10. package/dist/chains.d.ts +9 -1
  11. package/dist/chains.d.ts.map +1 -1
  12. package/dist/chains.js +11 -2
  13. package/dist/chains.js.map +1 -1
  14. package/dist/clear-signing.d.ts.map +1 -1
  15. package/dist/clear-signing.js +17 -6
  16. package/dist/clear-signing.js.map +1 -1
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js.map +1 -1
  19. package/dist/context.d.ts +22 -0
  20. package/dist/context.d.ts.map +1 -0
  21. package/dist/context.js +24 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/hosted.d.ts +12 -0
  24. package/dist/hosted.d.ts.map +1 -0
  25. package/dist/hosted.js +12 -0
  26. package/dist/hosted.js.map +1 -0
  27. package/dist/http-server.d.ts +13 -0
  28. package/dist/http-server.d.ts.map +1 -1
  29. package/dist/http-server.js +22 -7
  30. package/dist/http-server.js.map +1 -1
  31. package/dist/index.js +20 -12
  32. package/dist/index.js.map +1 -1
  33. package/dist/kv-storage.d.ts +2 -1
  34. package/dist/kv-storage.d.ts.map +1 -1
  35. package/dist/kv-storage.js +5 -2
  36. package/dist/kv-storage.js.map +1 -1
  37. package/dist/lib.d.ts +24 -0
  38. package/dist/lib.d.ts.map +1 -0
  39. package/dist/lib.js +23 -0
  40. package/dist/lib.js.map +1 -0
  41. package/dist/mcp-server.d.ts +4 -0
  42. package/dist/mcp-server.d.ts.map +1 -0
  43. package/dist/mcp-server.js +43 -0
  44. package/dist/mcp-server.js.map +1 -0
  45. package/dist/oauth.d.ts +57 -8
  46. package/dist/oauth.d.ts.map +1 -1
  47. package/dist/oauth.js +133 -63
  48. package/dist/oauth.js.map +1 -1
  49. package/dist/preview.d.ts +7 -0
  50. package/dist/preview.d.ts.map +1 -1
  51. package/dist/preview.js +21 -7
  52. package/dist/preview.js.map +1 -1
  53. package/dist/signing-requests.d.ts +81 -0
  54. package/dist/signing-requests.d.ts.map +1 -0
  55. package/dist/signing-requests.js +138 -0
  56. package/dist/signing-requests.js.map +1 -0
  57. package/dist/tools/index.d.ts +27 -1
  58. package/dist/tools/index.d.ts.map +1 -1
  59. package/dist/tools/index.js +50 -15
  60. package/dist/tools/index.js.map +1 -1
  61. package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +39 -30
  62. package/dist/tools/read/advanced.d.ts.map +1 -0
  63. package/dist/tools/{advanced.js → read/advanced.js} +53 -41
  64. package/dist/tools/read/advanced.js.map +1 -0
  65. package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
  66. package/dist/tools/read/balance.d.ts.map +1 -0
  67. package/dist/tools/{balance.js → read/balance.js} +18 -33
  68. package/dist/tools/read/balance.js.map +1 -0
  69. package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +20 -15
  70. package/dist/tools/read/contract-info.d.ts.map +1 -0
  71. package/dist/tools/{contract-info.js → read/contract-info.js} +54 -123
  72. package/dist/tools/read/contract-info.js.map +1 -0
  73. package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
  74. package/dist/tools/read/contract.d.ts.map +1 -0
  75. package/dist/tools/{contract.js → read/contract.js} +3 -2
  76. package/dist/tools/read/contract.js.map +1 -0
  77. package/dist/tools/read/ens.d.ts +104 -0
  78. package/dist/tools/read/ens.d.ts.map +1 -0
  79. package/dist/tools/{ens.js → read/ens.js} +25 -33
  80. package/dist/tools/read/ens.js.map +1 -0
  81. package/dist/tools/read/gas.d.ts +171 -0
  82. package/dist/tools/read/gas.d.ts.map +1 -0
  83. package/dist/tools/read/gas.js +333 -0
  84. package/dist/tools/read/gas.js.map +1 -0
  85. package/dist/tools/read/logs.d.ts +101 -0
  86. package/dist/tools/read/logs.d.ts.map +1 -0
  87. package/dist/tools/read/logs.js +211 -0
  88. package/dist/tools/read/logs.js.map +1 -0
  89. package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
  90. package/dist/tools/read/signatures.d.ts.map +1 -0
  91. package/dist/tools/{signatures.js → read/signatures.js} +4 -3
  92. package/dist/tools/read/signatures.js.map +1 -0
  93. package/dist/tools/read/signing.d.ts +27 -0
  94. package/dist/tools/read/signing.d.ts.map +1 -0
  95. package/dist/tools/read/signing.js +81 -0
  96. package/dist/tools/read/signing.js.map +1 -0
  97. package/dist/tools/sign/errors.d.ts +9 -0
  98. package/dist/tools/sign/errors.d.ts.map +1 -0
  99. package/dist/tools/sign/errors.js +29 -0
  100. package/dist/tools/sign/errors.js.map +1 -0
  101. package/dist/tools/sign/transactions.d.ts +141 -0
  102. package/dist/tools/sign/transactions.d.ts.map +1 -0
  103. package/dist/tools/sign/transactions.js +361 -0
  104. package/dist/tools/sign/transactions.js.map +1 -0
  105. package/dist/tools/sign/wallet.d.ts +50 -0
  106. package/dist/tools/sign/wallet.d.ts.map +1 -0
  107. package/dist/tools/sign/wallet.js +180 -0
  108. package/dist/tools/sign/wallet.js.map +1 -0
  109. package/dist/utils.d.ts +23 -2
  110. package/dist/utils.d.ts.map +1 -1
  111. package/dist/utils.js +48 -3
  112. package/dist/utils.js.map +1 -1
  113. package/dist/wallet-client.d.ts +34 -4
  114. package/dist/wallet-client.d.ts.map +1 -1
  115. package/dist/wallet-client.js +106 -27
  116. package/dist/wallet-client.js.map +1 -1
  117. package/dist/walletconnect.d.ts +100 -13
  118. package/dist/walletconnect.d.ts.map +1 -1
  119. package/dist/walletconnect.js +215 -50
  120. package/dist/walletconnect.js.map +1 -1
  121. package/package.json +12 -9
  122. package/src/anvil.ts +150 -271
  123. package/src/chain-meta.ts +16 -7
  124. package/src/chains.ts +14 -2
  125. package/src/clear-signing.ts +15 -9
  126. package/src/client.ts +0 -1
  127. package/src/context.ts +27 -0
  128. package/src/hosted.ts +11 -0
  129. package/src/http-server.ts +38 -8
  130. package/src/index.ts +20 -13
  131. package/src/kv-storage.ts +6 -3
  132. package/src/lib.ts +24 -0
  133. package/src/mcp-server.ts +47 -0
  134. package/src/oauth.ts +181 -69
  135. package/src/preview.ts +28 -7
  136. package/src/signing-requests.ts +198 -0
  137. package/src/tools/index.ts +78 -16
  138. package/src/tools/{advanced.ts → read/advanced.ts} +74 -43
  139. package/src/tools/{balance.ts → read/balance.ts} +20 -35
  140. package/src/tools/{contract-info.ts → read/contract-info.ts} +66 -146
  141. package/src/tools/{contract.ts → read/contract.ts} +4 -3
  142. package/src/tools/{ens.ts → read/ens.ts} +27 -34
  143. package/src/tools/read/gas.ts +443 -0
  144. package/src/tools/read/logs.ts +281 -0
  145. package/src/tools/{signatures.ts → read/signatures.ts} +5 -5
  146. package/src/tools/read/signing.ts +92 -0
  147. package/src/tools/sign/errors.ts +28 -0
  148. package/src/tools/sign/transactions.ts +479 -0
  149. package/src/tools/sign/wallet.ts +216 -0
  150. package/src/utils.ts +52 -3
  151. package/src/wallet-client.ts +107 -24
  152. package/src/walletconnect.ts +250 -48
  153. package/dist/tools/advanced.d.ts.map +0 -1
  154. package/dist/tools/advanced.js.map +0 -1
  155. package/dist/tools/balance.d.ts.map +0 -1
  156. package/dist/tools/balance.js.map +0 -1
  157. package/dist/tools/contract-info.d.ts.map +0 -1
  158. package/dist/tools/contract-info.js.map +0 -1
  159. package/dist/tools/contract.d.ts.map +0 -1
  160. package/dist/tools/contract.js.map +0 -1
  161. package/dist/tools/ens.d.ts +0 -119
  162. package/dist/tools/ens.d.ts.map +0 -1
  163. package/dist/tools/ens.js.map +0 -1
  164. package/dist/tools/gas.d.ts +0 -99
  165. package/dist/tools/gas.d.ts.map +0 -1
  166. package/dist/tools/gas.js +0 -181
  167. package/dist/tools/gas.js.map +0 -1
  168. package/dist/tools/logs.d.ts +0 -39
  169. package/dist/tools/logs.d.ts.map +0 -1
  170. package/dist/tools/logs.js +0 -230
  171. package/dist/tools/logs.js.map +0 -1
  172. package/dist/tools/signatures.d.ts.map +0 -1
  173. package/dist/tools/signatures.js.map +0 -1
  174. package/dist/tools/transactions.d.ts +0 -155
  175. package/dist/tools/transactions.d.ts.map +0 -1
  176. package/dist/tools/transactions.js +0 -365
  177. package/dist/tools/transactions.js.map +0 -1
  178. package/src/tools/gas.ts +0 -219
  179. package/src/tools/logs.ts +0 -293
  180. 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"}