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.
- package/.agents/skill/safehands/SKILL.md +169 -0
- package/LICENSE +21 -0
- package/README.md +382 -0
- package/contracts/RiskRegistry.json +149 -0
- package/contracts/RiskRegistry.sol +30 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +98 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/constants.d.ts +173 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +151 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/dodoApi.d.ts +57 -0
- package/dist/lib/dodoApi.d.ts.map +1 -0
- package/dist/lib/dodoApi.js +123 -0
- package/dist/lib/dodoApi.js.map +1 -0
- package/dist/lib/pharosClient.d.ts +58 -0
- package/dist/lib/pharosClient.d.ts.map +1 -0
- package/dist/lib/pharosClient.js +51 -0
- package/dist/lib/pharosClient.js.map +1 -0
- package/dist/lib/riskEngine.d.ts +27 -0
- package/dist/lib/riskEngine.d.ts.map +1 -0
- package/dist/lib/riskEngine.js +284 -0
- package/dist/lib/riskEngine.js.map +1 -0
- package/dist/lib/testRpc.d.ts +2 -0
- package/dist/lib/testRpc.d.ts.map +1 -0
- package/dist/lib/testRpc.js +30 -0
- package/dist/lib/testRpc.js.map +1 -0
- package/dist/lib/testTools.d.ts +2 -0
- package/dist/lib/testTools.d.ts.map +1 -0
- package/dist/lib/testTools.js +263 -0
- package/dist/lib/testTools.js.map +1 -0
- package/dist/scripts/checkDeploy.d.ts +2 -0
- package/dist/scripts/checkDeploy.d.ts.map +1 -0
- package/dist/scripts/checkDeploy.js +25 -0
- package/dist/scripts/checkDeploy.js.map +1 -0
- package/dist/scripts/deployRegistry.d.ts +2 -0
- package/dist/scripts/deployRegistry.d.ts.map +1 -0
- package/dist/scripts/deployRegistry.js +101 -0
- package/dist/scripts/deployRegistry.js.map +1 -0
- package/dist/scripts/testRegistry.d.ts +2 -0
- package/dist/scripts/testRegistry.d.ts.map +1 -0
- package/dist/scripts/testRegistry.js +44 -0
- package/dist/scripts/testRegistry.js.map +1 -0
- package/dist/tools/approveToken.d.ts +60 -0
- package/dist/tools/approveToken.d.ts.map +1 -0
- package/dist/tools/approveToken.js +59 -0
- package/dist/tools/approveToken.js.map +1 -0
- package/dist/tools/assessRisk.d.ts +67 -0
- package/dist/tools/assessRisk.d.ts.map +1 -0
- package/dist/tools/assessRisk.js +71 -0
- package/dist/tools/assessRisk.js.map +1 -0
- package/dist/tools/checkAllowance.d.ts +37 -0
- package/dist/tools/checkAllowance.d.ts.map +1 -0
- package/dist/tools/checkAllowance.js +43 -0
- package/dist/tools/checkAllowance.js.map +1 -0
- package/dist/tools/estimateGas.d.ts +70 -0
- package/dist/tools/estimateGas.d.ts.map +1 -0
- package/dist/tools/estimateGas.js +129 -0
- package/dist/tools/estimateGas.js.map +1 -0
- package/dist/tools/executeSwap.d.ts +94 -0
- package/dist/tools/executeSwap.d.ts.map +1 -0
- package/dist/tools/executeSwap.js +107 -0
- package/dist/tools/executeSwap.js.map +1 -0
- package/dist/tools/getExecutionHistory.d.ts +52 -0
- package/dist/tools/getExecutionHistory.d.ts.map +1 -0
- package/dist/tools/getExecutionHistory.js +94 -0
- package/dist/tools/getExecutionHistory.js.map +1 -0
- package/dist/tools/getGasPrice.d.ts +26 -0
- package/dist/tools/getGasPrice.d.ts.map +1 -0
- package/dist/tools/getGasPrice.js +52 -0
- package/dist/tools/getGasPrice.js.map +1 -0
- package/dist/tools/getPoolInfo.d.ts +88 -0
- package/dist/tools/getPoolInfo.d.ts.map +1 -0
- package/dist/tools/getPoolInfo.js +99 -0
- package/dist/tools/getPoolInfo.js.map +1 -0
- package/dist/tools/getTokenPrice.d.ts +28 -0
- package/dist/tools/getTokenPrice.d.ts.map +1 -0
- package/dist/tools/getTokenPrice.js +79 -0
- package/dist/tools/getTokenPrice.js.map +1 -0
- package/dist/tools/getTransactionStatus.d.ts +58 -0
- package/dist/tools/getTransactionStatus.d.ts.map +1 -0
- package/dist/tools/getTransactionStatus.js +68 -0
- package/dist/tools/getTransactionStatus.js.map +1 -0
- package/dist/tools/getWalletBalance.d.ts +40 -0
- package/dist/tools/getWalletBalance.d.ts.map +1 -0
- package/dist/tools/getWalletBalance.js +71 -0
- package/dist/tools/getWalletBalance.js.map +1 -0
- package/dist/tools/publishRiskScore.d.ts +74 -0
- package/dist/tools/publishRiskScore.d.ts.map +1 -0
- package/dist/tools/publishRiskScore.js +70 -0
- package/dist/tools/publishRiskScore.js.map +1 -0
- package/dist/tools/queryRiskRegistry.d.ts +49 -0
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -0
- package/dist/tools/queryRiskRegistry.js +61 -0
- package/dist/tools/queryRiskRegistry.js.map +1 -0
- package/dist/tools/sendPayment.d.ts +70 -0
- package/dist/tools/sendPayment.d.ts.map +1 -0
- package/dist/tools/sendPayment.js +68 -0
- package/dist/tools/sendPayment.js.map +1 -0
- package/dist/tools/simulateTransaction.d.ts +82 -0
- package/dist/tools/simulateTransaction.d.ts.map +1 -0
- package/dist/tools/simulateTransaction.js +89 -0
- package/dist/tools/simulateTransaction.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|