safehands-pharos 1.3.0 → 1.5.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/.env.example +64 -26
- package/README.md +444 -445
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -8
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +208 -147
- package/dist/index.js.map +1 -1
- package/dist/lib/auditLog.d.ts +9 -0
- package/dist/lib/auditLog.d.ts.map +1 -0
- package/dist/lib/auditLog.js +30 -0
- package/dist/lib/auditLog.js.map +1 -0
- package/dist/lib/constants.d.ts +12 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +10 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +8 -0
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +22 -4
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/envLoader.d.ts +2 -0
- package/dist/lib/envLoader.d.ts.map +1 -0
- package/dist/lib/envLoader.js +44 -0
- package/dist/lib/envLoader.js.map +1 -0
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +13 -3
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +50 -45
- package/dist/lib/riskEngine.js.map +1 -1
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +3 -4
- package/dist/lib/signer/index.js.map +1 -1
- package/dist/lib/spendAccumulator.d.ts +10 -0
- package/dist/lib/spendAccumulator.d.ts.map +1 -0
- package/dist/lib/spendAccumulator.js +54 -0
- package/dist/lib/spendAccumulator.js.map +1 -0
- package/dist/lib/testRpc.d.ts +1 -1
- package/dist/lib/testRpc.js +29 -29
- package/dist/lib/testTools.d.ts +1 -1
- package/dist/lib/testTools.js +4 -5
- package/dist/lib/wallet/index.d.ts +19 -0
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +65 -7
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/tools/approveToken.d.ts +0 -1
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +3 -1
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +18 -7
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +9 -2
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +20 -6
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +7 -0
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +2 -0
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +30 -7
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +3 -1
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +13 -1
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +15 -17
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +125 -64
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +5 -19
- package/dist/tools/getTransactionStatus.d.ts.map +1 -1
- package/dist/tools/getTransactionStatus.js +10 -18
- package/dist/tools/getTransactionStatus.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +3 -0
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryRiskRegistry.d.ts +3 -13
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +6 -11
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +12 -6
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +0 -1
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +10 -1
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/simulateTransaction.d.ts +2 -23
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +10 -15
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +4 -1
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/x402Server.js +51 -3
- package/dist/x402Server.js.map +1 -1
- package/package.json +73 -84
- package/.agents/skill/safehands/SKILL.md +0 -212
- package/.agents/skill/safehands/assets/networks.json +0 -24
- package/.agents/skill/safehands/assets/tokens.json +0 -66
- package/.agents/wallets.json +0 -20
- package/docs/reports/OFFICIAL_DOCS_ALIGNMENT_REPORT.md +0 -137
- package/docs/reports/final_audit_report.md +0 -307
- package/docs/reports/live_verification_report.md +0 -147
- package/docs/reports/pharos_skill_engine_alignment_report.md +0 -85
- package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
- package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
- package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
- package/examples/pharos-skill-engine/references/safehands.md +0 -345
- package/examples/scenario-hack.ts +0 -38
- package/skill/SKILL.md +0 -133
- package/skill/assets/safehands/example-actions.json +0 -49
- package/skill/assets/safehands/policy-defaults.json +0 -11
- package/skill/references/safehands.md +0 -345
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTokenSecurity.js","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkTokenSecurity.js","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,8 @@ interface CreateAgentWalletData {
|
|
|
21
21
|
createdAt: string;
|
|
22
22
|
warning: string;
|
|
23
23
|
instructions: string;
|
|
24
|
+
riskRegistryAuthorized: boolean;
|
|
25
|
+
riskRegistryAuthTxHash: string | null;
|
|
24
26
|
}
|
|
25
27
|
export declare function handleCreateAgentWallet(params: CreateAgentWalletParams): Promise<ToolResponse<CreateAgentWalletData>>;
|
|
26
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAgentWallet.d.ts","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"createAgentWallet.d.ts","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKrE,eAAO,MAAM,uBAAuB;;;;;;;;;EAWlC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CA6E9C"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// ─── create_agent_wallet ────────────────────────────────────────────────
|
|
2
2
|
// Creates a new managed testnet agent wallet.
|
|
3
|
-
// Private key is
|
|
3
|
+
// Private key is AES-256-GCM encrypted before storage, never returned in response.
|
|
4
4
|
// ────────────────────────────────────────────────────────────────────────
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
7
7
|
import { ok, fail } from "../lib/toolResponse.js";
|
|
8
|
-
import { walletStore,
|
|
9
|
-
import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET } from "../lib/constants.js";
|
|
8
|
+
import { walletStore, encryptKey, usesPersistentWalletStore, getEffectiveEncryptionKey } from "../lib/wallet/index.js";
|
|
9
|
+
import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET, RISK_REGISTRY_ADDRESS, RISK_REGISTRY_ABI } from "../lib/constants.js";
|
|
10
|
+
import { createPharosWalletClientFromAccount } from "../lib/pharosClient.js";
|
|
10
11
|
export const createAgentWalletSchema = z.object({
|
|
11
12
|
agentId: z
|
|
12
13
|
.string()
|
|
@@ -32,9 +33,8 @@ export async function handleCreateAgentWallet(params) {
|
|
|
32
33
|
// Generate new wallet
|
|
33
34
|
const privateKey = generatePrivateKey();
|
|
34
35
|
const account = privateKeyToAccount(privateKey);
|
|
35
|
-
//
|
|
36
|
-
const
|
|
37
|
-
const encryptedKey = obfuscateKey(privateKey, encryptionKey);
|
|
36
|
+
// Encrypt key before storage (AES-256-GCM)
|
|
37
|
+
const encryptedKey = encryptKey(privateKey, getEffectiveEncryptionKey());
|
|
38
38
|
// Store wallet
|
|
39
39
|
await walletStore.set(agentId, {
|
|
40
40
|
agentId,
|
|
@@ -45,6 +45,27 @@ export async function handleCreateAgentWallet(params) {
|
|
|
45
45
|
isMainnet: false,
|
|
46
46
|
createdAt: new Date().toISOString(),
|
|
47
47
|
});
|
|
48
|
+
// Auto-authorize new wallet in RiskRegistry if deployer key is available
|
|
49
|
+
let riskRegistryAuthorized = false;
|
|
50
|
+
let riskRegistryAuthTxHash = null;
|
|
51
|
+
const deployerKey = process.env.PRIVATE_KEY;
|
|
52
|
+
if (deployerKey && process.env.WRITE_TOOLS_ENABLED === "true") {
|
|
53
|
+
try {
|
|
54
|
+
const deployerAccount = privateKeyToAccount(deployerKey);
|
|
55
|
+
const deployerWallet = createPharosWalletClientFromAccount(deployerAccount);
|
|
56
|
+
const txHash = await deployerWallet.writeContract({
|
|
57
|
+
address: RISK_REGISTRY_ADDRESS,
|
|
58
|
+
abi: RISK_REGISTRY_ABI,
|
|
59
|
+
functionName: "setAuthorizedAgent",
|
|
60
|
+
args: [account.address, true],
|
|
61
|
+
});
|
|
62
|
+
riskRegistryAuthorized = true;
|
|
63
|
+
riskRegistryAuthTxHash = txHash;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Authorization failed — wallet still created, just not authorized for publish
|
|
67
|
+
}
|
|
68
|
+
}
|
|
48
69
|
return ok({
|
|
49
70
|
agentId,
|
|
50
71
|
address: account.address,
|
|
@@ -53,8 +74,10 @@ export async function handleCreateAgentWallet(params) {
|
|
|
53
74
|
isMainnet: IS_MAINNET,
|
|
54
75
|
isTestnet: true,
|
|
55
76
|
createdAt: new Date().toISOString(),
|
|
56
|
-
warning: "This is a TESTNET wallet only. Never use for mainnet funds. Private key is
|
|
77
|
+
warning: "This is a TESTNET wallet only. Never use for mainnet funds. Private key is AES-256-GCM encrypted locally — testnet-grade, not KMS/Vault.",
|
|
57
78
|
instructions: `Fund this wallet with testnet PHRS from https://testnet.pharosnetwork.xyz/ before executing write operations. Set WRITE_TOOLS_ENABLED=true to enable transactions.`,
|
|
79
|
+
riskRegistryAuthorized,
|
|
80
|
+
riskRegistryAuthTxHash,
|
|
58
81
|
});
|
|
59
82
|
}
|
|
60
83
|
//# sourceMappingURL=createAgentWallet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAgentWallet.js","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8CAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"createAgentWallet.js","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,10 +43,12 @@ export declare const executeSwapTool: {
|
|
|
43
43
|
}>;
|
|
44
44
|
};
|
|
45
45
|
export declare function handleExecuteSwap(raw: ExecuteSwapInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
|
|
46
|
-
txSuccess: boolean;
|
|
47
46
|
txHash: `0x${string}`;
|
|
48
47
|
explorerUrl: string;
|
|
49
48
|
amountOut: string;
|
|
49
|
+
usedFromToken: string;
|
|
50
|
+
usedToToken: string;
|
|
51
|
+
wasSubstituted: boolean;
|
|
50
52
|
signerMode: import("../lib/signer/index.js").SignerMode;
|
|
51
53
|
walletAddress: `0x${string}`;
|
|
52
54
|
gasUsed: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeSwap.d.ts","sourceRoot":"","sources":["../../src/tools/executeSwap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"executeSwap.d.ts","sourceRoot":"","sources":["../../src/tools/executeSwap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CAI3B,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB;;;;;;;;;;;;;;;;IAgJ5D"}
|
|
@@ -7,6 +7,7 @@ import { fail, ok, classifyExternalError } from "../lib/toolResponse.js";
|
|
|
7
7
|
import { DODO_APPROVE_ADDRESS, ERC20_ABI, RISK_BLOCK_THRESHOLD, MAX_TX_AMOUNT_PHRS, CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
|
|
8
8
|
import { getSigner, isSignerFailure } from "../lib/signer/index.js";
|
|
9
9
|
import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
|
|
10
|
+
import { checkDailyLimit, recordSpend, estimateUsd } from "../lib/spendAccumulator.js";
|
|
10
11
|
export const executeSwapSchema = z.object({
|
|
11
12
|
tokenIn: z.string(),
|
|
12
13
|
tokenOut: z.string(),
|
|
@@ -47,6 +48,11 @@ export async function handleExecuteSwap(raw) {
|
|
|
47
48
|
if (Number(input.amountIn) > Number(MAX_TX_AMOUNT_PHRS) && input.tokenIn.toUpperCase() === "PHRS") {
|
|
48
49
|
return fail("TX_LIMIT_EXCEEDED", `Swap amount exceeds configured testnet limit (${MAX_TX_AMOUNT_PHRS}).`, false, "execute_swap");
|
|
49
50
|
}
|
|
51
|
+
const amountUsd = estimateUsd(input.amountIn, input.tokenIn);
|
|
52
|
+
const dailyCheck = checkDailyLimit(walletAddress, amountUsd);
|
|
53
|
+
if (!dailyCheck.allowed) {
|
|
54
|
+
return fail("DAILY_SPEND_LIMIT_EXCEEDED", `Daily spend limit reached. Spent $${dailyCheck.currentUsd.toFixed(2)} of $${dailyCheck.limitUsd.toFixed(2)} USD today. Remaining: $${dailyCheck.remainingUsd.toFixed(2)}. Resets at UTC midnight.`, false, "execute_swap");
|
|
55
|
+
}
|
|
50
56
|
const risk = await assessRisk({
|
|
51
57
|
action: "swap",
|
|
52
58
|
tokenIn: input.tokenIn,
|
|
@@ -110,11 +116,17 @@ export async function handleExecuteSwap(raw) {
|
|
|
110
116
|
gas: BigInt(quote.gasLimit),
|
|
111
117
|
});
|
|
112
118
|
const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
119
|
+
if (receipt.status !== "success") {
|
|
120
|
+
return fail("TX_REVERTED", "execute_swap transaction was mined but reverted on-chain.", false, "execute_swap");
|
|
121
|
+
}
|
|
122
|
+
recordSpend(walletAddress, amountUsd);
|
|
113
123
|
return ok({
|
|
114
|
-
txSuccess: receipt.status === "success",
|
|
115
124
|
txHash,
|
|
116
125
|
explorerUrl: getExplorerUrl(txHash),
|
|
117
126
|
amountOut: quote.amountOut,
|
|
127
|
+
usedFromToken: quote.usedFromToken,
|
|
128
|
+
usedToToken: quote.usedToToken,
|
|
129
|
+
wasSubstituted: quote.wasSubstituted,
|
|
118
130
|
signerMode: signer.mode,
|
|
119
131
|
walletAddress,
|
|
120
132
|
gasUsed: receipt.gasUsed.toString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeSwap.js","sourceRoot":"","sources":["../../src/tools/executeSwap.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,mCAAmC,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,EAAE,EAA4B,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9I,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"executeSwap.js","sourceRoot":"","sources":["../../src/tools/executeSwap.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,23 +30,21 @@ export declare const getExecutionHistoryTool: {
|
|
|
30
30
|
limit?: number | undefined;
|
|
31
31
|
}>;
|
|
32
32
|
};
|
|
33
|
-
|
|
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<{
|
|
34
44
|
walletAddress: string;
|
|
35
45
|
totalFetched: number;
|
|
36
|
-
history:
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
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
|
-
}>;
|
|
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":"
|
|
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
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
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
2
6
|
import { z } from "zod";
|
|
3
7
|
import { publicClient, getExplorerUrl } from "../lib/pharosClient.js";
|
|
4
|
-
import { DODO_ROUTE_PROXY_ADDRESS } from "../lib/constants.js";
|
|
5
|
-
import { formatEther } from "viem";
|
|
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)");
|
|
6
12
|
export const getExecutionHistorySchema = z.object({
|
|
7
13
|
walletAddress: z.string(),
|
|
8
14
|
limit: z.number().optional().default(20),
|
|
9
15
|
filter: z.enum(["swap", "transfer", "all"]).optional().default("all"),
|
|
10
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
|
|
11
29
|
export const getExecutionHistoryTool = {
|
|
12
30
|
name: "get_execution_history",
|
|
13
|
-
description: "Pull on-chain transaction history for a wallet
|
|
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.",
|
|
14
32
|
inputSchema: getExecutionHistorySchema,
|
|
15
33
|
};
|
|
16
34
|
export async function handleGetExecutionHistory(input) {
|
|
35
|
+
const seen = new Set();
|
|
17
36
|
const history = [];
|
|
18
37
|
try {
|
|
19
38
|
const blockNumber = await publicClient.getBlockNumber();
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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)
|
|
48
110
|
continue;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
:
|
|
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
|
|
68
134
|
? `Sent ${formatEther(tx.value)} PHRS to ${tx.to}`
|
|
69
135
|
: `Received ${formatEther(tx.value)} PHRS from ${tx.from}`,
|
|
70
|
-
|
|
71
|
-
|
|
136
|
+
blockNumber: block.number.toString(),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
72
139
|
}
|
|
73
140
|
}
|
|
74
|
-
catch {
|
|
75
|
-
// skip blocks that fail to load
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
141
|
}
|
|
142
|
+
// Sort descending by block number
|
|
143
|
+
history.sort((a, b) => Number(BigInt(b.blockNumber) - BigInt(a.blockNumber)));
|
|
79
144
|
}
|
|
80
145
|
catch (err) {
|
|
81
|
-
return {
|
|
82
|
-
walletAddress: input.walletAddress,
|
|
83
|
-
totalFetched: 0,
|
|
84
|
-
history: [],
|
|
85
|
-
error: `Failed to fetch history: ${err.message}`,
|
|
86
|
-
};
|
|
146
|
+
return fail("HISTORY_FETCH_FAILED", `Failed to fetch history: ${err.message}`, true, "get_execution_history");
|
|
87
147
|
}
|
|
88
|
-
return {
|
|
148
|
+
return ok({
|
|
89
149
|
walletAddress: input.walletAddress,
|
|
90
150
|
totalFetched: history.length,
|
|
91
151
|
history,
|
|
92
|
-
|
|
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
|
+
});
|
|
93
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,
|
|
1
|
+
{"version":3,"file":"getExecutionHistory.js","sourceRoot":"","sources":["../../src/tools/getExecutionHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,9 @@ export declare const getTransactionStatusTool: {
|
|
|
18
18
|
txHash: string;
|
|
19
19
|
}>;
|
|
20
20
|
};
|
|
21
|
-
export declare function handleGetTransactionStatus(raw: GetTransactionStatusInput): Promise<{
|
|
21
|
+
export declare function handleGetTransactionStatus(raw: GetTransactionStatusInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
|
|
22
|
+
txStatus: string;
|
|
22
23
|
txHash: string;
|
|
23
|
-
status: string;
|
|
24
24
|
blockNumber: string;
|
|
25
25
|
blockHash: `0x${string}`;
|
|
26
26
|
from: `0x${string}`;
|
|
@@ -29,10 +29,9 @@ export declare function handleGetTransactionStatus(raw: GetTransactionStatusInpu
|
|
|
29
29
|
effectiveGasPrice: string;
|
|
30
30
|
value: string;
|
|
31
31
|
explorerUrl: string;
|
|
32
|
-
|
|
33
|
-
} | {
|
|
32
|
+
}> | import("../lib/toolResponse.js").ToolSuccess<{
|
|
34
33
|
txHash: string;
|
|
35
|
-
|
|
34
|
+
txStatus: "pending";
|
|
36
35
|
blockNumber: null;
|
|
37
36
|
blockHash: null;
|
|
38
37
|
from: `0x${string}`;
|
|
@@ -41,18 +40,5 @@ export declare function handleGetTransactionStatus(raw: GetTransactionStatusInpu
|
|
|
41
40
|
effectiveGasPrice: null;
|
|
42
41
|
value: string;
|
|
43
42
|
explorerUrl: string;
|
|
44
|
-
|
|
45
|
-
} | {
|
|
46
|
-
txHash: string;
|
|
47
|
-
status: "not_found";
|
|
48
|
-
blockNumber: null;
|
|
49
|
-
blockHash: null;
|
|
50
|
-
from: null;
|
|
51
|
-
to: null;
|
|
52
|
-
gasUsed: null;
|
|
53
|
-
effectiveGasPrice: null;
|
|
54
|
-
value: null;
|
|
55
|
-
explorerUrl: string;
|
|
56
|
-
error: string;
|
|
57
|
-
}>;
|
|
43
|
+
}>>;
|
|
58
44
|
//# sourceMappingURL=getTransactionStatus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/tools/getTransactionStatus.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/tools/getTransactionStatus.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEnF,eAAO,MAAM,wBAAwB;;;;;;;;;;CAKpC,CAAC;AAEF,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;IA8C9E"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// ────────────────────────────────────────────────────────────────────────
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { publicClient, getExplorerUrl } from "../lib/pharosClient.js";
|
|
6
|
+
import { ok, fail } from "../lib/toolResponse.js";
|
|
6
7
|
export const getTransactionStatusSchema = z.object({
|
|
7
8
|
txHash: z.string().describe("Transaction hash to look up"),
|
|
8
9
|
});
|
|
@@ -18,9 +19,8 @@ export async function handleGetTransactionStatus(raw) {
|
|
|
18
19
|
try {
|
|
19
20
|
const receipt = await publicClient.getTransactionReceipt({ hash });
|
|
20
21
|
const tx = await publicClient.getTransaction({ hash });
|
|
21
|
-
|
|
22
|
+
const details = {
|
|
22
23
|
txHash: input.txHash,
|
|
23
|
-
status: receipt.status === "success" ? "success" : "failed",
|
|
24
24
|
blockNumber: receipt.blockNumber.toString(),
|
|
25
25
|
blockHash: receipt.blockHash,
|
|
26
26
|
from: receipt.from,
|
|
@@ -30,14 +30,18 @@ export async function handleGetTransactionStatus(raw) {
|
|
|
30
30
|
value: tx.value.toString(),
|
|
31
31
|
explorerUrl: getExplorerUrl(input.txHash),
|
|
32
32
|
};
|
|
33
|
+
if (receipt.status !== "success") {
|
|
34
|
+
return fail("TX_REVERTED", "Transaction was mined but reverted on-chain.", false, "get_transaction_status");
|
|
35
|
+
}
|
|
36
|
+
return ok({ ...details, txStatus: "success" });
|
|
33
37
|
}
|
|
34
38
|
catch {
|
|
35
39
|
// Receipt not found — check if the tx exists at all (pending)
|
|
36
40
|
try {
|
|
37
41
|
const tx = await publicClient.getTransaction({ hash });
|
|
38
|
-
return {
|
|
42
|
+
return ok({
|
|
39
43
|
txHash: input.txHash,
|
|
40
|
-
|
|
44
|
+
txStatus: "pending",
|
|
41
45
|
blockNumber: null,
|
|
42
46
|
blockHash: null,
|
|
43
47
|
from: tx.from,
|
|
@@ -46,22 +50,10 @@ export async function handleGetTransactionStatus(raw) {
|
|
|
46
50
|
effectiveGasPrice: null,
|
|
47
51
|
value: tx.value.toString(),
|
|
48
52
|
explorerUrl: getExplorerUrl(input.txHash),
|
|
49
|
-
};
|
|
53
|
+
});
|
|
50
54
|
}
|
|
51
55
|
catch {
|
|
52
|
-
return
|
|
53
|
-
txHash: input.txHash,
|
|
54
|
-
status: "not_found",
|
|
55
|
-
blockNumber: null,
|
|
56
|
-
blockHash: null,
|
|
57
|
-
from: null,
|
|
58
|
-
to: null,
|
|
59
|
-
gasUsed: null,
|
|
60
|
-
effectiveGasPrice: null,
|
|
61
|
-
value: null,
|
|
62
|
-
explorerUrl: getExplorerUrl(input.txHash),
|
|
63
|
-
error: "Transaction not found on chain",
|
|
64
|
-
};
|
|
56
|
+
return fail("TX_NOT_FOUND", "Transaction not found on chain.", false, "get_transaction_status");
|
|
65
57
|
}
|
|
66
58
|
}
|
|
67
59
|
}
|