safehands-pharos 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skill/safehands/SKILL.md +40 -9
- package/.agents/skill/safehands/assets/networks.json +24 -0
- package/.agents/skill/safehands/assets/tokens.json +60 -0
- package/README.md +107 -51
- package/dist/index.js +20 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/constants.d.ts +5 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +17 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/testTools.js +134 -7
- package/dist/lib/testTools.js.map +1 -1
- package/dist/tools/approveToken.d.ts +2 -2
- package/dist/tools/checkAllowance.d.ts +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +54 -0
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -0
- package/dist/tools/checkTokenSecurity.js +94 -0
- package/dist/tools/checkTokenSecurity.js.map +1 -0
- package/dist/tools/sendPayment.d.ts +8 -2
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +29 -23
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/x402PayAndFetch.d.ts +64 -0
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -0
- package/dist/tools/x402PayAndFetch.js +80 -0
- package/dist/tools/x402PayAndFetch.js.map +1 -0
- package/dist/x402Server.d.ts +2 -0
- package/dist/x402Server.d.ts.map +1 -0
- package/dist/x402Server.js +219 -0
- package/dist/x402Server.js.map +1 -0
- package/package.json +8 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
---
|
|
2
1
|
name: safehands
|
|
3
2
|
version: 1.0.0
|
|
4
|
-
description: Risk intelligence middleware for Pharos agents.
|
|
3
|
+
description: Risk intelligence middleware for Pharos agents. 17 production tools that assess, simulate, and gate every on-chain action — swaps, payments, approvals — with a 5-dimension risk engine, an on-chain RiskRegistry, and x402 protocol micro-payments.
|
|
5
4
|
author: "SZtch"
|
|
6
5
|
chain: pharos
|
|
7
|
-
tags: [execution, safety, defi, swap, payment, risk, registry, middleware, composable]
|
|
6
|
+
tags: [execution, safety, defi, swap, payment, risk, registry, middleware, composable, x402]
|
|
8
7
|
categories: [safety, execution, defi, intelligence]
|
|
9
8
|
---
|
|
10
9
|
|
|
@@ -12,19 +11,20 @@ categories: [safety, execution, defi, intelligence]
|
|
|
12
11
|
|
|
13
12
|
> *"Agents that execute without thinking are dangerous. SafeHands executes anything on Pharos — but never blindly."*
|
|
14
13
|
|
|
15
|
-
SafeHands is **risk intelligence middleware** for the Pharos AI Agent economy. It sits between agent intent and on-chain execution, providing a
|
|
14
|
+
SafeHands is **risk intelligence middleware** for the Pharos AI Agent economy. It sits between agent intent and on-chain execution, providing a 17-tool safety layer that any agent can compose into their workflow. Every swap, transfer, and approval flows through a 5-dimension risk assessment before touching the chain.
|
|
16
15
|
|
|
17
16
|
SafeHands is not an agent — it's the safety layer other agents depend on.
|
|
18
17
|
|
|
19
18
|
---
|
|
20
19
|
|
|
21
|
-
## Tools (
|
|
20
|
+
## Tools (17)
|
|
22
21
|
|
|
23
22
|
### Core Safety — Assess before you execute
|
|
24
23
|
|
|
25
24
|
| Tool | Description |
|
|
26
25
|
|------|-------------|
|
|
27
26
|
| `assess_risk` | 5-dimension risk score (0–100) for any swap or transfer. Auto-publishes to on-chain RiskRegistry when privateKey is provided. |
|
|
27
|
+
| `check_token_security` | Check token contract security (honeypot check, tax checks, mint privileges) via GoPlus Security API. |
|
|
28
28
|
| `simulate_transaction` | Dry run via eth_call — zero gas. Returns expected output, gas estimate, and revert reasons before committing. |
|
|
29
29
|
| `estimate_gas` | Pre-execution gas cost in PHRS and USD. Checks whether the wallet has sufficient funds for gas + value. |
|
|
30
30
|
|
|
@@ -60,6 +60,12 @@ SafeHands is not an agent — it's the safety layer other agents depend on.
|
|
|
60
60
|
| `publish_risk_score` | Run risk assessment and publish the result to the on-chain RiskRegistry smart contract. |
|
|
61
61
|
| `query_risk_registry` | Read any wallet's published risk score from the registry. Read-only — no private key needed. |
|
|
62
62
|
|
|
63
|
+
### x402 Payments — Composable micro-payment gating
|
|
64
|
+
|
|
65
|
+
| Tool | Description |
|
|
66
|
+
|------|-------------|
|
|
67
|
+
| `x402_pay_and_fetch` | Fetch resources from an HTTP x402 payment-gated server. Automatically handles HTTP 402 payment challenge by signing a payment payload and completing the fetch. |
|
|
68
|
+
|
|
63
69
|
---
|
|
64
70
|
|
|
65
71
|
## Composability
|
|
@@ -67,13 +73,13 @@ SafeHands is not an agent — it's the safety layer other agents depend on.
|
|
|
67
73
|
SafeHands is designed as a **building block**, not a standalone application. Other skills and agents compose SafeHands into their workflows by calling its tools as middleware.
|
|
68
74
|
|
|
69
75
|
### Read-only tools (safe for any agent, no key needed)
|
|
70
|
-
`simulate_transaction` · `estimate_gas` · `get_token_price` · `get_pool_info` · `get_gas_price` · `get_wallet_balance` · `check_allowance` · `get_transaction_status` · `get_execution_history` · `query_risk_registry`
|
|
76
|
+
`check_token_security` · `simulate_transaction` · `estimate_gas` · `get_token_price` · `get_pool_info` · `get_gas_price` · `get_wallet_balance` · `check_allowance` · `get_transaction_status` · `get_execution_history` · `query_risk_registry`
|
|
71
77
|
|
|
72
78
|
### Read+Write tool (read without key, auto-publishes with key)
|
|
73
79
|
`assess_risk` — returns risk score without a key; if `privateKey` is provided, also publishes the result to the on-chain RiskRegistry.
|
|
74
80
|
|
|
75
81
|
### Write tools (require privateKey per-request)
|
|
76
|
-
`execute_swap` · `send_payment` · `approve_token` · `publish_risk_score`
|
|
82
|
+
`execute_swap` · `send_payment` · `approve_token` · `publish_risk_score` · `x402_pay_and_fetch`
|
|
77
83
|
|
|
78
84
|
### How Phase 2 agents compose with SafeHands
|
|
79
85
|
|
|
@@ -89,7 +95,7 @@ SafeHands is designed as a **building block**, not a standalone application. Oth
|
|
|
89
95
|
└─────────────────────────────────────────────────────┘
|
|
90
96
|
```
|
|
91
97
|
|
|
92
|
-
Any agent that performs on-chain actions on Pharos can import SafeHands as its safety layer. The agent handles user intent and strategy; SafeHands handles risk gating and execution.
|
|
98
|
+
Any agent (including those built with **Anvita Flow**) that performs on-chain actions on Pharos can import SafeHands as its safety layer. The agent handles user intent and strategy; SafeHands handles risk gating and execution.
|
|
93
99
|
|
|
94
100
|
### Cross-agent risk intelligence
|
|
95
101
|
|
|
@@ -160,9 +166,34 @@ When `assess_risk` is called with a `privateKey`, the result is automatically pu
|
|
|
160
166
|
|
|
161
167
|
---
|
|
162
168
|
|
|
169
|
+
## x402 Monetized API Server
|
|
170
|
+
|
|
171
|
+
SafeHands exposes a paid HTTP REST API server using the Coinbase-designed **x402 micro-payment protocol** on Pharos Atlantic. This allows developers to offer risk gating and intelligence tools as a paid utility to external AI agents.
|
|
172
|
+
|
|
173
|
+
### API Endpoints
|
|
174
|
+
- `GET /health` (Free) — Health check, token registry, and receiver addresses.
|
|
175
|
+
- `GET /assess-risk` (Paid: USDC 0.001) — Gate queries with 5-dimension risk score checks.
|
|
176
|
+
- `GET /check-token-security` (Paid: USDC 0.001) — Verify contract security, honeypots, and token code privileges.
|
|
177
|
+
- `GET /simulate-transaction` (Paid: USDC 0.001) — Perform dry-runs of transfers and swaps.
|
|
178
|
+
|
|
179
|
+
### Flow Architecture
|
|
180
|
+
1. **Challenge:** When a client fetches a gated resource, the server replies with `HTTP 402 Payment Required` and a Base64-encoded `PAYMENT-REQUIRED` header specifying token address, receiver wallet, and pricing details.
|
|
181
|
+
2. **On-Chain Settlement:** The client signs a standard authorization envelope with their private key, transferring the micro-payment directly to the recipient wallet.
|
|
182
|
+
3. **Resubmission:** The client resubmits the request, appending the payload signature in the `PAYMENT-SIGNATURE` header.
|
|
183
|
+
4. **Unlocking Content:** The integrated Facilitator verifies the signature, settles the transfer on-chain, and responds with `HTTP 200 OK` carrying the resource response payload.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
163
187
|
## Supported Tokens
|
|
164
188
|
|
|
165
|
-
|
|
189
|
+
Pharos Atlantic Testnet registered tokens:
|
|
190
|
+
- **PHRS**: Native Pharos token (`0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`)
|
|
191
|
+
- **USDC**: USD Coin (`0xcfC8330f4BCAB529c625D12781b1C19466A9Fc8B`) - Canonical address from the official Pharos Token Registry
|
|
192
|
+
- **USDT**: Tether USD (`0xE7E84B8B4f39C507499c40B4ac199B050e2882d5`)
|
|
193
|
+
- **WBTC**: Wrapped BTC (`0x0c64F03EEa5c30946D5c55B4b532D08ad74638a4`)
|
|
194
|
+
- **WETH**: Wrapped ETH (`0x7d211F77525ea39A0592794f793cC1036eEaccD5`)
|
|
195
|
+
- **WPHRS**: Wrapped PHRS (`0x838800b758277CC111B2d48Ab01e5E164f8E9471`)
|
|
196
|
+
- **tUSDC**: Test USDC (`0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8`) - Legacy test token used in some x402 examples
|
|
166
197
|
|
|
167
198
|
## Chain
|
|
168
199
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"atlantic": {
|
|
3
|
+
"name": "Pharos Atlantic Testnet",
|
|
4
|
+
"chainId": 688689,
|
|
5
|
+
"rpcUrl": "https://atlantic.dplabs-internal.com/",
|
|
6
|
+
"explorerUrl": "https://atlantic.pharosscan.xyz/",
|
|
7
|
+
"nativeCurrency": {
|
|
8
|
+
"name": "PHRS",
|
|
9
|
+
"symbol": "PHRS",
|
|
10
|
+
"decimals": 18
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"pacific": {
|
|
14
|
+
"name": "Pharos Pacific Mainnet",
|
|
15
|
+
"chainId": 1672,
|
|
16
|
+
"rpcUrl": "https://rpc.pharos.xyz",
|
|
17
|
+
"explorerUrl": "https://www.pharosscan.xyz",
|
|
18
|
+
"nativeCurrency": {
|
|
19
|
+
"name": "PROS",
|
|
20
|
+
"symbol": "PROS",
|
|
21
|
+
"decimals": 18
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"atlantic": [
|
|
3
|
+
{
|
|
4
|
+
"symbol": "USDC",
|
|
5
|
+
"name": "USD Coin",
|
|
6
|
+
"address": "0xcfC8330f4BCAB529c625D12781b1C19466A9Fc8B",
|
|
7
|
+
"decimals": 6
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"symbol": "USDT",
|
|
11
|
+
"name": "Tether USD",
|
|
12
|
+
"address": "0xE7E84B8B4f39C507499c40B4ac199B050e2882d5",
|
|
13
|
+
"decimals": 6
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"symbol": "WBTC",
|
|
17
|
+
"name": "Wrapped BTC",
|
|
18
|
+
"address": "0x0c64F03EEa5c30946D5c55B4b532D08ad74638a4",
|
|
19
|
+
"decimals": 18
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"symbol": "WETH",
|
|
23
|
+
"name": "Wrapped ETH",
|
|
24
|
+
"address": "0x7d211F77525ea39A0592794f793cC1036eEaccD5",
|
|
25
|
+
"decimals": 18
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"symbol": "WPHRS",
|
|
29
|
+
"name": "Wrapped PHRS",
|
|
30
|
+
"address": "0x838800b758277CC111B2d48Ab01e5E164f8E9471",
|
|
31
|
+
"decimals": 18
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"pacific": [
|
|
35
|
+
{
|
|
36
|
+
"symbol": "WPROS",
|
|
37
|
+
"name": "Wrapped PROS",
|
|
38
|
+
"address": "0x52c48d4213107b20bc583832b0d951fb9ca8f0b0",
|
|
39
|
+
"decimals": 18
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"symbol": "USDC",
|
|
43
|
+
"name": "USD Coin",
|
|
44
|
+
"address": "0xc879c018db60520f4355c26ed1a6d572cdac1815",
|
|
45
|
+
"decimals": 6
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"symbol": "LINK",
|
|
49
|
+
"name": "Chainlink Token",
|
|
50
|
+
"address": "0x51e2A24742Db77604B881d6781Ee16B5b8fcBE29",
|
|
51
|
+
"decimals": 18
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"symbol": "WETH",
|
|
55
|
+
"name": "Wrapped ETH",
|
|
56
|
+
"address": "0x1f4b7011Ee3d53969bb67F59428a9ec0477856E9",
|
|
57
|
+
"decimals": 18
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<img src="https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white" />
|
|
3
3
|
<img src="https://img.shields.io/badge/MCP_Skill-000000?style=for-the-badge&logo=anthropic&logoColor=white" />
|
|
4
4
|
<img src="https://img.shields.io/badge/Pharos_Atlantic-688689-blueviolet?style=for-the-badge" />
|
|
5
|
-
<img src="https://img.shields.io/badge/Tools-
|
|
5
|
+
<img src="https://img.shields.io/badge/Tools-17-orange?style=for-the-badge" />
|
|
6
6
|
<img src="https://img.shields.io/badge/License-MIT-green?style=for-the-badge" />
|
|
7
7
|
<img src="https://img.shields.io/badge/Security-Self--Audited-blue?style=for-the-badge" />
|
|
8
8
|
<img src="https://img.shields.io/npm/v/safehands-pharos?style=for-the-badge&logo=npm&logoColor=white&color=CB3837" />
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<p align="center">
|
|
19
19
|
<a href="#-the-problem">Problem</a> •
|
|
20
20
|
<a href="#-the-solution">Solution</a> •
|
|
21
|
-
<a href="#-tools-
|
|
21
|
+
<a href="#-tools-17">Tools</a> •
|
|
22
22
|
<a href="#-agent-integration">Agent Integration</a> •
|
|
23
23
|
<a href="#-composability">Composability</a> •
|
|
24
24
|
<a href="#-quick-start">Quick Start</a> •
|
|
@@ -48,7 +48,7 @@ When agents control real wallets in the Pharos AI economy, **"just execute" is n
|
|
|
48
48
|
|
|
49
49
|
## ✅ The Solution
|
|
50
50
|
|
|
51
|
-
SafeHands is an **MCP Skill** — a
|
|
51
|
+
SafeHands is an **MCP Skill** — a 17-tool risk intelligence middleware layer. It sits between agent intent and on-chain execution, scoring risk, simulating outcomes, and gating dangerous operations automatically.
|
|
52
52
|
|
|
53
53
|
```
|
|
54
54
|
┌──────────────────────────────────────────────────────┐
|
|
@@ -105,7 +105,7 @@ SafeHands is not an agent — it's the safety layer other agents depend on.
|
|
|
105
105
|
|
|
106
106
|
---
|
|
107
107
|
|
|
108
|
-
## 🔧 Tools (
|
|
108
|
+
## 🔧 Tools (17)
|
|
109
109
|
|
|
110
110
|
All tools hit live Pharos RPC and the DODO Route API. Zero mocks, zero stubs.
|
|
111
111
|
|
|
@@ -114,46 +114,53 @@ All tools hit live Pharos RPC and the DODO Route API. Zero mocks, zero stubs.
|
|
|
114
114
|
| # | Tool | Type | Description |
|
|
115
115
|
|---|------|------|-------------|
|
|
116
116
|
| 1 | `assess_risk` | Read+Write | 5-dimension risk score (0–100). Auto-publishes to on-chain RiskRegistry when `privateKey` provided. |
|
|
117
|
-
| 2 | `
|
|
118
|
-
| 3 | `
|
|
117
|
+
| 2 | `check_token_security` | Read | Check token security, honeypot risk, buy/sell tax, and mint privileges via GoPlus Security API. |
|
|
118
|
+
| 3 | `simulate_transaction` | Read | Dry run via `eth_call` — zero gas. Returns expected output, gas estimate, revert reasons. |
|
|
119
|
+
| 4 | `estimate_gas` | Read | Gas cost in PHRS and USD. Checks wallet sufficiency before execution. |
|
|
119
120
|
|
|
120
121
|
### Execution — Act with guardrails
|
|
121
122
|
|
|
122
123
|
| # | Tool | Type | Description |
|
|
123
124
|
|---|------|------|-------------|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
125
|
+
| 5 | `execute_swap` | Write | Swap via FaroSwap (DODO) with built-in risk gate. Blocks if score > 80. |
|
|
126
|
+
| 6 | `send_payment` | Write | Native PHRS transfer with address validation, balance checks, exposure warnings. |
|
|
127
|
+
| 7 | `approve_token` | Write | ERC-20 approval for DODO router. Supports exact amount or `"max"`. |
|
|
127
128
|
|
|
128
129
|
### Market Intelligence — Know before you trade
|
|
129
130
|
|
|
130
131
|
| # | Tool | Type | Description |
|
|
131
132
|
|---|------|------|-------------|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
133
|
+
| 8 | `get_token_price` | Read | Real-time PHRS/USDC/USDT price from DODO liquidity quotes. |
|
|
134
|
+
| 9 | `get_pool_info` | Read | DODO pool data for any token pair — price ratio, impact, fees. |
|
|
135
|
+
| 10 | `get_gas_price` | Read | Current gas price with trend classification and cost estimates. |
|
|
135
136
|
|
|
136
137
|
### Wallet & History — Observe the full picture
|
|
137
138
|
|
|
138
139
|
| # | Tool | Type | Description |
|
|
139
140
|
|---|------|------|-------------|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
141
|
+
| 11 | `get_wallet_balance` | Read | PHRS, USDC, USDT balances with total USD estimate. |
|
|
142
|
+
| 12 | `check_allowance` | Read | ERC-20 allowance for DODO router. Reports if approval needed. |
|
|
143
|
+
| 13 | `get_transaction_status` | Read | TX lookup by hash — status, block, gas, explorer link. |
|
|
144
|
+
| 14 | `get_execution_history` | Read | On-chain audit trail. Categorizes swaps, transfers, other. |
|
|
144
145
|
|
|
145
146
|
### On-Chain Risk Registry — Share risk across agents
|
|
146
147
|
|
|
147
148
|
| # | Tool | Type | Description |
|
|
148
149
|
|---|------|------|-------------|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
150
|
+
| 15 | `publish_risk_score` | Write | Assess + publish to on-chain RiskRegistry. Other agents can query. |
|
|
151
|
+
| 16 | `query_risk_registry` | Read | Read any wallet's risk score from registry. No key needed. |
|
|
152
|
+
|
|
153
|
+
### x402 Payments — Gated paid APIs
|
|
154
|
+
|
|
155
|
+
| # | Tool | Type | Description |
|
|
156
|
+
|---|------|------|-------------|
|
|
157
|
+
| 17 | `x402_pay_and_fetch` | Write | Fetch resources from a paid HTTP x402 server. Automatically executes payment authorization and retries fetch. |
|
|
151
158
|
|
|
152
159
|
---
|
|
153
160
|
|
|
154
161
|
## 🔌 Agent Integration
|
|
155
162
|
|
|
156
|
-
SafeHands is safety middleware — other agents plug it into their execution pipeline instead of building their own risk logic.
|
|
163
|
+
SafeHands is safety middleware — other agents plug it into their execution pipeline instead of building their own risk logic. Because it implements the standard Model Context Protocol (MCP), it is natively compatible with **Anvita Flow** agent orchestration frameworks, Claude Desktop, and any standard MCP client.
|
|
157
164
|
|
|
158
165
|
### Example: DeFi Trading Agent
|
|
159
166
|
|
|
@@ -193,11 +200,11 @@ SafeHands is a building block, not a standalone app.
|
|
|
193
200
|
|
|
194
201
|
| Access Level | Tools | Who can call |
|
|
195
202
|
|---|---|---|
|
|
196
|
-
| **Read-only** (
|
|
203
|
+
| **Read-only** (11 tools) | `simulate_transaction`, `estimate_gas`, `get_token_price`, `get_pool_info`, `get_gas_price`, `get_wallet_balance`, `check_allowance`, `get_transaction_status`, `get_execution_history`, `query_risk_registry`, `check_token_security` | Any agent, no wallet needed |
|
|
197
204
|
| **Read+Write** (1 tool) | `assess_risk` | Scores risk without a key; auto-publishes to RiskRegistry with key |
|
|
198
|
-
| **Write** (
|
|
205
|
+
| **Write** (5 tools) | `execute_swap`, `send_payment`, `approve_token`, `publish_risk_score`, `x402_pay_and_fetch` | Agents with privateKey |
|
|
199
206
|
|
|
200
|
-
|
|
207
|
+
12 of 17 tools need **no wallet at all** — any agent can use SafeHands for risk intelligence without holding keys. `assess_risk` works without a key too, but upgrades to a write operation when one is provided.
|
|
201
208
|
|
|
202
209
|
### Cross-Agent Risk Intelligence
|
|
203
210
|
|
|
@@ -236,7 +243,7 @@ No install required. Add to your Claude Desktop `claude_desktop_config.json`:
|
|
|
236
243
|
}
|
|
237
244
|
```
|
|
238
245
|
|
|
239
|
-
Restart Claude Desktop. All
|
|
246
|
+
Restart Claude Desktop. All 17 SafeHands tools appear automatically.
|
|
240
247
|
|
|
241
248
|
### Option 2 — Clone & Build
|
|
242
249
|
|
|
@@ -262,7 +269,7 @@ Add to `claude_desktop_config.json`:
|
|
|
262
269
|
|
|
263
270
|
### Configure Credentials
|
|
264
271
|
|
|
265
|
-
|
|
272
|
+
12 of 17 tools work without any credentials. Only write operations need a private key.
|
|
266
273
|
|
|
267
274
|
**Recommended — pass via MCP client config:**
|
|
268
275
|
|
|
@@ -288,7 +295,7 @@ PRIVATE_KEY=0xYOUR_PRIVATE_KEY_HERE
|
|
|
288
295
|
WALLET_ADDRESS=0xYOUR_WALLET_ADDRESS_HERE
|
|
289
296
|
```
|
|
290
297
|
|
|
291
|
-
> ⚠️ Private keys are **never stored** by SafeHands — passed per-request only, never logged. Only
|
|
298
|
+
> ⚠️ Private keys are **never stored** by SafeHands — passed per-request only, never logged. Only 5 tools require a private key: `execute_swap`, `send_payment`, `approve_token`, `publish_risk_score`, `x402_pay_and_fetch`.
|
|
292
299
|
|
|
293
300
|
### Verify
|
|
294
301
|
|
|
@@ -338,37 +345,73 @@ When `assess_risk` is called with a `privateKey`, the score is **automatically p
|
|
|
338
345
|
|
|
339
346
|
## 🔗 Live Transaction Proof
|
|
340
347
|
|
|
341
|
-
All
|
|
348
|
+
All 17 tools tested against **Pharos Atlantic Testnet** with real on-chain transactions:
|
|
342
349
|
|
|
343
350
|
| Tool | TX Hash | Result |
|
|
344
351
|
|------|---------|--------|
|
|
345
|
-
| `execute_swap` | [`
|
|
346
|
-
| `send_payment` | [`
|
|
347
|
-
| `approve_token` | [`
|
|
348
|
-
| `publish_risk_score` | [`
|
|
352
|
+
| `execute_swap` | [`0xdb814a33...`](https://atlantic.pharosscan.xyz/tx/0xdb814a334337d47a3d2b18cbe4f9015356a3842412dada6ca2138d14287f50cb) | 0.01 PHRS → 0.0317 USDC |
|
|
353
|
+
| `send_payment` | [`0xbf26b767...`](https://atlantic.pharosscan.xyz/tx/0xbf26b767cb8a5e599b6acaec90998a66577dbec9036526e7c1876a43a1e79471) | 0.001 PHRS sent |
|
|
354
|
+
| `approve_token` | [`0xca21ac22...`](https://atlantic.pharosscan.xyz/tx/0xca21ac22c870f1bc69c432f1f02c9459066f390a1dead92fca8b0d1119d30422) | 100 USDC approved |
|
|
355
|
+
| `publish_risk_score` | [`0x3f5cefe5...`](https://atlantic.pharosscan.xyz/tx/0x3f5cefe5725512b57f3dc7c08bb8f588fa3691fc4592ccec66ba2cb6ef4c9a3a) | Score 3 published |
|
|
349
356
|
| Registry deploy | [`0x7f2106b5...`](https://atlantic.pharosscan.xyz/tx/0x7f2106b5bc8c5eddcd2ea7782669ccb0b4a107da4943cffd5d49357ab5820d2e) | Contract created |
|
|
350
357
|
|
|
351
|
-
### Test Results —
|
|
358
|
+
### Test Results — 17 Tools, All Passing
|
|
352
359
|
|
|
353
360
|
```
|
|
354
361
|
# │ Status │ Tool │ Key Output
|
|
355
|
-
|
|
356
|
-
1
|
|
357
|
-
2
|
|
358
|
-
3
|
|
359
|
-
4
|
|
360
|
-
5
|
|
361
|
-
6
|
|
362
|
-
7
|
|
363
|
-
8
|
|
364
|
-
9
|
|
365
|
-
10
|
|
366
|
-
11
|
|
367
|
-
12
|
|
368
|
-
13
|
|
369
|
-
14
|
|
370
|
-
15
|
|
371
|
-
16
|
|
362
|
+
──────────────────────────────────────────────────────────────────────────────────────────
|
|
363
|
+
1 │ ✅ PASS │ assess_risk │ score=2, low, proceed
|
|
364
|
+
2 │ ✅ PASS │ simulate_transaction │ wouldSucceed=true, gas=633592
|
|
365
|
+
3 │ ✅ PASS │ simulate_tx (xfer) │ wouldSucceed=true, gas=21000
|
|
366
|
+
4 │ ✅ PASS │ get_token_price │ PHRS=$unavailable
|
|
367
|
+
5 │ ✅ PASS │ get_wallet_balance │ PHRS=19.363297355, USDC=0.050675, total=$0....
|
|
368
|
+
6 │ ✅ PASS │ check_allowance │ allowance=100, needsApproval=false
|
|
369
|
+
7 │ ✅ PASS │ estimate_gas │ gas=624491, cost=0.00624491 PHRS, sufficien...
|
|
370
|
+
8 │ ✅ PASS │ get_gas_price │ 10.0000 Gwei, trend=normal
|
|
371
|
+
9 │ ✅ PASS │ get_pool_info │ available=false, no pool
|
|
372
|
+
10 │ ✅ PASS │ execute_swap │ out=0.0317053705 USDC, tx=0xdb814a334337d47...
|
|
373
|
+
11 │ ✅ PASS │ send_payment │ sent 0.001 PHRS, tx=0xbf26b767cb8a5e599b6ac...
|
|
374
|
+
12 │ ✅ PASS │ approve_token │ approved 100 USDC, tx=0xca21ac22c870f1bc69c...
|
|
375
|
+
13 │ ✅ PASS │ get_transaction_status │ status=success, block=23970700
|
|
376
|
+
14 │ ✅ PASS │ publish_risk_score │ score=3, tx=0x3f5cefe5725512b57f3dc7c08bb8f...
|
|
377
|
+
15 │ ✅ PASS │ query_risk_registry │ score=3, level=low, ts=2026-06-11T11:53:17....
|
|
378
|
+
16 │ ✅ PASS │ check_token_security │ score=100, honeypot=false
|
|
379
|
+
17 │ ✅ PASS │ get_execution_history │ 5 txs
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## 🪙 x402 Monetized API Server
|
|
385
|
+
|
|
386
|
+
SafeHands exposes a paid HTTP REST API server using the Coinbase-designed **x402 micro-payment protocol** on Pharos Atlantic. This allows developers to offer risk gating and intelligence tools as a paid utility to external AI agents.
|
|
387
|
+
|
|
388
|
+
### API Endpoints
|
|
389
|
+
- `GET /health` (Free) — Health check, token registry, and receiver addresses.
|
|
390
|
+
- `GET /assess-risk` (Paid: USDC 0.001) — Gate queries with 5-dimension risk score checks.
|
|
391
|
+
- `GET /check-token-security` (Paid: USDC 0.001) — Verify contract security, honeypots, and token code privileges.
|
|
392
|
+
- `GET /simulate-transaction` (Paid: USDC 0.001) — Perform dry-runs of transfers and swaps.
|
|
393
|
+
|
|
394
|
+
### Flow Architecture
|
|
395
|
+
1. **Challenge:** When a client fetches a gated resource, the server replies with `HTTP 402 Payment Required` and a Base64-encoded `PAYMENT-REQUIRED` header specifying token address, receiver wallet, and pricing details.
|
|
396
|
+
2. **On-Chain Settlement:** The client signs a standard authorization envelope with their private key, transferring the micro-payment directly to the recipient wallet.
|
|
397
|
+
3. **Resubmission:** The client resubmits the request, appending the payload signature in the `PAYMENT-SIGNATURE` header.
|
|
398
|
+
4. **Unlocking Content:** The integrated Facilitator verifies the signature, settles the transfer on-chain, and responds with `HTTP 200 OK` carrying the resource response payload.
|
|
399
|
+
|
|
400
|
+
### Quick Start (Server)
|
|
401
|
+
Start the paid server:
|
|
402
|
+
```bash
|
|
403
|
+
npm run x402-server
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Quick Start (Client)
|
|
407
|
+
Use the `x402_pay_and_fetch` tool:
|
|
408
|
+
```json
|
|
409
|
+
{
|
|
410
|
+
"name": "x402_pay_and_fetch",
|
|
411
|
+
"arguments": {
|
|
412
|
+
"url": "http://localhost:4021/assess-risk?action=swap&tokenIn=PHRS&tokenOut=USDC&amount=0.01&walletAddress=0x6730d3a2a217108ab53ccfe60ffdad05d3c124e5"
|
|
413
|
+
}
|
|
414
|
+
}
|
|
372
415
|
```
|
|
373
416
|
|
|
374
417
|
---
|
|
@@ -384,16 +427,28 @@ Security self-audit — compliant with Pharos Skill Scanner guidelines:
|
|
|
384
427
|
- ✅ **Risk gating on execution** — `execute_swap` and `send_payment` run full risk assessment before execution. All write tools enforce safety checks before touching the chain.
|
|
385
428
|
- ✅ **Automatic blocking** — score > 80 halts execution, no silent failures
|
|
386
429
|
|
|
430
|
+
### Third-Party API Usage
|
|
431
|
+
|
|
432
|
+
SafeHands connects to three external services — all well-known, publicly documented Web3 infrastructure:
|
|
433
|
+
|
|
434
|
+
| Service | Endpoint | Purpose | Data Sent |
|
|
435
|
+
|---------|----------|---------|----------|
|
|
436
|
+
| **Pharos RPC** | `atlantic.dplabs-internal.com` | On-chain reads/writes | Standard JSON-RPC calls (public data) |
|
|
437
|
+
| **DODO Route API** | `api.dodoex.io` | DEX swap routing & quotes | Public token addresses, amounts |
|
|
438
|
+
| **GoPlus Security API** | `api.gopluslabs.io` | Token contract security scanning | Public token contract address |
|
|
439
|
+
|
|
440
|
+
> No private keys, wallet balances, or user-identifying data are ever sent to any external API. The DODO API key is a public, read-only key from DODO's official documentation.
|
|
441
|
+
|
|
387
442
|
---
|
|
388
443
|
|
|
389
444
|
## 🗺️ Roadmap
|
|
390
445
|
|
|
391
446
|
### Phase 1 — Hackathon (Current) ✅
|
|
392
|
-
- [x]
|
|
447
|
+
- [x] 17 MCP tools with real on-chain execution
|
|
393
448
|
- [x] 5-dimension risk scoring engine
|
|
394
449
|
- [x] FaroSwap (DODO) integration
|
|
395
450
|
- [x] On-chain RiskRegistry smart contract
|
|
396
|
-
- [x]
|
|
451
|
+
- [x] 17/17 integration tests passing on Pharos Atlantic
|
|
397
452
|
|
|
398
453
|
### Phase 2 — NPM Package
|
|
399
454
|
- [x] Publish `safehands-pharos` to npm
|
|
@@ -405,7 +460,8 @@ Security self-audit — compliant with Pharos Skill Scanner guidelines:
|
|
|
405
460
|
- [ ] Reputation scoring from historical risk behavior
|
|
406
461
|
- [ ] Multi-agent swap coordination with risk consensus
|
|
407
462
|
|
|
408
|
-
### Phase 4 — DeFi
|
|
463
|
+
### Phase 4 — DeFi & x402 Integration
|
|
464
|
+
- [x] **x402 Paywall & Monetization:** Native integration with the Pharos x402 HTTP-payment standard. Enable SafeHands to charge micro-amounts of USDC per risk assessment request, allowing agents to monetize their safety gating services autonomously.
|
|
409
465
|
- [ ] ELFi lending protocol integration
|
|
410
466
|
- [ ] Multi-hop route optimization for large swaps
|
|
411
467
|
- [ ] Smart contract escrow for agent-to-agent payments
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// ─── SafeHands MCP Server ──────────────────────────────────────────────
|
|
3
|
-
// Entry point — registers all
|
|
3
|
+
// Entry point — registers all 17 tools and starts the MCP server.
|
|
4
4
|
// ────────────────────────────────────────────────────────────────────────
|
|
5
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
6
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -19,6 +19,8 @@ import { queryRiskRegistrySchema, handleQueryRiskRegistry } from "./tools/queryR
|
|
|
19
19
|
import { approveTokenSchema, handleApproveToken } from "./tools/approveToken.js";
|
|
20
20
|
import { getGasPriceSchema, handleGetGasPrice } from "./tools/getGasPrice.js";
|
|
21
21
|
import { getPoolInfoSchema, handleGetPoolInfo } from "./tools/getPoolInfo.js";
|
|
22
|
+
import { checkTokenSecuritySchema, handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
|
|
23
|
+
import { x402PayAndFetchSchema, handleX402PayAndFetch } from "./tools/x402PayAndFetch.js";
|
|
22
24
|
// ─── CLI Help ──────────────────────────────────────────────────────────
|
|
23
25
|
if (process.argv.includes("--help") || process.argv.includes("-h")) {
|
|
24
26
|
process.stdout.write(`
|
|
@@ -41,9 +43,10 @@ CONNECT TO CLAUDE DESKTOP
|
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
|
|
44
|
-
AVAILABLE TOOLS (
|
|
46
|
+
AVAILABLE TOOLS (17)
|
|
45
47
|
Core Safety
|
|
46
48
|
assess_risk 5-dimension risk score (0-100) for any swap or transfer
|
|
49
|
+
check_token_security Check token contract security/honeypot via GoPlus API
|
|
47
50
|
simulate_transaction Dry run via eth_call — zero gas spent
|
|
48
51
|
estimate_gas Gas cost in PHRS and USD before execution
|
|
49
52
|
|
|
@@ -67,6 +70,9 @@ AVAILABLE TOOLS (15)
|
|
|
67
70
|
publish_risk_score Publish risk assessment to on-chain RiskRegistry
|
|
68
71
|
query_risk_registry Query any wallet's risk score — no key needed
|
|
69
72
|
|
|
73
|
+
x402 Payments
|
|
74
|
+
x402_pay_and_fetch Fetch paid API resources with automatic HTTP 402 signature and payment
|
|
75
|
+
|
|
70
76
|
CHAIN
|
|
71
77
|
Pharos Atlantic Testnet (Chain ID: 688689)
|
|
72
78
|
RPC: https://atlantic.dplabs-internal.com/
|
|
@@ -99,9 +105,9 @@ ENVIRONMENT
|
|
|
99
105
|
⚠️ Private keys are never stored or logged by SafeHands.
|
|
100
106
|
They are passed per-request only.
|
|
101
107
|
|
|
102
|
-
NOTE:
|
|
103
|
-
Only these
|
|
104
|
-
execute_swap, send_payment, approve_token, publish_risk_score
|
|
108
|
+
NOTE: 12 of 17 tools work without any credentials.
|
|
109
|
+
Only these 5 tools require PRIVATE_KEY:
|
|
110
|
+
execute_swap, send_payment, approve_token, publish_risk_score, x402_pay_and_fetch
|
|
105
111
|
|
|
106
112
|
MORE
|
|
107
113
|
npm: https://www.npmjs.com/package/safehands-pharos
|
|
@@ -122,7 +128,7 @@ if (!hasPrivateKey || !hasWalletAddress) {
|
|
|
122
128
|
console.error(" WALLET_ADDRESS not set — some tools may return incomplete results");
|
|
123
129
|
}
|
|
124
130
|
console.error("");
|
|
125
|
-
console.error("
|
|
131
|
+
console.error(" 12 read-only tools are still fully functional.");
|
|
126
132
|
console.error(" To enable all tools, set credentials in your MCP client config:");
|
|
127
133
|
console.error(' "env": { "PRIVATE_KEY": "0x...", "WALLET_ADDRESS": "0x..." }');
|
|
128
134
|
console.error("");
|
|
@@ -193,6 +199,14 @@ server.tool("get_pool_info", "Fetch DODO liquidity pool info for a token pair on
|
|
|
193
199
|
const result = await handleGetPoolInfo(params);
|
|
194
200
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
195
201
|
});
|
|
202
|
+
server.tool("check_token_security", "Check token contract security (honeypot, mintable, ownership privileges, tax) via GoPlus Security API.", checkTokenSecuritySchema.shape, async (params) => {
|
|
203
|
+
const result = await handleCheckTokenSecurity(params);
|
|
204
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
205
|
+
});
|
|
206
|
+
server.tool("x402_pay_and_fetch", "Fetch resources from an HTTP x402 payment-gated server. Automatically handles HTTP 402 payment challenge.", x402PayAndFetchSchema.shape, async (params) => {
|
|
207
|
+
const result = await handleX402PayAndFetch(params);
|
|
208
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
209
|
+
});
|
|
196
210
|
// ─── Start Server ──────────────────────────────────────────────────────
|
|
197
211
|
async function main() {
|
|
198
212
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,0EAA0E;AAC1E,kEAAkE;AAClE,2EAA2E;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -4,7 +4,11 @@ export declare const EXPLORER_BASE = "https://atlantic.pharosscan.xyz/tx/";
|
|
|
4
4
|
/** Native PHRS — sentinel address used by DODO API for native token */
|
|
5
5
|
export declare const PHRS_ADDRESS: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
|
|
6
6
|
export declare const USDT_ADDRESS: "0xE7E84B8B4f39C507499c40B4ac199B050e2882d5";
|
|
7
|
-
export declare const USDC_ADDRESS: "
|
|
7
|
+
export declare const USDC_ADDRESS: "0xcfC8330f4BCAB529c625D12781b1C19466A9Fc8B";
|
|
8
|
+
export declare const TEST_USDC_ADDRESS: "0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8";
|
|
9
|
+
export declare const WBTC_ADDRESS: "0x0c64F03EEa5c30946D5c55B4b532D08ad74638a4";
|
|
10
|
+
export declare const WETH_ADDRESS: "0x7d211F77525ea39A0592794f793cC1036eEaccD5";
|
|
11
|
+
export declare const WPHRS_ADDRESS: "0x838800b758277CC111B2d48Ab01e5E164f8E9471";
|
|
8
12
|
export declare const TOKEN_DECIMALS: Record<string, number>;
|
|
9
13
|
export declare const TOKEN_MAP: Record<string, `0x${string}`>;
|
|
10
14
|
export declare const DODO_APPROVE_ADDRESS: "0x4Cf317b8918FbE8A890c01eDAb7d548555Ac2cE9";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,0CAA0C,CAAC;AAC/D,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,aAAa,wCAAwC,CAAC;AAInE,uEAAuE;AACvE,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,0CAA0C,CAAC;AAC/D,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,aAAa,wCAAwC,CAAC;AAInE,uEAAuE;AACvE,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,iBAAiB,EAAG,4CAAqD,CAAC;AACvF,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,YAAY,EAAG,4CAAqD,CAAC;AAClF,eAAO,MAAM,aAAa,EAAG,4CAAqD,CAAC;AAInF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAejD,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAQnD,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAG,4CAAqD,CAAC;AAC1F,eAAO,MAAM,wBAAwB,EAAG,4CAAqD,CAAC;AAC9F,eAAO,MAAM,wBAAwB,EAAG,4CAAqD,CAAC;AAI9F,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,eAAO,MAAM,YAAY,uBAAuB,CAAC;AACjD,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,mBAAmB,0CAA0C,CAAC;AAI3E,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAIxC,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AAIX,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDZ,CAAC;AAIX,eAAO,MAAM,qBAAqB,EAAG,4CAAqD,CAAC;AAE3F,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CpB,CAAC"}
|