safehands-pharos 1.0.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 (106) hide show
  1. package/.agents/skill/safehands/SKILL.md +169 -0
  2. package/LICENSE +21 -0
  3. package/README.md +382 -0
  4. package/contracts/RiskRegistry.json +149 -0
  5. package/contracts/RiskRegistry.sol +30 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +98 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/constants.d.ts +173 -0
  11. package/dist/lib/constants.d.ts.map +1 -0
  12. package/dist/lib/constants.js +151 -0
  13. package/dist/lib/constants.js.map +1 -0
  14. package/dist/lib/dodoApi.d.ts +57 -0
  15. package/dist/lib/dodoApi.d.ts.map +1 -0
  16. package/dist/lib/dodoApi.js +123 -0
  17. package/dist/lib/dodoApi.js.map +1 -0
  18. package/dist/lib/pharosClient.d.ts +58 -0
  19. package/dist/lib/pharosClient.d.ts.map +1 -0
  20. package/dist/lib/pharosClient.js +51 -0
  21. package/dist/lib/pharosClient.js.map +1 -0
  22. package/dist/lib/riskEngine.d.ts +27 -0
  23. package/dist/lib/riskEngine.d.ts.map +1 -0
  24. package/dist/lib/riskEngine.js +284 -0
  25. package/dist/lib/riskEngine.js.map +1 -0
  26. package/dist/lib/testRpc.d.ts +2 -0
  27. package/dist/lib/testRpc.d.ts.map +1 -0
  28. package/dist/lib/testRpc.js +30 -0
  29. package/dist/lib/testRpc.js.map +1 -0
  30. package/dist/lib/testTools.d.ts +2 -0
  31. package/dist/lib/testTools.d.ts.map +1 -0
  32. package/dist/lib/testTools.js +263 -0
  33. package/dist/lib/testTools.js.map +1 -0
  34. package/dist/scripts/checkDeploy.d.ts +2 -0
  35. package/dist/scripts/checkDeploy.d.ts.map +1 -0
  36. package/dist/scripts/checkDeploy.js +25 -0
  37. package/dist/scripts/checkDeploy.js.map +1 -0
  38. package/dist/scripts/deployRegistry.d.ts +2 -0
  39. package/dist/scripts/deployRegistry.d.ts.map +1 -0
  40. package/dist/scripts/deployRegistry.js +101 -0
  41. package/dist/scripts/deployRegistry.js.map +1 -0
  42. package/dist/scripts/testRegistry.d.ts +2 -0
  43. package/dist/scripts/testRegistry.d.ts.map +1 -0
  44. package/dist/scripts/testRegistry.js +44 -0
  45. package/dist/scripts/testRegistry.js.map +1 -0
  46. package/dist/tools/approveToken.d.ts +60 -0
  47. package/dist/tools/approveToken.d.ts.map +1 -0
  48. package/dist/tools/approveToken.js +59 -0
  49. package/dist/tools/approveToken.js.map +1 -0
  50. package/dist/tools/assessRisk.d.ts +67 -0
  51. package/dist/tools/assessRisk.d.ts.map +1 -0
  52. package/dist/tools/assessRisk.js +71 -0
  53. package/dist/tools/assessRisk.js.map +1 -0
  54. package/dist/tools/checkAllowance.d.ts +37 -0
  55. package/dist/tools/checkAllowance.d.ts.map +1 -0
  56. package/dist/tools/checkAllowance.js +43 -0
  57. package/dist/tools/checkAllowance.js.map +1 -0
  58. package/dist/tools/estimateGas.d.ts +70 -0
  59. package/dist/tools/estimateGas.d.ts.map +1 -0
  60. package/dist/tools/estimateGas.js +129 -0
  61. package/dist/tools/estimateGas.js.map +1 -0
  62. package/dist/tools/executeSwap.d.ts +94 -0
  63. package/dist/tools/executeSwap.d.ts.map +1 -0
  64. package/dist/tools/executeSwap.js +107 -0
  65. package/dist/tools/executeSwap.js.map +1 -0
  66. package/dist/tools/getExecutionHistory.d.ts +52 -0
  67. package/dist/tools/getExecutionHistory.d.ts.map +1 -0
  68. package/dist/tools/getExecutionHistory.js +94 -0
  69. package/dist/tools/getExecutionHistory.js.map +1 -0
  70. package/dist/tools/getGasPrice.d.ts +26 -0
  71. package/dist/tools/getGasPrice.d.ts.map +1 -0
  72. package/dist/tools/getGasPrice.js +52 -0
  73. package/dist/tools/getGasPrice.js.map +1 -0
  74. package/dist/tools/getPoolInfo.d.ts +88 -0
  75. package/dist/tools/getPoolInfo.d.ts.map +1 -0
  76. package/dist/tools/getPoolInfo.js +99 -0
  77. package/dist/tools/getPoolInfo.js.map +1 -0
  78. package/dist/tools/getTokenPrice.d.ts +28 -0
  79. package/dist/tools/getTokenPrice.d.ts.map +1 -0
  80. package/dist/tools/getTokenPrice.js +79 -0
  81. package/dist/tools/getTokenPrice.js.map +1 -0
  82. package/dist/tools/getTransactionStatus.d.ts +58 -0
  83. package/dist/tools/getTransactionStatus.d.ts.map +1 -0
  84. package/dist/tools/getTransactionStatus.js +68 -0
  85. package/dist/tools/getTransactionStatus.js.map +1 -0
  86. package/dist/tools/getWalletBalance.d.ts +40 -0
  87. package/dist/tools/getWalletBalance.d.ts.map +1 -0
  88. package/dist/tools/getWalletBalance.js +71 -0
  89. package/dist/tools/getWalletBalance.js.map +1 -0
  90. package/dist/tools/publishRiskScore.d.ts +74 -0
  91. package/dist/tools/publishRiskScore.d.ts.map +1 -0
  92. package/dist/tools/publishRiskScore.js +70 -0
  93. package/dist/tools/publishRiskScore.js.map +1 -0
  94. package/dist/tools/queryRiskRegistry.d.ts +49 -0
  95. package/dist/tools/queryRiskRegistry.d.ts.map +1 -0
  96. package/dist/tools/queryRiskRegistry.js +61 -0
  97. package/dist/tools/queryRiskRegistry.js.map +1 -0
  98. package/dist/tools/sendPayment.d.ts +70 -0
  99. package/dist/tools/sendPayment.d.ts.map +1 -0
  100. package/dist/tools/sendPayment.js +68 -0
  101. package/dist/tools/sendPayment.js.map +1 -0
  102. package/dist/tools/simulateTransaction.d.ts +82 -0
  103. package/dist/tools/simulateTransaction.d.ts.map +1 -0
  104. package/dist/tools/simulateTransaction.js +89 -0
  105. package/dist/tools/simulateTransaction.js.map +1 -0
  106. package/package.json +61 -0
@@ -0,0 +1,30 @@
1
+ // โ”€โ”€โ”€ RPC Connection Test โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2
+ // Quick smoke test: connects to Pharos Atlantic Testnet and verifies
3
+ // the chain ID matches 688689.
4
+ // โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
5
+ import { publicClient } from "./pharosClient.js";
6
+ import { CHAIN_ID } from "./constants.js";
7
+ async function main() {
8
+ console.log("๐Ÿ”Œ Connecting to Pharos Atlantic Testnet...");
9
+ console.log(` RPC: https://atlantic.dplabs-internal.com/`);
10
+ try {
11
+ const chainId = await publicClient.getChainId();
12
+ console.log(` Chain ID returned: ${chainId}`);
13
+ if (chainId === CHAIN_ID) {
14
+ console.log(`โœ… SUCCESS โ€” Chain ID matches expected ${CHAIN_ID}`);
15
+ }
16
+ else {
17
+ console.error(`โŒ MISMATCH โ€” Expected ${CHAIN_ID}, got ${chainId}`);
18
+ process.exit(1);
19
+ }
20
+ const blockNumber = await publicClient.getBlockNumber();
21
+ console.log(` Latest block: ${blockNumber}`);
22
+ console.log("\n๐ŸŽ‰ Pharos RPC connection verified.");
23
+ }
24
+ catch (error) {
25
+ console.error("โŒ RPC connection failed:", error);
26
+ process.exit(1);
27
+ }
28
+ }
29
+ main();
30
+ //# sourceMappingURL=testRpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testRpc.js","sourceRoot":"","sources":["../../src/lib/testRpc.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qEAAqE;AACrE,+BAA+B;AAC/B,2EAA2E;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QAEhD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yCAAyC,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,yBAAyB,QAAQ,SAAS,OAAO,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=testTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testTools.d.ts","sourceRoot":"","sources":["../../src/lib/testTools.ts"],"names":[],"mappings":""}
@@ -0,0 +1,263 @@
1
+ // โ”€โ”€โ”€ SafeHands โ€” Full 15-Tool Integration Test โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2
+ import { readFileSync } from "fs";
3
+ import { resolve } from "path";
4
+ import { publicClient } from "../lib/pharosClient.js";
5
+ import { formatEther } from "viem";
6
+ import { handleAssessRisk } from "../tools/assessRisk.js";
7
+ import { handleExecuteSwap } from "../tools/executeSwap.js";
8
+ import { handleSendPayment } from "../tools/sendPayment.js";
9
+ import { handleSimulateTransaction } from "../tools/simulateTransaction.js";
10
+ import { handleGetExecutionHistory } from "../tools/getExecutionHistory.js";
11
+ import { handleGetTokenPrice } from "../tools/getTokenPrice.js";
12
+ import { handleGetWalletBalance } from "../tools/getWalletBalance.js";
13
+ import { handleCheckAllowance } from "../tools/checkAllowance.js";
14
+ import { handleGetTransactionStatus } from "../tools/getTransactionStatus.js";
15
+ import { handleEstimateGas } from "../tools/estimateGas.js";
16
+ import { handlePublishRiskScore } from "../tools/publishRiskScore.js";
17
+ import { handleQueryRiskRegistry } from "../tools/queryRiskRegistry.js";
18
+ import { handleApproveToken } from "../tools/approveToken.js";
19
+ import { handleGetGasPrice } from "../tools/getGasPrice.js";
20
+ import { handleGetPoolInfo } from "../tools/getPoolInfo.js";
21
+ // โ”€โ”€โ”€ Load .env โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
22
+ function loadEnv() {
23
+ const f = readFileSync(resolve(process.cwd(), ".env"), "utf-8");
24
+ const v = {};
25
+ for (const l of f.split("\n")) {
26
+ const t = l.trim();
27
+ if (!t || t.startsWith("#"))
28
+ continue;
29
+ const i = t.indexOf("=");
30
+ if (i === -1)
31
+ continue;
32
+ v[t.slice(0, i).trim()] = t.slice(i + 1).trim();
33
+ }
34
+ return v;
35
+ }
36
+ const env = loadEnv();
37
+ const PK = env.PRIVATE_KEY;
38
+ const WALLET = env.WALLET_ADDRESS;
39
+ // โ”€โ”€โ”€ Results tracker โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
40
+ const results = [];
41
+ let swapTxHash = "";
42
+ function ok(tool, key) { results.push({ tool, status: "โœ… PASS", key }); }
43
+ function fail(tool, key) { results.push({ tool, status: "โŒ FAIL", key }); }
44
+ // โ”€โ”€โ”€ Tests โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
45
+ async function run() {
46
+ console.log("\n๐Ÿ›ก๏ธ SafeHands โ€” 15-Tool Integration Test");
47
+ console.log("โ”€".repeat(64));
48
+ const bal = formatEther(await publicClient.getBalance({ address: WALLET }));
49
+ console.log(` Wallet: ${WALLET}\n Balance: ${bal} PHRS\n`);
50
+ // 1. assess_risk
51
+ try {
52
+ const r = await handleAssessRisk({ action: "swap", tokenIn: "PHRS", tokenOut: "USDC", amount: "0.01", walletAddress: WALLET });
53
+ console.log(`1. assess_risk โ†’ score=${r.riskScore} level=${r.riskLevel}`);
54
+ ok("assess_risk", `score=${r.riskScore}, ${r.riskLevel}, ${r.recommendation}`);
55
+ }
56
+ catch (e) {
57
+ console.log(`1. assess_risk โ†’ โŒ`);
58
+ fail("assess_risk", e.message);
59
+ }
60
+ // 2. simulate_transaction (swap)
61
+ try {
62
+ const r = await handleSimulateTransaction({ action: "swap", tokenIn: "PHRS", tokenOut: "USDC", amount: "0.01", walletAddress: WALLET });
63
+ console.log(`2. simulate_tx (swap) โ†’ success=${r.wouldSucceed} gas=${r.gasEstimate}`);
64
+ ok("simulate_transaction", `wouldSucceed=${r.wouldSucceed}, gas=${r.gasEstimate}`);
65
+ }
66
+ catch (e) {
67
+ console.log(`2. simulate_tx โ†’ โŒ`);
68
+ fail("simulate_transaction", e.message);
69
+ }
70
+ // 3. simulate_transaction (transfer)
71
+ try {
72
+ const r = await handleSimulateTransaction({ action: "transfer", amount: "0.001", toAddress: "0x000000000000000000000000000000000000dEaD", walletAddress: WALLET });
73
+ console.log(`3. simulate_tx (xfer) โ†’ success=${r.wouldSucceed} gas=${r.gasEstimate}`);
74
+ ok("simulate_tx (xfer)", `wouldSucceed=${r.wouldSucceed}, gas=${r.gasEstimate}`);
75
+ }
76
+ catch (e) {
77
+ console.log(`3. simulate_tx (xfer) โ†’ โŒ`);
78
+ fail("simulate_tx (xfer)", e.message);
79
+ }
80
+ // 4. get_token_price
81
+ try {
82
+ const r = await handleGetTokenPrice({ token: "PHRS" });
83
+ console.log(`4. get_token_price โ†’ PHRS=$${r.priceUsd}`);
84
+ ok("get_token_price", `PHRS=$${r.priceUsd}`);
85
+ }
86
+ catch (e) {
87
+ console.log(`4. get_token_price โ†’ โŒ`);
88
+ fail("get_token_price", e.message);
89
+ }
90
+ // 5. get_wallet_balance
91
+ try {
92
+ const r = await handleGetWalletBalance({ walletAddress: WALLET });
93
+ console.log(`5. get_wallet_balance โ†’ PHRS=${r.balances.PHRS.balance} USDC=${r.balances.USDC.balance} USDT=${r.balances.USDT.balance}`);
94
+ ok("get_wallet_balance", `PHRS=${r.balances.PHRS.balance}, USDC=${r.balances.USDC.balance}, total=$${r.totalUsd}`);
95
+ }
96
+ catch (e) {
97
+ console.log(`5. get_wallet_balance โ†’ โŒ`);
98
+ fail("get_wallet_balance", e.message);
99
+ }
100
+ // 6. check_allowance
101
+ try {
102
+ const r = await handleCheckAllowance({ walletAddress: WALLET, token: "USDC" });
103
+ console.log(`6. check_allowance โ†’ USDC allowance=${r.allowance} needsApproval=${r.needsApproval}`);
104
+ ok("check_allowance", `allowance=${r.allowance}, needsApproval=${r.needsApproval}`);
105
+ }
106
+ catch (e) {
107
+ console.log(`6. check_allowance โ†’ โŒ`);
108
+ fail("check_allowance", e.message);
109
+ }
110
+ // 7. estimate_gas (swap)
111
+ try {
112
+ const r = await handleEstimateGas({ action: "swap", tokenIn: "PHRS", tokenOut: "USDC", amount: "0.01", walletAddress: WALLET });
113
+ console.log(`7. estimate_gas โ†’ gas=${r.gasEstimate} cost=${r.gasCostPHRS} PHRS`);
114
+ ok("estimate_gas", `gas=${r.gasEstimate}, cost=${r.gasCostPHRS} PHRS, sufficient=${r.isSufficient}`);
115
+ }
116
+ catch (e) {
117
+ console.log(`7. estimate_gas โ†’ โŒ`);
118
+ fail("estimate_gas", e.message);
119
+ }
120
+ // 8. get_gas_price
121
+ try {
122
+ const r = await handleGetGasPrice({});
123
+ console.log(`8. get_gas_price โ†’ ${r.gasPriceGwei} Gwei, trend=${r.trend}`);
124
+ ok("get_gas_price", `${r.gasPriceGwei} Gwei, trend=${r.trend}`);
125
+ }
126
+ catch (e) {
127
+ console.log(`8. get_gas_price โ†’ โŒ`);
128
+ fail("get_gas_price", e.message);
129
+ }
130
+ // 9. get_pool_info
131
+ try {
132
+ const r = await handleGetPoolInfo({ tokenA: "PHRS", tokenB: "USDC" });
133
+ const ratio = r.available ? r.priceRatio : "no pool";
134
+ console.log(`9. get_pool_info โ†’ ${ratio}`);
135
+ ok("get_pool_info", `available=${r.available}, ${ratio}`);
136
+ }
137
+ catch (e) {
138
+ console.log(`9. get_pool_info โ†’ โŒ`);
139
+ fail("get_pool_info", e.message);
140
+ }
141
+ // 10. execute_swap (LIVE โ€” 0.01 PHRS โ†’ USDC)
142
+ try {
143
+ const r = await handleExecuteSwap({ tokenIn: "PHRS", tokenOut: "USDC", amountIn: "0.01", walletAddress: WALLET, privateKey: PK });
144
+ if (r.success) {
145
+ swapTxHash = r.txHash;
146
+ console.log(`10. execute_swap โ†’ โœ… out=${r.amountOut} USDC tx=${r.txHash.slice(0, 18)}...`);
147
+ ok("execute_swap", `out=${r.amountOut} USDC, tx=${r.txHash}`);
148
+ }
149
+ else {
150
+ console.log(`10. execute_swap โ†’ not executed: ${r.error}`);
151
+ ok("execute_swap", `handled: ${r.error}`);
152
+ }
153
+ }
154
+ catch (e) {
155
+ console.log(`10. execute_swap โ†’ โŒ`);
156
+ fail("execute_swap", e.message);
157
+ }
158
+ // 11. send_payment (LIVE โ€” 0.001 PHRS)
159
+ try {
160
+ const r = await handleSendPayment({ toAddress: "0x000000000000000000000000000000000000dEaD", amount: "0.001", walletAddress: WALLET, privateKey: PK });
161
+ if (r.success) {
162
+ console.log(`11. send_payment โ†’ โœ… tx=${r.txHash.slice(0, 18)}...`);
163
+ ok("send_payment", `sent 0.001 PHRS, tx=${r.txHash}`);
164
+ }
165
+ else {
166
+ console.log(`11. send_payment โ†’ not sent: ${r.error}`);
167
+ ok("send_payment", `handled: ${r.error}`);
168
+ }
169
+ }
170
+ catch (e) {
171
+ console.log(`11. send_payment โ†’ โŒ`);
172
+ fail("send_payment", e.message);
173
+ }
174
+ // 12. approve_token (LIVE โ€” approve 100 USDC)
175
+ try {
176
+ const r = await handleApproveToken({ walletAddress: WALLET, token: "USDC", amount: "100", privateKey: PK });
177
+ if (r.success) {
178
+ console.log(`12. approve_token โ†’ โœ… tx=${r.txHash.slice(0, 18)}...`);
179
+ ok("approve_token", `approved 100 USDC, tx=${r.txHash}`);
180
+ }
181
+ else {
182
+ console.log(`12. approve_token โ†’ not approved: ${r.error}`);
183
+ fail("approve_token", r.error || "unknown");
184
+ }
185
+ }
186
+ catch (e) {
187
+ console.log(`12. approve_token โ†’ โŒ`);
188
+ fail("approve_token", e.message);
189
+ }
190
+ // 13. get_transaction_status (use swap tx if we got one, else a known tx)
191
+ try {
192
+ const hash = swapTxHash || "0xe628679b65f8c5d34cc570ba16292f972ae8c38687fb4931a69ef63d37ff119d";
193
+ const r = await handleGetTransactionStatus({ txHash: hash });
194
+ console.log(`13. get_tx_status โ†’ status=${r.status} block=${r.blockNumber}`);
195
+ ok("get_transaction_status", `status=${r.status}, block=${r.blockNumber}`);
196
+ }
197
+ catch (e) {
198
+ console.log(`13. get_tx_status โ†’ โŒ`);
199
+ fail("get_transaction_status", e.message);
200
+ }
201
+ // 14. publish_risk_score (LIVE โ€” publish to registry)
202
+ try {
203
+ const r = await handlePublishRiskScore({ action: "swap", tokenIn: "PHRS", tokenOut: "USDC", amount: "1", walletAddress: WALLET, privateKey: PK });
204
+ if (r.success && r.onChain) {
205
+ console.log(`14. publish_risk_score โ†’ โœ… score=${r.assessment.riskScore} tx=${r.onChain.txHash.slice(0, 18)}...`);
206
+ ok("publish_risk_score", `score=${r.assessment.riskScore}, tx=${r.onChain.txHash}`);
207
+ }
208
+ else {
209
+ console.log(`14. publish_risk_score โ†’ ${r.error}`);
210
+ fail("publish_risk_score", r.error || "unknown");
211
+ }
212
+ }
213
+ catch (e) {
214
+ console.log(`14. publish_risk_score โ†’ โŒ`);
215
+ fail("publish_risk_score", e.message);
216
+ }
217
+ // 15. query_risk_registry
218
+ try {
219
+ const r = await handleQueryRiskRegistry({ walletAddress: WALLET });
220
+ if (r.found && r.record) {
221
+ console.log(`15. query_risk_registry โ†’ score=${r.record.score} level=${r.record.riskLevel}`);
222
+ ok("query_risk_registry", `score=${r.record.score}, level=${r.record.riskLevel}, ts=${r.record.timestamp}`);
223
+ }
224
+ else {
225
+ console.log(`15. query_risk_registry โ†’ not found`);
226
+ ok("query_risk_registry", "no record (expected if never published)");
227
+ }
228
+ }
229
+ catch (e) {
230
+ console.log(`15. query_risk_registry โ†’ โŒ`);
231
+ fail("query_risk_registry", e.message);
232
+ }
233
+ // 16. get_execution_history (last โ€” slowest due to block scanning)
234
+ try {
235
+ const r = await handleGetExecutionHistory({ walletAddress: WALLET, limit: 5, filter: "all" });
236
+ console.log(`16. get_exec_history โ†’ ${r.totalFetched} txs found`);
237
+ ok("get_execution_history", `${r.totalFetched} txs`);
238
+ }
239
+ catch (e) {
240
+ console.log(`16. get_exec_history โ†’ โŒ`);
241
+ fail("get_execution_history", e.message);
242
+ }
243
+ // โ”€โ”€โ”€ Summary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
244
+ const postBal = formatEther(await publicClient.getBalance({ address: WALLET }));
245
+ console.log("\n" + "โ•".repeat(90));
246
+ console.log(" # โ”‚ Status โ”‚ Tool โ”‚ Key Output");
247
+ console.log("โ”€".repeat(90));
248
+ results.forEach((r, i) => {
249
+ const num = String(i + 1).padStart(3);
250
+ const tool = r.tool.padEnd(24);
251
+ const key = r.key.length > 46 ? r.key.slice(0, 43) + "..." : r.key;
252
+ console.log(`${num} โ”‚ ${r.status} โ”‚ ${tool}โ”‚ ${key}`);
253
+ });
254
+ console.log("โ•".repeat(90));
255
+ const passed = results.filter(r => r.status.includes("PASS")).length;
256
+ const failed = results.filter(r => r.status.includes("FAIL")).length;
257
+ console.log(`\n Balance: ${bal} โ†’ ${postBal} PHRS`);
258
+ console.log(` ${passed}/${results.length} passed, ${failed} failed`);
259
+ console.log(` ${failed === 0 ? "๐ŸŽ‰ ALL 15 TOOLS PASSED" : "โš ๏ธ SOME TOOLS FAILED"}\n`);
260
+ process.exit(failed === 0 ? 0 : 1);
261
+ }
262
+ run().catch(e => { console.error("Fatal:", e); process.exit(1); });
263
+ //# sourceMappingURL=testTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testTools.js","sourceRoot":"","sources":["../../src/lib/testTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=checkDeploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkDeploy.d.ts","sourceRoot":"","sources":["../../src/scripts/checkDeploy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ // Quick script to fetch the receipt for the deploy tx
2
+ import { publicClient } from "../lib/pharosClient.js";
3
+ import { readFileSync, writeFileSync } from "fs";
4
+ import { resolve } from "path";
5
+ const TX_HASH = "0x7f2106b5bc8c5eddcd2ea7782669ccb0b4a107da4943cffd5d49357ab5820d2e";
6
+ async function main() {
7
+ console.log("Fetching receipt for deploy tx...");
8
+ console.log(`TX: ${TX_HASH}`);
9
+ const receipt = await publicClient.getTransactionReceipt({ hash: TX_HASH });
10
+ console.log(`Status: ${receipt.status}`);
11
+ console.log(`Contract: ${receipt.contractAddress}`);
12
+ console.log(`Block: ${receipt.blockNumber}`);
13
+ console.log(`Gas Used: ${receipt.gasUsed}`);
14
+ if (receipt.contractAddress) {
15
+ // Update .env
16
+ const envPath = resolve(process.cwd(), ".env");
17
+ let envContent = readFileSync(envPath, "utf-8");
18
+ envContent = envContent.replace(/\nRISK_REGISTRY_ADDRESS=.*/, "");
19
+ envContent = envContent.trimEnd() + `\n\n# Risk Registry\nRISK_REGISTRY_ADDRESS=${receipt.contractAddress}\n`;
20
+ writeFileSync(envPath, envContent);
21
+ console.log(`\nโœ… .env updated with RISK_REGISTRY_ADDRESS=${receipt.contractAddress}`);
22
+ }
23
+ }
24
+ main().catch(console.error);
25
+ //# sourceMappingURL=checkDeploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkDeploy.js","sourceRoot":"","sources":["../../src/scripts/checkDeploy.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,OAAO,GAAG,oEAA6E,CAAC;AAE9F,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5E,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE5C,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,cAAc;QACd,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAClE,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,8CAA8C,OAAO,CAAC,eAAe,IAAI,CAAC;QAC9G,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,+CAA+C,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deployRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployRegistry.d.ts","sourceRoot":"","sources":["../../src/scripts/deployRegistry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ // โ”€โ”€โ”€ Compile & Deploy RiskRegistry โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2
+ // Compiles the Solidity contract with solc and deploys to Pharos Atlantic.
3
+ // โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
4
+ import { readFileSync, writeFileSync } from "fs";
5
+ import { resolve } from "path";
6
+ import solc from "solc";
7
+ import { createPharosWalletClient, publicClient } from "../lib/pharosClient.js";
8
+ // โ”€โ”€โ”€ Load .env โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
9
+ function loadEnv() {
10
+ const envPath = resolve(process.cwd(), ".env");
11
+ const envFile = readFileSync(envPath, "utf-8");
12
+ const vars = {};
13
+ for (const line of envFile.split("\n")) {
14
+ const trimmed = line.trim();
15
+ if (!trimmed || trimmed.startsWith("#"))
16
+ continue;
17
+ const eqIdx = trimmed.indexOf("=");
18
+ if (eqIdx === -1)
19
+ continue;
20
+ vars[trimmed.slice(0, eqIdx).trim()] = trimmed.slice(eqIdx + 1).trim();
21
+ }
22
+ return vars;
23
+ }
24
+ const env = loadEnv();
25
+ const PRIVATE_KEY = env.PRIVATE_KEY;
26
+ if (!PRIVATE_KEY) {
27
+ console.error("โŒ PRIVATE_KEY not found in .env");
28
+ process.exit(1);
29
+ }
30
+ // โ”€โ”€โ”€ Compile โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
31
+ console.log("๐Ÿ“ Compiling RiskRegistry.sol...");
32
+ const contractPath = resolve(process.cwd(), "contracts", "RiskRegistry.sol");
33
+ const source = readFileSync(contractPath, "utf-8");
34
+ const input = JSON.stringify({
35
+ language: "Solidity",
36
+ sources: {
37
+ "RiskRegistry.sol": { content: source },
38
+ },
39
+ settings: {
40
+ outputSelection: {
41
+ "*": {
42
+ "*": ["abi", "evm.bytecode.object"],
43
+ },
44
+ },
45
+ optimizer: { enabled: true, runs: 200 },
46
+ },
47
+ });
48
+ const output = JSON.parse(solc.compile(input));
49
+ if (output.errors) {
50
+ const errors = output.errors.filter((e) => e.severity === "error");
51
+ if (errors.length > 0) {
52
+ console.error("โŒ Compilation errors:");
53
+ errors.forEach((e) => console.error(e.formattedMessage));
54
+ process.exit(1);
55
+ }
56
+ }
57
+ const contract = output.contracts["RiskRegistry.sol"]["RiskRegistry"];
58
+ const abi = contract.abi;
59
+ const bytecode = `0x${contract.evm.bytecode.object}`;
60
+ console.log("โœ… Compiled successfully");
61
+ console.log(` ABI: ${abi.length} functions/events`);
62
+ console.log(` Bytecode: ${bytecode.length} chars`);
63
+ // Save ABI for reference
64
+ const artifactPath = resolve(process.cwd(), "contracts", "RiskRegistry.json");
65
+ writeFileSync(artifactPath, JSON.stringify({ abi, bytecode }, null, 2));
66
+ console.log(` Artifact saved: contracts/RiskRegistry.json`);
67
+ // โ”€โ”€โ”€ Deploy โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
68
+ console.log("\n๐Ÿš€ Deploying to Pharos Atlantic Testnet...");
69
+ const wallet = createPharosWalletClient(PRIVATE_KEY);
70
+ const account = wallet.account;
71
+ console.log(` Deployer: ${account.address}`);
72
+ const balance = await publicClient.getBalance({ address: account.address });
73
+ console.log(` Balance: ${Number(balance) / 1e18} PHRS`);
74
+ // Deploy using viem
75
+ const hash = await wallet.deployContract({
76
+ abi,
77
+ bytecode,
78
+ args: [],
79
+ });
80
+ console.log(` TX Hash: ${hash}`);
81
+ console.log(" Waiting for confirmation...");
82
+ const receipt = await publicClient.waitForTransactionReceipt({ hash });
83
+ if (receipt.status !== "success") {
84
+ console.error("โŒ Deployment failed!");
85
+ process.exit(1);
86
+ }
87
+ const contractAddress = receipt.contractAddress;
88
+ console.log(`\nโœ… RiskRegistry deployed successfully!`);
89
+ console.log(` Contract: ${contractAddress}`);
90
+ console.log(` Block: ${receipt.blockNumber}`);
91
+ console.log(` Gas Used: ${receipt.gasUsed}`);
92
+ console.log(` Explorer: https://atlantic.pharosscan.xyz/tx/${hash}`);
93
+ // โ”€โ”€โ”€ Update .env โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
94
+ const envPath = resolve(process.cwd(), ".env");
95
+ let envContent = readFileSync(envPath, "utf-8");
96
+ // Remove old entry if exists
97
+ envContent = envContent.replace(/\nRISK_REGISTRY_ADDRESS=.*/, "");
98
+ envContent = envContent.trimEnd() + `\n\n# Risk Registry\nRISK_REGISTRY_ADDRESS=${contractAddress}\n`;
99
+ writeFileSync(envPath, envContent);
100
+ console.log(`\n๐Ÿ“ Updated .env with RISK_REGISTRY_ADDRESS=${contractAddress}`);
101
+ //# sourceMappingURL=deployRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployRegistry.js","sourceRoot":"","sources":["../../src/scripts/deployRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=testRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testRegistry.d.ts","sourceRoot":"","sources":["../../src/scripts/testRegistry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ // โ”€โ”€โ”€ Quick test: RiskRegistry publish + query โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2
+ import { readFileSync } from "fs";
3
+ import { resolve } from "path";
4
+ import { handleAssessRisk } from "../tools/assessRisk.js";
5
+ import { handleQueryRiskRegistry } from "../tools/queryRiskRegistry.js";
6
+ function loadEnv() {
7
+ const envPath = resolve(process.cwd(), ".env");
8
+ const envFile = readFileSync(envPath, "utf-8");
9
+ const vars = {};
10
+ for (const line of envFile.split("\n")) {
11
+ const trimmed = line.trim();
12
+ if (!trimmed || trimmed.startsWith("#"))
13
+ continue;
14
+ const eqIdx = trimmed.indexOf("=");
15
+ if (eqIdx === -1)
16
+ continue;
17
+ vars[trimmed.slice(0, eqIdx).trim()] = trimmed.slice(eqIdx + 1).trim();
18
+ }
19
+ return vars;
20
+ }
21
+ const env = loadEnv();
22
+ async function main() {
23
+ console.log("๐Ÿงช Testing RiskRegistry: assess + publish + query\n");
24
+ // 1. assess_risk WITH privateKey โ†’ auto-publishes
25
+ console.log("1๏ธโƒฃ assess_risk with auto-publish...");
26
+ const assessment = await handleAssessRisk({
27
+ action: "swap",
28
+ tokenIn: "PHRS",
29
+ tokenOut: "USDC",
30
+ amount: "1",
31
+ walletAddress: env.WALLET_ADDRESS,
32
+ privateKey: env.PRIVATE_KEY,
33
+ });
34
+ console.log(JSON.stringify(assessment, null, 2));
35
+ // 2. query_risk_registry
36
+ console.log("\n2๏ธโƒฃ query_risk_registry...");
37
+ const query = await handleQueryRiskRegistry({
38
+ walletAddress: env.WALLET_ADDRESS,
39
+ });
40
+ console.log(JSON.stringify(query, null, 2));
41
+ console.log("\nโœ… RiskRegistry end-to-end test complete!");
42
+ }
43
+ main().catch(console.error);
44
+ //# sourceMappingURL=testRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testRegistry.js","sourceRoot":"","sources":["../../src/scripts/testRegistry.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,SAAS,OAAO;IACd,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IAEnE,kDAAkD;IAClD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC;QACxC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,UAAU,EAAE,GAAG,CAAC,WAAW;KAC5B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjD,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC;QAC1C,aAAa,EAAE,GAAG,CAAC,cAAc;KAClC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC5D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+ export declare const approveTokenSchema: z.ZodObject<{
3
+ walletAddress: z.ZodString;
4
+ token: z.ZodEnum<["USDC", "USDT"]>;
5
+ amount: z.ZodString;
6
+ privateKey: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ amount: string;
9
+ privateKey: string;
10
+ walletAddress: string;
11
+ token: "USDT" | "USDC";
12
+ }, {
13
+ amount: string;
14
+ privateKey: string;
15
+ walletAddress: string;
16
+ token: "USDT" | "USDC";
17
+ }>;
18
+ export type ApproveTokenInput = z.input<typeof approveTokenSchema>;
19
+ export declare const approveTokenTool: {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: z.ZodObject<{
23
+ walletAddress: z.ZodString;
24
+ token: z.ZodEnum<["USDC", "USDT"]>;
25
+ amount: z.ZodString;
26
+ privateKey: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ amount: string;
29
+ privateKey: string;
30
+ walletAddress: string;
31
+ token: "USDT" | "USDC";
32
+ }, {
33
+ amount: string;
34
+ privateKey: string;
35
+ walletAddress: string;
36
+ token: "USDT" | "USDC";
37
+ }>;
38
+ };
39
+ export declare function handleApproveToken(raw: ApproveTokenInput): Promise<{
40
+ success: boolean;
41
+ txHash: `0x${string}`;
42
+ explorerUrl: string;
43
+ token: "USDT" | "USDC";
44
+ tokenAddress: "0xE7E84B8B4f39C507499c40B4ac199B050e2882d5" | "0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8";
45
+ approvedAmount: string;
46
+ spender: "0x4Cf317b8918FbE8A890c01eDAb7d548555Ac2cE9";
47
+ gasUsed: string;
48
+ error?: undefined;
49
+ } | {
50
+ success: boolean;
51
+ txHash: null;
52
+ explorerUrl: null;
53
+ token: "USDT" | "USDC";
54
+ tokenAddress: "0xE7E84B8B4f39C507499c40B4ac199B050e2882d5" | "0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8";
55
+ approvedAmount: null;
56
+ spender: "0x4Cf317b8918FbE8A890c01eDAb7d548555Ac2cE9";
57
+ error: string;
58
+ gasUsed?: undefined;
59
+ }>;
60
+ //# sourceMappingURL=approveToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approveToken.d.ts","sourceRoot":"","sources":["../../src/tools/approveToken.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAK7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;CAK5B,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;GA4C9D"}