safehands-pharos 1.3.0 → 1.4.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 (159) hide show
  1. package/.env.example +64 -26
  2. package/README.md +333 -445
  3. package/dist/cli.d.ts +5 -5
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +124 -98
  6. package/dist/cli.js.map +1 -1
  7. package/dist/demo.d.ts +1 -1
  8. package/dist/demo.js +171 -171
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.js +138 -85
  11. package/dist/index.js.map +1 -1
  12. package/dist/init.d.ts +1 -1
  13. package/dist/init.js +65 -65
  14. package/dist/lib/auditLog.d.ts +9 -0
  15. package/dist/lib/auditLog.d.ts.map +1 -0
  16. package/dist/lib/auditLog.js +30 -0
  17. package/dist/lib/auditLog.js.map +1 -0
  18. package/dist/lib/constants.d.ts +291 -291
  19. package/dist/lib/constants.js +292 -292
  20. package/dist/lib/dodoApi.d.ts +78 -70
  21. package/dist/lib/dodoApi.d.ts.map +1 -1
  22. package/dist/lib/dodoApi.js +196 -178
  23. package/dist/lib/dodoApi.js.map +1 -1
  24. package/dist/lib/http.d.ts +14 -14
  25. package/dist/lib/http.js +118 -118
  26. package/dist/lib/pharosClient.d.ts +58 -58
  27. package/dist/lib/pharosClient.d.ts.map +1 -1
  28. package/dist/lib/pharosClient.js +63 -53
  29. package/dist/lib/pharosClient.js.map +1 -1
  30. package/dist/lib/policy/actionPolicyEngine.d.ts +53 -53
  31. package/dist/lib/policy/actionPolicyEngine.js +212 -212
  32. package/dist/lib/riskEngine.d.ts +26 -26
  33. package/dist/lib/riskEngine.js +283 -283
  34. package/dist/lib/signer/index.d.ts +24 -24
  35. package/dist/lib/signer/index.d.ts.map +1 -1
  36. package/dist/lib/signer/index.js +88 -89
  37. package/dist/lib/signer/index.js.map +1 -1
  38. package/dist/lib/spendAccumulator.d.ts +10 -0
  39. package/dist/lib/spendAccumulator.d.ts.map +1 -0
  40. package/dist/lib/spendAccumulator.js +54 -0
  41. package/dist/lib/spendAccumulator.js.map +1 -0
  42. package/dist/lib/testDodoLive.d.ts +1 -1
  43. package/dist/lib/testDodoLive.js +104 -104
  44. package/dist/lib/testLiveSafehands.d.ts +1 -1
  45. package/dist/lib/testLiveSafehands.js +92 -92
  46. package/dist/lib/testRpc.d.ts +1 -1
  47. package/dist/lib/testRpc.js +29 -29
  48. package/dist/lib/testRpcLive.d.ts +1 -1
  49. package/dist/lib/testRpcLive.js +88 -88
  50. package/dist/lib/testTools.d.ts +1 -1
  51. package/dist/lib/testTools.js +397 -397
  52. package/dist/lib/testX402Live.d.ts +1 -1
  53. package/dist/lib/testX402Live.js +159 -159
  54. package/dist/lib/toolResponse.d.ts +25 -25
  55. package/dist/lib/toolResponse.js +53 -53
  56. package/dist/lib/wallet/index.d.ts +37 -18
  57. package/dist/lib/wallet/index.d.ts.map +1 -1
  58. package/dist/lib/wallet/index.js +128 -70
  59. package/dist/lib/wallet/index.js.map +1 -1
  60. package/dist/scripts/checkDeploy.d.ts +1 -1
  61. package/dist/scripts/checkDeploy.js +24 -24
  62. package/dist/scripts/deployRegistry.d.ts +1 -1
  63. package/dist/scripts/deployRegistry.js +100 -100
  64. package/dist/scripts/testRegistry.d.ts +1 -1
  65. package/dist/scripts/testRegistry.js +43 -43
  66. package/dist/tools/approveToken.d.ts +45 -46
  67. package/dist/tools/approveToken.d.ts.map +1 -1
  68. package/dist/tools/approveToken.js +85 -83
  69. package/dist/tools/approveToken.js.map +1 -1
  70. package/dist/tools/assessRisk.d.ts +79 -79
  71. package/dist/tools/assessRisk.d.ts.map +1 -1
  72. package/dist/tools/assessRisk.js +104 -93
  73. package/dist/tools/assessRisk.js.map +1 -1
  74. package/dist/tools/checkAllowance.d.ts +43 -36
  75. package/dist/tools/checkAllowance.d.ts.map +1 -1
  76. package/dist/tools/checkAllowance.js +56 -42
  77. package/dist/tools/checkAllowance.js.map +1 -1
  78. package/dist/tools/checkTokenSecurity.d.ts +46 -46
  79. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  80. package/dist/tools/checkTokenSecurity.js +95 -88
  81. package/dist/tools/checkTokenSecurity.js.map +1 -1
  82. package/dist/tools/createAgentWallet.d.ts +26 -26
  83. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  84. package/dist/tools/createAgentWallet.js +58 -59
  85. package/dist/tools/createAgentWallet.js.map +1 -1
  86. package/dist/tools/estimateGas.d.ts +79 -79
  87. package/dist/tools/estimateGas.js +124 -124
  88. package/dist/tools/executeSwap.d.ts +61 -59
  89. package/dist/tools/executeSwap.d.ts.map +1 -1
  90. package/dist/tools/executeSwap.js +141 -129
  91. package/dist/tools/executeSwap.js.map +1 -1
  92. package/dist/tools/explainRisk.d.ts +29 -29
  93. package/dist/tools/explainRisk.js +32 -32
  94. package/dist/tools/getAgentWallet.d.ts +21 -21
  95. package/dist/tools/getAgentWallet.js +27 -27
  96. package/dist/tools/getAgentWalletBalance.d.ts +11 -11
  97. package/dist/tools/getAgentWalletBalance.js +70 -70
  98. package/dist/tools/getExecutionHistory.d.ts +49 -51
  99. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  100. package/dist/tools/getExecutionHistory.js +154 -93
  101. package/dist/tools/getExecutionHistory.js.map +1 -1
  102. package/dist/tools/getGasPrice.d.ts +43 -43
  103. package/dist/tools/getGasPrice.js +59 -59
  104. package/dist/tools/getPoolInfo.d.ts +75 -75
  105. package/dist/tools/getPoolInfo.js +137 -137
  106. package/dist/tools/getTokenPrice.d.ts +113 -113
  107. package/dist/tools/getTokenPrice.js +117 -117
  108. package/dist/tools/getTransactionStatus.d.ts +43 -57
  109. package/dist/tools/getTransactionStatus.d.ts.map +1 -1
  110. package/dist/tools/getTransactionStatus.js +59 -67
  111. package/dist/tools/getTransactionStatus.js.map +1 -1
  112. package/dist/tools/getWalletBalance.d.ts +68 -68
  113. package/dist/tools/getWalletBalance.js +87 -87
  114. package/dist/tools/publishRiskScore.d.ts +63 -63
  115. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  116. package/dist/tools/publishRiskScore.js +88 -85
  117. package/dist/tools/publishRiskScore.js.map +1 -1
  118. package/dist/tools/queryRiskRegistry.d.ts +38 -48
  119. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  120. package/dist/tools/queryRiskRegistry.js +55 -60
  121. package/dist/tools/queryRiskRegistry.js.map +1 -1
  122. package/dist/tools/safehandsPreflightCheck.d.ts +77 -77
  123. package/dist/tools/safehandsPreflightCheck.js +47 -47
  124. package/dist/tools/safehandsRiskReport.d.ts +81 -81
  125. package/dist/tools/safehandsRiskReport.js +28 -28
  126. package/dist/tools/safehandsSafeExecute.d.ts +20 -20
  127. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  128. package/dist/tools/safehandsSafeExecute.js +81 -75
  129. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  130. package/dist/tools/safehandsWalletHealth.d.ts +14 -14
  131. package/dist/tools/safehandsWalletHealth.js +103 -103
  132. package/dist/tools/safehandsX402Preflight.d.ts +26 -26
  133. package/dist/tools/safehandsX402Preflight.js +65 -65
  134. package/dist/tools/sendPayment.d.ts +57 -58
  135. package/dist/tools/sendPayment.d.ts.map +1 -1
  136. package/dist/tools/sendPayment.js +117 -108
  137. package/dist/tools/sendPayment.js.map +1 -1
  138. package/dist/tools/simulateTransaction.d.ts +60 -81
  139. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  140. package/dist/tools/simulateTransaction.js +83 -88
  141. package/dist/tools/simulateTransaction.js.map +1 -1
  142. package/dist/tools/tokenRegistryStatus.d.ts +26 -26
  143. package/dist/tools/tokenRegistryStatus.js +96 -96
  144. package/dist/tools/x402PayAndFetch.d.ts +81 -81
  145. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  146. package/dist/tools/x402PayAndFetch.js +152 -149
  147. package/dist/tools/x402PayAndFetch.js.map +1 -1
  148. package/dist/x402Server.d.ts +1 -1
  149. package/dist/x402Server.js +252 -252
  150. package/examples/dashboard/index.html +337 -0
  151. package/package.json +83 -84
  152. package/.agents/skill/safehands/SKILL.md +0 -212
  153. package/.agents/skill/safehands/assets/networks.json +0 -24
  154. package/.agents/skill/safehands/assets/tokens.json +0 -66
  155. package/.agents/wallets.json +0 -20
  156. package/docs/reports/OFFICIAL_DOCS_ALIGNMENT_REPORT.md +0 -137
  157. package/docs/reports/final_audit_report.md +0 -307
  158. package/docs/reports/live_verification_report.md +0 -147
  159. package/docs/reports/pharos_skill_engine_alignment_report.md +0 -85
@@ -1,71 +1,71 @@
1
- // ─── get_agent_wallet_balance ───────────────────────────────────────────
2
- // Returns PHRS + token balances for a managed agent wallet.
3
- // ────────────────────────────────────────────────────────────────────────
4
- import { z } from "zod";
5
- import { ok, fail, classifyExternalError } from "../lib/toolResponse.js";
6
- import { walletStore } from "../lib/wallet/index.js";
7
- import { publicClient } from "../lib/pharosClient.js";
8
- import { TOKEN_REGISTRY } from "../lib/constants.js";
9
- import { formatUnits } from "viem";
10
- export const getAgentWalletBalanceSchema = z.object({
11
- agentId: z.string().min(1).max(64).describe("Agent wallet identifier"),
12
- });
13
- const ERC20_ABI = [
14
- {
15
- name: "balanceOf",
16
- type: "function",
17
- stateMutability: "view",
18
- inputs: [{ name: "account", type: "address" }],
19
- outputs: [{ name: "", type: "uint256" }],
20
- },
21
- ];
22
- export async function handleGetAgentWalletBalance(params) {
23
- const { agentId } = params;
24
- const wallet = await walletStore.get(agentId);
25
- if (!wallet) {
26
- return fail("WALLET_NOT_FOUND", `No wallet found for agentId '${agentId}'. Use create_agent_wallet to create one.`, false, "wallet_store");
27
- }
28
- const address = wallet.address;
29
- try {
30
- const [phrsRaw, usdcRaw, usdtRaw] = await Promise.all([
31
- publicClient.getBalance({ address }),
32
- publicClient.readContract({
33
- address: TOKEN_REGISTRY.USDC.address,
34
- abi: ERC20_ABI,
35
- functionName: "balanceOf",
36
- args: [address],
37
- }),
38
- publicClient.readContract({
39
- address: TOKEN_REGISTRY.USDT.address,
40
- abi: ERC20_ABI,
41
- functionName: "balanceOf",
42
- args: [address],
43
- }),
44
- ]);
45
- const phrs = formatUnits(phrsRaw, 18);
46
- const usdc = formatUnits(usdcRaw, 6);
47
- const usdt = formatUnits(usdtRaw, 6);
48
- const isFunded = parseFloat(phrs) > 0;
49
- return ok({
50
- agentId,
51
- address,
52
- environment: wallet.environment,
53
- chainId: wallet.chainId,
54
- isMainnet: false,
55
- explorerUrl: `https://atlantic.pharosscan.xyz/address/${address}`,
56
- balances: {
57
- PHRS: { value: phrs, unit: "PHRS", decimals: 18 },
58
- USDC: { value: usdc, unit: "USDC", decimals: 6 },
59
- USDT: { value: usdt, unit: "USDT", decimals: 6 },
60
- },
61
- isFunded,
62
- fundingInstructions: isFunded
63
- ? null
64
- : `Wallet is unfunded. Get testnet PHRS from https://testnet.pharosnetwork.xyz/ — wallet address: ${address}`,
65
- });
66
- }
67
- catch (err) {
68
- return classifyExternalError("pharos_rpc", err);
69
- }
70
- }
1
+ // ─── get_agent_wallet_balance ───────────────────────────────────────────
2
+ // Returns PHRS + token balances for a managed agent wallet.
3
+ // ────────────────────────────────────────────────────────────────────────
4
+ import { z } from "zod";
5
+ import { ok, fail, classifyExternalError } from "../lib/toolResponse.js";
6
+ import { walletStore } from "../lib/wallet/index.js";
7
+ import { publicClient } from "../lib/pharosClient.js";
8
+ import { TOKEN_REGISTRY } from "../lib/constants.js";
9
+ import { formatUnits } from "viem";
10
+ export const getAgentWalletBalanceSchema = z.object({
11
+ agentId: z.string().min(1).max(64).describe("Agent wallet identifier"),
12
+ });
13
+ const ERC20_ABI = [
14
+ {
15
+ name: "balanceOf",
16
+ type: "function",
17
+ stateMutability: "view",
18
+ inputs: [{ name: "account", type: "address" }],
19
+ outputs: [{ name: "", type: "uint256" }],
20
+ },
21
+ ];
22
+ export async function handleGetAgentWalletBalance(params) {
23
+ const { agentId } = params;
24
+ const wallet = await walletStore.get(agentId);
25
+ if (!wallet) {
26
+ return fail("WALLET_NOT_FOUND", `No wallet found for agentId '${agentId}'. Use create_agent_wallet to create one.`, false, "wallet_store");
27
+ }
28
+ const address = wallet.address;
29
+ try {
30
+ const [phrsRaw, usdcRaw, usdtRaw] = await Promise.all([
31
+ publicClient.getBalance({ address }),
32
+ publicClient.readContract({
33
+ address: TOKEN_REGISTRY.USDC.address,
34
+ abi: ERC20_ABI,
35
+ functionName: "balanceOf",
36
+ args: [address],
37
+ }),
38
+ publicClient.readContract({
39
+ address: TOKEN_REGISTRY.USDT.address,
40
+ abi: ERC20_ABI,
41
+ functionName: "balanceOf",
42
+ args: [address],
43
+ }),
44
+ ]);
45
+ const phrs = formatUnits(phrsRaw, 18);
46
+ const usdc = formatUnits(usdcRaw, 6);
47
+ const usdt = formatUnits(usdtRaw, 6);
48
+ const isFunded = parseFloat(phrs) > 0;
49
+ return ok({
50
+ agentId,
51
+ address,
52
+ environment: wallet.environment,
53
+ chainId: wallet.chainId,
54
+ isMainnet: false,
55
+ explorerUrl: `https://atlantic.pharosscan.xyz/address/${address}`,
56
+ balances: {
57
+ PHRS: { value: phrs, unit: "PHRS", decimals: 18 },
58
+ USDC: { value: usdc, unit: "USDC", decimals: 6 },
59
+ USDT: { value: usdt, unit: "USDT", decimals: 6 },
60
+ },
61
+ isFunded,
62
+ fundingInstructions: isFunded
63
+ ? null
64
+ : `Wallet is unfunded. Get testnet PHRS from https://testnet.pharosnetwork.xyz/ — wallet address: ${address}`,
65
+ });
66
+ }
67
+ catch (err) {
68
+ return classifyExternalError("pharos_rpc", err);
69
+ }
70
+ }
71
71
  //# sourceMappingURL=getAgentWalletBalance.js.map
@@ -1,52 +1,50 @@
1
- import { z } from "zod";
2
- export declare const getExecutionHistorySchema: z.ZodObject<{
3
- walletAddress: z.ZodString;
4
- limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
- filter: z.ZodDefault<z.ZodOptional<z.ZodEnum<["swap", "transfer", "all"]>>>;
6
- }, "strip", z.ZodTypeAny, {
7
- filter: "transfer" | "all" | "swap";
8
- walletAddress: string;
9
- limit: number;
10
- }, {
11
- walletAddress: string;
12
- filter?: "transfer" | "all" | "swap" | undefined;
13
- limit?: number | undefined;
14
- }>;
15
- export type GetExecutionHistoryInput = z.infer<typeof getExecutionHistorySchema>;
16
- export declare const getExecutionHistoryTool: {
17
- name: string;
18
- description: string;
19
- inputSchema: z.ZodObject<{
20
- walletAddress: z.ZodString;
21
- limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
22
- filter: z.ZodDefault<z.ZodOptional<z.ZodEnum<["swap", "transfer", "all"]>>>;
23
- }, "strip", z.ZodTypeAny, {
24
- filter: "transfer" | "all" | "swap";
25
- walletAddress: string;
26
- limit: number;
27
- }, {
28
- walletAddress: string;
29
- filter?: "transfer" | "all" | "swap" | undefined;
30
- limit?: number | undefined;
31
- }>;
32
- };
33
- export declare function handleGetExecutionHistory(input: GetExecutionHistoryInput): Promise<{
34
- walletAddress: string;
35
- totalFetched: number;
36
- history: never[];
37
- error: string;
38
- } | {
39
- walletAddress: string;
40
- totalFetched: number;
41
- history: {
42
- txHash: string;
43
- explorerUrl: string;
44
- type: "swap" | "transfer" | "other";
45
- timestamp: string;
46
- status: "success" | "failed";
47
- value: string;
48
- details: string;
49
- }[];
50
- error?: undefined;
51
- }>;
1
+ import { z } from "zod";
2
+ export declare const getExecutionHistorySchema: z.ZodObject<{
3
+ walletAddress: z.ZodString;
4
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
+ filter: z.ZodDefault<z.ZodOptional<z.ZodEnum<["swap", "transfer", "all"]>>>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ filter: "transfer" | "all" | "swap";
8
+ walletAddress: string;
9
+ limit: number;
10
+ }, {
11
+ walletAddress: string;
12
+ filter?: "transfer" | "all" | "swap" | undefined;
13
+ limit?: number | undefined;
14
+ }>;
15
+ export type GetExecutionHistoryInput = z.infer<typeof getExecutionHistorySchema>;
16
+ export declare const getExecutionHistoryTool: {
17
+ name: string;
18
+ description: string;
19
+ inputSchema: z.ZodObject<{
20
+ walletAddress: z.ZodString;
21
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
22
+ filter: z.ZodDefault<z.ZodOptional<z.ZodEnum<["swap", "transfer", "all"]>>>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ filter: "transfer" | "all" | "swap";
25
+ walletAddress: string;
26
+ limit: number;
27
+ }, {
28
+ walletAddress: string;
29
+ filter?: "transfer" | "all" | "swap" | undefined;
30
+ limit?: number | undefined;
31
+ }>;
32
+ };
33
+ interface HistoryEntry {
34
+ txHash: string;
35
+ explorerUrl: string;
36
+ type: "swap" | "transfer" | "other";
37
+ timestamp: string;
38
+ status: "success" | "failed" | "unknown";
39
+ value: string;
40
+ details: string;
41
+ blockNumber: string;
42
+ }
43
+ export declare function handleGetExecutionHistory(input: GetExecutionHistoryInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
44
+ walletAddress: string;
45
+ totalFetched: number;
46
+ history: HistoryEntry[];
47
+ note: string;
48
+ }>>;
49
+ export {};
52
50
  //# sourceMappingURL=getExecutionHistory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExecutionHistory.d.ts","sourceRoot":"","sources":["../../src/tools/getExecutionHistory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;CAInC,CAAC;AAEF,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB;;;;;;;;;gBAEnE,MAAM;qBACD,MAAM;cACb,MAAM,GAAG,UAAU,GAAG,OAAO;mBACxB,MAAM;gBACT,SAAS,GAAG,QAAQ;eACrB,MAAM;iBACJ,MAAM;;;GAiFlB"}
1
+ {"version":3,"file":"getExecutionHistory.d.ts","sourceRoot":"","sources":["../../src/tools/getExecutionHistory.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAgBjF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;CAKnC,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB;;;;;IA4I9E"}
@@ -1,94 +1,155 @@
1
- // ─── Tool: get_execution_history ───────────────────────────────────────
2
- import { z } from "zod";
3
- import { publicClient, getExplorerUrl } from "../lib/pharosClient.js";
4
- import { DODO_ROUTE_PROXY_ADDRESS } from "../lib/constants.js";
5
- import { formatEther } from "viem";
6
- export const getExecutionHistorySchema = z.object({
7
- walletAddress: z.string(),
8
- limit: z.number().optional().default(20),
9
- filter: z.enum(["swap", "transfer", "all"]).optional().default("all"),
10
- });
11
- export const getExecutionHistoryTool = {
12
- name: "get_execution_history",
13
- description: "Pull on-chain transaction history for a wallet on Pharos. Filters by swap, transfer, or all.",
14
- inputSchema: getExecutionHistorySchema,
15
- };
16
- export async function handleGetExecutionHistory(input) {
17
- const history = [];
18
- try {
19
- const blockNumber = await publicClient.getBlockNumber();
20
- // Scan last ~500 blocks for transactions
21
- const fromBlock = blockNumber > 500n ? blockNumber - 500n : 0n;
22
- // Use eth_getLogs to find transactions involving the wallet
23
- // For a more complete solution, we'd use an indexer. Here we check recent blocks.
24
- const batchSize = 50;
25
- let found = 0;
26
- for (let b = blockNumber; b > fromBlock && found < input.limit; b -= 1n) {
27
- try {
28
- const block = await publicClient.getBlock({
29
- blockNumber: b,
30
- includeTransactions: true,
31
- });
32
- for (const tx of block.transactions) {
33
- if (found >= input.limit)
34
- break;
35
- if (typeof tx === "string")
36
- continue;
37
- const isFrom = tx.from.toLowerCase() === input.walletAddress.toLowerCase();
38
- const isTo = tx.to?.toLowerCase() === input.walletAddress.toLowerCase();
39
- if (!isFrom && !isTo)
40
- continue;
41
- const isDodoSwap = tx.to?.toLowerCase() === DODO_ROUTE_PROXY_ADDRESS.toLowerCase();
42
- const txType = isDodoSwap
43
- ? "swap"
44
- : tx.value > 0n
45
- ? "transfer"
46
- : "other";
47
- if (input.filter !== "all" && txType !== input.filter)
48
- continue;
49
- // Get receipt for status
50
- let status = "success";
51
- try {
52
- const receipt = await publicClient.getTransactionReceipt({ hash: tx.hash });
53
- status = receipt.status === "success" ? "success" : "failed";
54
- }
55
- catch {
56
- // skip
57
- }
58
- history.push({
59
- txHash: tx.hash,
60
- explorerUrl: getExplorerUrl(tx.hash),
61
- type: txType,
62
- timestamp: new Date(Number(block.timestamp) * 1000).toISOString(),
63
- status,
64
- value: formatEther(tx.value),
65
- details: isDodoSwap
66
- ? `Swap via FaroSwap (DODO)`
67
- : isFrom
68
- ? `Sent ${formatEther(tx.value)} PHRS to ${tx.to}`
69
- : `Received ${formatEther(tx.value)} PHRS from ${tx.from}`,
70
- });
71
- found++;
72
- }
73
- }
74
- catch {
75
- // skip blocks that fail to load
76
- continue;
77
- }
78
- }
79
- }
80
- catch (err) {
81
- return {
82
- walletAddress: input.walletAddress,
83
- totalFetched: 0,
84
- history: [],
85
- error: `Failed to fetch history: ${err.message}`,
86
- };
87
- }
88
- return {
89
- walletAddress: input.walletAddress,
90
- totalFetched: history.length,
91
- history,
92
- };
93
- }
1
+ // ─── Tool: get_execution_history ───────────────────────────────────────
2
+ // Uses eth_getLogs for ERC-20 Transfer events (fast, covers token swaps)
3
+ // and a parallelised block scan of the last 100 blocks for native PHRS transfers.
4
+ // Prior approach scanned 500 blocks sequentially — 500+ RPC calls, always timed out.
5
+ // ────────────────────────────────────────────────────────────────────────
6
+ import { z } from "zod";
7
+ import { publicClient, getExplorerUrl } from "../lib/pharosClient.js";
8
+ import { DODO_ROUTE_PROXY_ADDRESS, USDC_ADDRESS, USDT_ADDRESS, WBTC_ADDRESS, WETH_ADDRESS, WPHRS_ADDRESS, CIRCLE_USDC_ADDRESS, } from "../lib/constants.js";
9
+ import { formatEther, parseAbiItem } from "viem";
10
+ import { ok, fail } from "../lib/toolResponse.js";
11
+ const TRANSFER_EVENT = parseAbiItem("event Transfer(address indexed from, address indexed to, uint256 value)");
12
+ export const getExecutionHistorySchema = z.object({
13
+ walletAddress: z.string(),
14
+ limit: z.number().optional().default(20),
15
+ filter: z.enum(["swap", "transfer", "all"]).optional().default("all"),
16
+ });
17
+ // All known token addresses to scan for Transfer events (mutable array for viem compatibility)
18
+ const KNOWN_TOKEN_ADDRESSES = [
19
+ USDC_ADDRESS,
20
+ USDT_ADDRESS,
21
+ WBTC_ADDRESS,
22
+ WETH_ADDRESS,
23
+ WPHRS_ADDRESS,
24
+ CIRCLE_USDC_ADDRESS,
25
+ ];
26
+ const ERC20_LOG_RANGE = 10000n; // blocks to scan for ERC-20 events
27
+ const NATIVE_SCAN_RANGE = 100n; // blocks for native PHRS scan
28
+ const NATIVE_BATCH_SIZE = 10; // parallel block fetches per batch
29
+ export const getExecutionHistoryTool = {
30
+ name: "get_execution_history",
31
+ description: "Pull on-chain transaction history for a wallet. Uses eth_getLogs for ERC-20 transfers and parallel block scan for native PHRS. Filters by swap, transfer, or all.",
32
+ inputSchema: getExecutionHistorySchema,
33
+ };
34
+ export async function handleGetExecutionHistory(input) {
35
+ const seen = new Set();
36
+ const history = [];
37
+ try {
38
+ const blockNumber = await publicClient.getBlockNumber();
39
+ const erc20FromBlock = blockNumber > ERC20_LOG_RANGE ? blockNumber - ERC20_LOG_RANGE : 0n;
40
+ const nativeFromBlock = blockNumber > NATIVE_SCAN_RANGE ? blockNumber - NATIVE_SCAN_RANGE : 0n;
41
+ const walletAddr = input.walletAddress;
42
+ // ── ERC-20 Transfer logs ─────────────────────────────────────────────
43
+ // Two queries: wallet as sender (from) and wallet as receiver (to)
44
+ const empty = [];
45
+ const [sentLogs, receivedLogs] = await Promise.all([
46
+ publicClient.getLogs({
47
+ fromBlock: erc20FromBlock,
48
+ toBlock: blockNumber,
49
+ address: KNOWN_TOKEN_ADDRESSES,
50
+ event: TRANSFER_EVENT,
51
+ args: { from: walletAddr },
52
+ strict: true,
53
+ }).catch(() => empty),
54
+ publicClient.getLogs({
55
+ fromBlock: erc20FromBlock,
56
+ toBlock: blockNumber,
57
+ address: KNOWN_TOKEN_ADDRESSES,
58
+ event: TRANSFER_EVENT,
59
+ args: { to: walletAddr },
60
+ strict: true,
61
+ }).catch(() => empty),
62
+ ]);
63
+ const allLogs = [...sentLogs, ...receivedLogs];
64
+ // Resolve block timestamps in bulk for unique block numbers in logs
65
+ const uniqueBlocks = [...new Set(allLogs.map((l) => l.blockNumber))];
66
+ const blockTimestampMap = new Map();
67
+ for (let i = 0; i < uniqueBlocks.length; i += NATIVE_BATCH_SIZE) {
68
+ const batch = uniqueBlocks.slice(i, i + NATIVE_BATCH_SIZE);
69
+ const blocks = await Promise.all(batch.map((bn) => publicClient.getBlock({ blockNumber: bn }).catch(() => null)));
70
+ for (const block of blocks) {
71
+ if (block) {
72
+ blockTimestampMap.set(block.number, new Date(Number(block.timestamp) * 1000).toISOString());
73
+ }
74
+ }
75
+ }
76
+ for (const log of allLogs) {
77
+ if (history.length >= input.limit)
78
+ break;
79
+ if (!log.transactionHash || seen.has(log.transactionHash))
80
+ continue;
81
+ const isDodoSwap = log.address.toLowerCase() === DODO_ROUTE_PROXY_ADDRESS.toLowerCase()
82
+ || sentLogs.some((l) => l.transactionHash === log.transactionHash && l.address.toLowerCase() === DODO_ROUTE_PROXY_ADDRESS.toLowerCase())
83
+ || receivedLogs.some((l) => l.transactionHash === log.transactionHash && l.address.toLowerCase() === DODO_ROUTE_PROXY_ADDRESS.toLowerCase());
84
+ const txType = isDodoSwap ? "swap" : "transfer";
85
+ if (input.filter !== "all" && txType !== input.filter)
86
+ continue;
87
+ seen.add(log.transactionHash);
88
+ history.push({
89
+ txHash: log.transactionHash,
90
+ explorerUrl: getExplorerUrl(log.transactionHash),
91
+ type: txType,
92
+ timestamp: blockTimestampMap.get(log.blockNumber) ?? "unknown",
93
+ status: "unknown", // receipt not fetched per-log to avoid N+1
94
+ value: "0",
95
+ details: `ERC-20 Transfer on block ${log.blockNumber.toString()}`,
96
+ blockNumber: log.blockNumber.toString(),
97
+ });
98
+ }
99
+ // ── Native PHRS transfers — parallel block scan (last 100 blocks) ───
100
+ if (input.filter !== "swap" && history.length < input.limit) {
101
+ const blockNums = [];
102
+ for (let b = blockNumber; b > nativeFromBlock; b--) {
103
+ blockNums.push(b);
104
+ }
105
+ for (let i = 0; i < blockNums.length && history.length < input.limit; i += NATIVE_BATCH_SIZE) {
106
+ const batch = blockNums.slice(i, i + NATIVE_BATCH_SIZE);
107
+ const blocks = await Promise.all(batch.map((bn) => publicClient.getBlock({ blockNumber: bn, includeTransactions: true }).catch(() => null)));
108
+ for (const block of blocks) {
109
+ if (!block)
110
+ continue;
111
+ const ts = new Date(Number(block.timestamp) * 1000).toISOString();
112
+ for (const tx of block.transactions) {
113
+ if (history.length >= input.limit)
114
+ break;
115
+ if (typeof tx === "string")
116
+ continue;
117
+ if (tx.value === 0n)
118
+ continue; // no native transfer
119
+ const isFrom = tx.from.toLowerCase() === input.walletAddress.toLowerCase();
120
+ const isTo = tx.to?.toLowerCase() === input.walletAddress.toLowerCase();
121
+ if (!isFrom && !isTo)
122
+ continue;
123
+ if (seen.has(tx.hash))
124
+ continue;
125
+ seen.add(tx.hash);
126
+ history.push({
127
+ txHash: tx.hash,
128
+ explorerUrl: getExplorerUrl(tx.hash),
129
+ type: "transfer",
130
+ timestamp: ts,
131
+ status: "unknown",
132
+ value: formatEther(tx.value),
133
+ details: isFrom
134
+ ? `Sent ${formatEther(tx.value)} PHRS to ${tx.to}`
135
+ : `Received ${formatEther(tx.value)} PHRS from ${tx.from}`,
136
+ blockNumber: block.number.toString(),
137
+ });
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Sort descending by block number
143
+ history.sort((a, b) => Number(BigInt(b.blockNumber) - BigInt(a.blockNumber)));
144
+ }
145
+ catch (err) {
146
+ return fail("HISTORY_FETCH_FAILED", `Failed to fetch history: ${err.message}`, true, "get_execution_history");
147
+ }
148
+ return ok({
149
+ walletAddress: input.walletAddress,
150
+ totalFetched: history.length,
151
+ history,
152
+ note: "ERC-20 history covers last 10,000 blocks via eth_getLogs. Native PHRS transfers cover last 100 blocks via parallel block scan.",
153
+ });
154
+ }
94
155
  //# sourceMappingURL=getExecutionHistory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExecutionHistory.js","sourceRoot":"","sources":["../../src/tools/getExecutionHistory.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACtE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,8FAA8F;IAC3G,WAAW,EAAE,yBAAyB;CACvC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAA+B;IAC7E,MAAM,OAAO,GAQR,EAAE,CAAC;IAER,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QACxD,yCAAyC;QACzC,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/D,4DAA4D;QAC5D,kFAAkF;QAClF,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACxE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC;oBACxC,WAAW,EAAE,CAAC;oBACd,mBAAmB,EAAE,IAAI;iBAC1B,CAAC,CAAC;gBAEH,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;oBACpC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK;wBAAE,MAAM;oBAChC,IAAI,OAAO,EAAE,KAAK,QAAQ;wBAAE,SAAS;oBAErC,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;oBAC3E,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;oBAExE,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;wBAAE,SAAS;oBAE/B,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,wBAAwB,CAAC,WAAW,EAAE,CAAC;oBACnF,MAAM,MAAM,GAAkC,UAAU;wBACtD,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE;4BACb,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,OAAO,CAAC;oBAEd,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;wBAAE,SAAS;oBAEhE,yBAAyB;oBACzB,IAAI,MAAM,GAAyB,SAAS,CAAC;oBAC7C,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC5E,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC/D,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,EAAE,CAAC,IAAI;wBACf,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC;wBACpC,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;wBACjE,MAAM;wBACN,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC;wBAC5B,OAAO,EAAE,UAAU;4BACjB,CAAC,CAAC,0BAA0B;4BAC5B,CAAC,CAAC,MAAM;gCACN,CAAC,CAAC,QAAQ,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;gCAClD,CAAC,CAAC,YAAY,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE;qBAC/D,CAAC,CAAC;oBACH,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;gBAChC,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE;SAC5D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getExecutionHistory.js","sourceRoot":"","sources":["../../src/tools/getExecutionHistory.ts"],"names":[],"mappings":"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"}
@@ -1,44 +1,44 @@
1
- import { z } from "zod";
2
- export declare const getGasPriceSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
3
- export type GetGasPriceInput = z.input<typeof getGasPriceSchema>;
4
- export declare const getGasPriceTool: {
5
- name: string;
6
- description: string;
7
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
8
- };
9
- export declare function handleGetGasPrice(_raw: GetGasPriceInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
10
- gasPrice: {
11
- value: string;
12
- unit: string;
13
- };
14
- gasPriceWei: string;
15
- trend: "low" | "high" | "normal";
16
- recommendation: string;
17
- estimates: {
18
- nativeTransfer: {
19
- gas: {
20
- value: string;
21
- unit: string;
22
- };
23
- costPHRS: {
24
- value: string;
25
- unit: string;
26
- };
27
- };
28
- tokenSwap: {
29
- gas: {
30
- value: string;
31
- unit: string;
32
- };
33
- costPHRS: {
34
- value: string;
35
- unit: string;
36
- };
37
- };
38
- };
39
- chainId: number;
40
- environment: string;
41
- isMainnet: boolean;
42
- source: string;
43
- }>>;
1
+ import { z } from "zod";
2
+ export declare const getGasPriceSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
3
+ export type GetGasPriceInput = z.input<typeof getGasPriceSchema>;
4
+ export declare const getGasPriceTool: {
5
+ name: string;
6
+ description: string;
7
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
8
+ };
9
+ export declare function handleGetGasPrice(_raw: GetGasPriceInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
10
+ gasPrice: {
11
+ value: string;
12
+ unit: string;
13
+ };
14
+ gasPriceWei: string;
15
+ trend: "low" | "high" | "normal";
16
+ recommendation: string;
17
+ estimates: {
18
+ nativeTransfer: {
19
+ gas: {
20
+ value: string;
21
+ unit: string;
22
+ };
23
+ costPHRS: {
24
+ value: string;
25
+ unit: string;
26
+ };
27
+ };
28
+ tokenSwap: {
29
+ gas: {
30
+ value: string;
31
+ unit: string;
32
+ };
33
+ costPHRS: {
34
+ value: string;
35
+ unit: string;
36
+ };
37
+ };
38
+ };
39
+ chainId: number;
40
+ environment: string;
41
+ isMainnet: boolean;
42
+ source: string;
43
+ }>>;
44
44
  //# sourceMappingURL=getGasPrice.d.ts.map