starkfi 0.1.0 → 0.2.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/MCP.md +70 -0
- package/README.md +120 -58
- package/dist/commands/auth/login.js +2 -2
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/verify.d.ts.map +1 -1
- package/dist/commands/auth/verify.js +2 -2
- package/dist/commands/auth/verify.js.map +1 -1
- package/dist/commands/batch/batch.d.ts +3 -0
- package/dist/commands/batch/batch.d.ts.map +1 -0
- package/dist/commands/batch/batch.js +143 -0
- package/dist/commands/batch/batch.js.map +1 -0
- package/dist/commands/chain/tx-status.js +2 -2
- package/dist/commands/chain/tx-status.js.map +1 -1
- package/dist/commands/config/config.d.ts.map +1 -1
- package/dist/commands/config/config.js +14 -31
- package/dist/commands/config/config.js.map +1 -1
- package/dist/commands/lending/lending.d.ts +1 -0
- package/dist/commands/lending/lending.d.ts.map +1 -1
- package/dist/commands/lending/lending.js +187 -48
- package/dist/commands/lending/lending.js.map +1 -1
- package/dist/commands/portfolio/portfolio.d.ts +3 -0
- package/dist/commands/portfolio/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio/portfolio.js +76 -0
- package/dist/commands/portfolio/portfolio.js.map +1 -0
- package/dist/commands/staking/staking.d.ts +1 -1
- package/dist/commands/staking/staking.d.ts.map +1 -1
- package/dist/commands/staking/staking.js +142 -61
- package/dist/commands/staking/staking.js.map +1 -1
- package/dist/commands/trade/multi-swap.d.ts +3 -0
- package/dist/commands/trade/multi-swap.d.ts.map +1 -0
- package/dist/commands/trade/multi-swap.js +140 -0
- package/dist/commands/trade/multi-swap.js.map +1 -0
- package/dist/commands/trade/status.js +2 -2
- package/dist/commands/trade/status.js.map +1 -1
- package/dist/commands/trade/swap.d.ts.map +1 -1
- package/dist/commands/trade/swap.js +45 -10
- package/dist/commands/trade/swap.js.map +1 -1
- package/dist/commands/wallet/balance.d.ts.map +1 -1
- package/dist/commands/wallet/balance.js +19 -2
- package/dist/commands/wallet/balance.js.map +1 -1
- package/dist/commands/wallet/deploy.d.ts.map +1 -1
- package/dist/commands/wallet/deploy.js +2 -1
- package/dist/commands/wallet/deploy.js.map +1 -1
- package/dist/commands/wallet/send.d.ts.map +1 -1
- package/dist/commands/wallet/send.js +45 -8
- package/dist/commands/wallet/send.js.map +1 -1
- package/dist/index.js +22 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/banner.d.ts +6 -0
- package/dist/lib/banner.d.ts.map +1 -0
- package/dist/lib/banner.js +78 -0
- package/dist/lib/banner.js.map +1 -0
- package/dist/lib/config.d.ts +0 -11
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +0 -20
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +2 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +2 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/format.d.ts +43 -2
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +51 -5
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/retry.d.ts +15 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +29 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/validation.d.ts +0 -12
- package/dist/lib/validation.d.ts.map +1 -1
- package/dist/lib/validation.js +1 -23
- package/dist/lib/validation.js.map +1 -1
- package/dist/mcp/handlers/batch.d.ts +13 -0
- package/dist/mcp/handlers/batch.d.ts.map +1 -0
- package/dist/mcp/handlers/batch.js +33 -0
- package/dist/mcp/handlers/batch.js.map +1 -0
- package/dist/mcp/handlers/config.d.ts +1 -1
- package/dist/mcp/handlers/config.d.ts.map +1 -1
- package/dist/mcp/handlers/config.js +11 -12
- package/dist/mcp/handlers/config.js.map +1 -1
- package/dist/mcp/handlers/index.d.ts +3 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -1
- package/dist/mcp/handlers/index.js +3 -0
- package/dist/mcp/handlers/index.js.map +1 -1
- package/dist/mcp/handlers/lending.d.ts +12 -1
- package/dist/mcp/handlers/lending.d.ts.map +1 -1
- package/dist/mcp/handlers/lending.js +67 -23
- package/dist/mcp/handlers/lending.js.map +1 -1
- package/dist/mcp/handlers/multi-swap.d.ts +27 -0
- package/dist/mcp/handlers/multi-swap.d.ts.map +1 -0
- package/dist/mcp/handlers/multi-swap.js +73 -0
- package/dist/mcp/handlers/multi-swap.js.map +1 -0
- package/dist/mcp/handlers/portfolio.d.ts +7 -0
- package/dist/mcp/handlers/portfolio.d.ts.map +1 -0
- package/dist/mcp/handlers/portfolio.js +11 -0
- package/dist/mcp/handlers/portfolio.js.map +1 -0
- package/dist/mcp/handlers/staking.d.ts +13 -1
- package/dist/mcp/handlers/staking.d.ts.map +1 -1
- package/dist/mcp/handlers/staking.js +18 -5
- package/dist/mcp/handlers/staking.js.map +1 -1
- package/dist/mcp/handlers/trade.d.ts +1 -0
- package/dist/mcp/handlers/trade.d.ts.map +1 -1
- package/dist/mcp/handlers/trade.js +23 -9
- package/dist/mcp/handlers/trade.js.map +1 -1
- package/dist/mcp/handlers/wallet.d.ts +1 -0
- package/dist/mcp/handlers/wallet.d.ts.map +1 -1
- package/dist/mcp/handlers/wallet.js +16 -1
- package/dist/mcp/handlers/wallet.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +102 -33
- package/dist/mcp/tools.js.map +1 -1
- package/dist/services/api/client.d.ts +0 -12
- package/dist/services/api/client.d.ts.map +1 -1
- package/dist/services/api/client.js +3 -8
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/auth/session.d.ts +1 -7
- package/dist/services/auth/session.d.ts.map +1 -1
- package/dist/services/auth/session.js +20 -0
- package/dist/services/auth/session.js.map +1 -1
- package/dist/services/batch/batch.d.ts +36 -0
- package/dist/services/batch/batch.d.ts.map +1 -0
- package/dist/services/batch/batch.js +111 -0
- package/dist/services/batch/batch.js.map +1 -0
- package/dist/services/config/config.d.ts +4 -0
- package/dist/services/config/config.d.ts.map +1 -1
- package/dist/services/config/config.js +31 -1
- package/dist/services/config/config.js.map +1 -1
- package/dist/services/fibrous/config.d.ts +4 -0
- package/dist/services/fibrous/config.d.ts.map +1 -0
- package/dist/services/fibrous/config.js +4 -0
- package/dist/services/fibrous/config.js.map +1 -0
- package/dist/services/fibrous/health.js +1 -1
- package/dist/services/fibrous/health.js.map +1 -1
- package/dist/services/fibrous/route.d.ts +19 -6
- package/dist/services/fibrous/route.d.ts.map +1 -1
- package/dist/services/fibrous/route.js +64 -3
- package/dist/services/fibrous/route.js.map +1 -1
- package/dist/services/portfolio/portfolio.d.ts +35 -0
- package/dist/services/portfolio/portfolio.d.ts.map +1 -0
- package/dist/services/portfolio/portfolio.js +106 -0
- package/dist/services/portfolio/portfolio.js.map +1 -0
- package/dist/services/simulate/simulate.d.ts +18 -0
- package/dist/services/simulate/simulate.d.ts.map +1 -0
- package/dist/services/simulate/simulate.js +61 -0
- package/dist/services/simulate/simulate.js.map +1 -0
- package/dist/services/staking/staking.d.ts +5 -13
- package/dist/services/staking/staking.d.ts.map +1 -1
- package/dist/services/staking/staking.js +44 -52
- package/dist/services/staking/staking.js.map +1 -1
- package/dist/services/starkzap/client.d.ts.map +1 -1
- package/dist/services/starkzap/client.js +38 -18
- package/dist/services/starkzap/client.js.map +1 -1
- package/dist/services/starkzap/config.d.ts +6 -0
- package/dist/services/starkzap/config.d.ts.map +1 -0
- package/dist/services/starkzap/config.js +13 -0
- package/dist/services/starkzap/config.js.map +1 -0
- package/dist/services/tokens/balances.d.ts.map +1 -1
- package/dist/services/tokens/balances.js +26 -14
- package/dist/services/tokens/balances.js.map +1 -1
- package/dist/services/tokens/tokens.d.ts +2 -3
- package/dist/services/tokens/tokens.d.ts.map +1 -1
- package/dist/services/tokens/tokens.js +3 -8
- package/dist/services/tokens/tokens.js.map +1 -1
- package/dist/services/vesu/api.d.ts +28 -0
- package/dist/services/vesu/api.d.ts.map +1 -0
- package/dist/services/vesu/api.js +97 -0
- package/dist/services/vesu/api.js.map +1 -0
- package/dist/services/vesu/config.d.ts +9 -0
- package/dist/services/vesu/config.d.ts.map +1 -0
- package/dist/services/vesu/config.js +32 -0
- package/dist/services/vesu/config.js.map +1 -0
- package/dist/services/vesu/index.d.ts +2 -0
- package/dist/services/vesu/index.d.ts.map +1 -1
- package/dist/services/vesu/index.js +2 -0
- package/dist/services/vesu/index.js.map +1 -1
- package/dist/services/vesu/lending.d.ts +8 -1
- package/dist/services/vesu/lending.d.ts.map +1 -1
- package/dist/services/vesu/lending.js +171 -52
- package/dist/services/vesu/lending.js.map +1 -1
- package/dist/services/vesu/pools.d.ts +5 -11
- package/dist/services/vesu/pools.d.ts.map +1 -1
- package/dist/services/vesu/pools.js +11 -31
- package/dist/services/vesu/pools.js.map +1 -1
- package/package.json +88 -82
- package/skills/README.md +63 -0
- package/skills/authenticate-wallet/SKILL.md +119 -0
- package/skills/balance/SKILL.md +80 -0
- package/skills/batch/SKILL.md +118 -0
- package/skills/config/SKILL.md +144 -0
- package/skills/lending/SKILL.md +209 -0
- package/skills/multi-swap/SKILL.md +95 -0
- package/skills/portfolio/SKILL.md +82 -0
- package/skills/send/SKILL.md +82 -0
- package/skills/staking/SKILL.md +188 -0
- package/skills/trade/SKILL.md +92 -0
package/MCP.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Model Context Protocol (MCP) Integration
|
|
2
|
+
|
|
3
|
+
StarkFi operates as a fully-featured Model Context Protocol (MCP) server. By executing `npx starkfi mcp-start` over the `stdio` transport layer, AI development environments such as Cursor, Claude Desktop, and Antigravity can interact with the Starknet blockchain and execute decentralized finance operations through natural language commands.
|
|
4
|
+
|
|
5
|
+
## Client Configuration Instructions
|
|
6
|
+
|
|
7
|
+
To integrate StarkFi into your AI environment, configure your specific MCP client settings file (e.g., `.cursor/mcp.json`, `claude_desktop_config.json`, or `~/.gemini/antigravity/mcp_config.json`) with the following definition:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"starkfi": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": ["-y", "starkfi", "mcp-start"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Authentication Requirement:** The StarkFi CLI must be authenticated locally (via `npx starkfi auth login`) before the MCP server can execute any state-mutating transactions on behalf of the user.
|
|
21
|
+
|
|
22
|
+
## Comprehensive Tool Registry
|
|
23
|
+
|
|
24
|
+
Upon initialization, the StarkFi server dynamically provisions the following tool schemas to the connected AI client.
|
|
25
|
+
|
|
26
|
+
### Read-Only Tools (State Verification and Information Gathering)
|
|
27
|
+
|
|
28
|
+
These tools do not mutate blockchain state or require user confirmation to execute.
|
|
29
|
+
|
|
30
|
+
| Tool Identifier | Functional Description |
|
|
31
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
32
|
+
| `get_auth_status` | Validates the active CLI session and verifies Fibrous API connectivity. |
|
|
33
|
+
| `get_balance` | Retrieves STRK, ETH, and specified ERC-20 token balances for the authenticated wallet. |
|
|
34
|
+
| `get_tx_status` | Queries the Starknet sequencer for transaction status and execution receipts. |
|
|
35
|
+
| `get_portfolio` | Returns a complete DeFi portfolio: all token balances with USD values, staking positions, and lending positions in one call. |
|
|
36
|
+
| `get_swap_quote` | Calculates optimal routing, expected output, and slippage prior to execution. |
|
|
37
|
+
| `get_multi_swap_quote` | Calculates optimal batch routing for 2-3 swap pairs at once. Uses Fibrous routeBatch API when all pairs share the same output token, otherwise falls back to parallel individual routes. |
|
|
38
|
+
| `list_validators` | Enumerates all officially recognized Starknet staking validators. |
|
|
39
|
+
| `list_pools` | Enumerates available delegation pools for a validator, including multi-token pools. |
|
|
40
|
+
| `get_staking_info` | Retrieves specific user staked balances, unclaimed rewards, and active cooldown periods. |
|
|
41
|
+
| `get_stake_status` | Generates a consolidated staking dashboard across validators. Accepts an optional target validator name to explicitly filter the view. |
|
|
42
|
+
| `list_lending_pools` | Enumerates active Vesu V2 lending pools with live data from the Vesu API — assets (with APY/APR), supported pairs, protocol version, and deprecation status. Accepts optional name filter for detailed view. |
|
|
43
|
+
| `get_lending_position` | Retrieves the user's supplied yield, outstanding debt, Health Factor, and Risk Level for a specific pool. The borrow token is optional if only checking supply balances. |
|
|
44
|
+
|
|
45
|
+
### Transactional Tools (State Mutation)
|
|
46
|
+
|
|
47
|
+
These tools construct and broadcast transactions. The connecting AI client is strictly responsible for prompting the user for explicit confirmation before finalizing the execution. All transactional tools accept an optional `simulate` parameter — when set to `true`, the tool estimates fees and validates the transaction without broadcasting.
|
|
48
|
+
|
|
49
|
+
| Tool Identifier | Functional Description |
|
|
50
|
+
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
51
|
+
| `deploy_account` | Deploys the associated smart contract account to the Starknet network (idempotent operation). |
|
|
52
|
+
| `swap_tokens` | Broadcasts an aggregated token swap transaction via the Fibrous router. Supports `simulate` for dry-run. |
|
|
53
|
+
| `send_tokens` | Broadcasts a standard token transfer transaction for STRK, ETH, or ERC-20 assets. Pre-checks balance. Supports `simulate` for dry-run. |
|
|
54
|
+
| `multi_swap` | Executes 2-3 token swaps in a single transaction via Fibrous batch routing. Supports `simulate` for dry-run. Call `get_multi_swap_quote` first. |
|
|
55
|
+
| `batch_execute` | Executes multiple DeFi operations (swap, stake, supply, send) in a single Starknet multicall. Minimum 2 operations. Supports `simulate`. |
|
|
56
|
+
| `stake_tokens` | Executes multi-token smart delegation (STRK, WBTC, tBTC, SolvBTC, LBTC). Auto-detects enter vs. add. |
|
|
57
|
+
| `unstake_tokens` | Manages the strict two-step Starknet unstaking lifecycle. Supports multi-token pools. |
|
|
58
|
+
| `claim_rewards` | Extracts earned rewards from a staking pool to the user's wallet. |
|
|
59
|
+
| `compound_rewards` | Executes an atomic transaction to claim pending rewards and immediately restake them. |
|
|
60
|
+
| `supply_assets` | Deposits specified assets into a Vesu V2 pool to generate yield. Pool resolved by name (e.g. 'Prime') or contract address. |
|
|
61
|
+
| `withdraw_assets` | Redeems supplied assets from a Vesu V2 pool. Pool resolved by name or contract address. |
|
|
62
|
+
| `borrow_assets` | Executes an atomic collateral deposit and subsequent asset borrow against a Vesu V2 pool. Supports using supplied vTokens. |
|
|
63
|
+
| `repay_debt` | Processes the repayment of borrowed assets against an existing Vesu V2 position. |
|
|
64
|
+
| `close_position` | Atomically closes an active Vesu V2 lending position. Repays all outstanding debt and withdraws all collateral in a single unified execution. |
|
|
65
|
+
|
|
66
|
+
### Configuration Utilities
|
|
67
|
+
|
|
68
|
+
| Tool Identifier | Functional Description |
|
|
69
|
+
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
70
|
+
| `config_action` | Views and modifies global CLI behavior: RPC routing (set/get), network selection, and Gas Abstraction (default: gasless via Paymaster in STRK; configurable to ETH, USDC, USDT, DAI; or developer-sponsored Gasfree mode). |
|
package/README.md
CHANGED
|
@@ -1,83 +1,145 @@
|
|
|
1
1
|
# StarkFi
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
Powered by [StarkZap](https://github.com/keep-starknet-strange/starkzap) SDK, [Fibrous](https://fibrous.finance) aggregation, and [AVNU](https://docs.avnu.fi) Paymaster.
|
|
3
|
+
StarkFi is an advanced command-line interface and Model Context Protocol (MCP) toolkit designed for decentralized finance operations on Starknet. Engineered for both direct developer interaction and artificial intelligence agent workflows, it provides a highly optimized, abstracted layer over complex DeFi protocols.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
The toolkit integrates the StarkZap SDK, Privy authentication, Fibrous trade aggregation, Vesu V2 lending, and AVNU paymaster services into a unified, secure environment.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
## System Architecture Overview
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
- **Gas Abstraction:** Default (STRK), Gasfree (developer-sponsored), or Gasless (user pays in USDC/ETH).
|
|
12
|
-
- **Staking Management:** Full lifecycle support for delegation pools (stake, compound, unstake).
|
|
13
|
-
- **Lending & Borrowing:** Supply, withdraw, borrow, and repay via Vesu V2 lending protocol.
|
|
14
|
-
- **AI Integration:** Built-in Model Context Protocol (MCP) server.
|
|
9
|
+
StarkFi abstracts the complexities of the Starknet ecosystem through the following core capabilities:
|
|
15
10
|
|
|
16
|
-
|
|
11
|
+
- **Intelligent Trade Routing:** Seamless token swaps aggregated via Fibrous for optimal execution paths.
|
|
12
|
+
- **Multi-Swap:** Execute up to 3 token swaps in a single transaction via Fibrous batch routing.
|
|
13
|
+
- **Transaction Batching:** Bundle different operations (swap + stake + supply + send) into a single Starknet multicall.
|
|
14
|
+
- **Simulation / Dry Run:** Estimate fees and validate any transaction without broadcasting — available on swap, send, multi-swap, and batch.
|
|
15
|
+
- **Portfolio Dashboard:** Consolidated view of all DeFi positions — token balances (with USD), staking, and lending.
|
|
16
|
+
- **Advanced Gas Abstraction:** All transactions are routed through the Paymaster by default. Gas is paid in STRK (configurable to ETH, USDC, USDT, DAI). Developer-sponsored (Gasfree) mode is also available.
|
|
17
|
+
- **Delegation and Staking Management:** Multi-token staking lifecycle controls (STRK, WBTC, tBTC, SolvBTC, LBTC), including entering pools, restaking, atomic compounding, and intent-based unstaking.
|
|
18
|
+
- **Protocol-Level Lending:** Direct integration with Vesu V2 for supplying collateral, borrowing assets, and managing debt positions.
|
|
19
|
+
- **Native AI Integration:** An embedded Model Context Protocol (MCP) server that exposes the entire toolkit to LLM-driven environments such as Cursor and Claude.
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
## System Requirements
|
|
22
|
+
|
|
23
|
+
- **Node.js:** v18.0.0+
|
|
24
|
+
- **Starknet Auth Server:** Required for Email OTP (Privy TEE) and AVNU Paymaster gas abstraction.
|
|
25
|
+
|
|
26
|
+
## Quick Start Configuration
|
|
27
|
+
|
|
28
|
+
### 1. Secure Authentication
|
|
29
|
+
|
|
30
|
+
StarkFi utilizes a remote Auth Server for email-based OTP.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Email OTP Authentication (Requires running starkfi-server)
|
|
34
|
+
npx starkfi auth login <user@example.com>
|
|
35
|
+
npx starkfi auth verify <user@example.com> <verification_code>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Primary Command Reference
|
|
39
|
+
|
|
40
|
+
#### Session and Wallet Management
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx starkfi auth logout # Terminate active session
|
|
44
|
+
npx starkfi status # Check authentication status and API health
|
|
45
|
+
npx starkfi address # Display active Starknet address
|
|
46
|
+
npx starkfi deploy # Deploy smart account contract on-chain
|
|
47
|
+
npx starkfi balance [--token <symbol>] [--json] # Query token balances (STRK, ETH, ERC-20)
|
|
48
|
+
npx starkfi send <amount> <token> <recipient> [--simulate] [--json] # Execute token transfer
|
|
49
|
+
npx starkfi portfolio [--json] # Complete DeFi portfolio (balances, staking, lending)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### Trading and Aggregation (Fibrous)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx starkfi trade <amount> <from> <to> [--slippage <percent>] [--simulate] [--json]
|
|
56
|
+
npx starkfi multi-swap "<pairs>" [--slippage <percent>] [--simulate] [--json]
|
|
57
|
+
# Example: npx starkfi multi-swap "100 USDC>ETH, 50 USDT>STRK"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### Transaction Batching (Multicall)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npx starkfi batch [--simulate] \
|
|
64
|
+
--swap "100 USDC ETH" \
|
|
65
|
+
--stake "50 STRK karnot" \
|
|
66
|
+
--supply "200 USDC 0xPool" \
|
|
67
|
+
--send "10 STRK 0xAddr"
|
|
68
|
+
# All options are repeatable. Minimum 2 operations required.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Staking Operations
|
|
19
72
|
|
|
20
73
|
```bash
|
|
21
|
-
#
|
|
22
|
-
npx starkfi
|
|
23
|
-
npx starkfi
|
|
74
|
+
npx starkfi validators [--json] # Retrieve active validator set
|
|
75
|
+
npx starkfi pools <validator> [--json] # Query delegation pools per validator (multi-token)
|
|
76
|
+
npx starkfi stake-status [validator] [--json] # Display comprehensive or filtered staking dashboard
|
|
77
|
+
npx starkfi stake <amount> --validator <name> [--token <symbol>] [--simulate] # Smart stake (default: STRK)
|
|
78
|
+
npx starkfi rewards --validator <name> [--token <symbol>] <--claim|--compound>
|
|
79
|
+
npx starkfi unstake <intent|exit> --validator <name> [--token <symbol>] [--amount <amount>]
|
|
80
|
+
```
|
|
24
81
|
|
|
25
|
-
|
|
26
|
-
|
|
82
|
+
#### Environment Configuration
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npx starkfi tx-status <hash> # Query transaction receipt and status
|
|
86
|
+
npx starkfi config list # Display current environment configuration
|
|
87
|
+
npx starkfi config set-rpc <url> # Override default RPC endpoint
|
|
88
|
+
npx starkfi config get-rpc # Show current RPC URL
|
|
89
|
+
npx starkfi config set-network <mainnet|sepolia> # Modify target network
|
|
90
|
+
npx starkfi config set-gasfree <on|off> # Toggle developer-sponsored gas (Paymaster credits)
|
|
91
|
+
npx starkfi config set-gas-token <token|reset> # Set gas payment token (default: STRK)
|
|
27
92
|
```
|
|
28
93
|
|
|
29
|
-
|
|
94
|
+
#### Lending and Borrowing (Vesu V2)
|
|
95
|
+
|
|
96
|
+
Pool data (assets, APY, pairs) is fetched dynamically from the Vesu API.
|
|
30
97
|
|
|
31
98
|
```bash
|
|
32
|
-
#
|
|
33
|
-
npx starkfi
|
|
34
|
-
npx starkfi
|
|
35
|
-
npx starkfi
|
|
36
|
-
npx starkfi
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
npx starkfi
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
npx starkfi validators # List all validators
|
|
47
|
-
npx starkfi pools <validator> # List delegation pools
|
|
48
|
-
npx starkfi staking-stats # Full staking dashboard
|
|
49
|
-
npx starkfi stake <amount> --pool <pool> # Stake tokens
|
|
50
|
-
npx starkfi rewards --pool <pool> [--claim|--compound] # Manage rewards
|
|
51
|
-
npx starkfi unstake <intent|exit> --pool <pool> [--amount <amount>] # Unstake
|
|
52
|
-
|
|
53
|
-
# Network & Config
|
|
54
|
-
npx starkfi tx-status <hash> # Check tx receipt
|
|
55
|
-
npx starkfi config list # View configuration
|
|
56
|
-
npx starkfi config set-rpc <url> # Set custom RPC
|
|
57
|
-
npx starkfi config set-network <network> # Set network (mainnet/sepolia)
|
|
58
|
-
npx starkfi config set-gasfree <on|off> # Toggle AVNU-sponsored gas
|
|
59
|
-
npx starkfi config set-gas-token <token|off> # Pay gas in ERC-20 (USDC, etc)
|
|
60
|
-
|
|
61
|
-
# Lending (Vesu V2)
|
|
62
|
-
npx starkfi lend-pools # List Vesu lending pools
|
|
63
|
-
npx starkfi lend-pools Genesis # Filter by name
|
|
64
|
-
npx starkfi lend-supply 100 -p Genesis -t STRK # Supply assets to earn interest
|
|
65
|
-
npx starkfi lend-withdraw 50 -p Genesis -t STRK # Withdraw supplied assets
|
|
66
|
-
npx starkfi lend-borrow -p Genesis --collateral-amount 1 --collateral-token ETH --borrow-amount 500 --borrow-token USDC
|
|
67
|
-
npx starkfi lend-repay 250 -p Genesis -t USDC --collateral-token ETH # Repay debt
|
|
68
|
-
npx starkfi lend-status -p Genesis --collateral-token ETH --debt-token USDC
|
|
99
|
+
npx starkfi lend-pools # Summary table (name, version, asset/pair counts)
|
|
100
|
+
npx starkfi lend-pools <name> # Detail view (assets with APY, pairs, pool address)
|
|
101
|
+
npx starkfi lend-supply <amount> -p <pool> -t <token> # Supply liquidity
|
|
102
|
+
npx starkfi lend-withdraw <amount> -p <pool> -t <token> # Withdraw supplied liquidity
|
|
103
|
+
npx starkfi lend-borrow -p <pool> \ # Initiate collateralized borrow
|
|
104
|
+
--collateral-amount <n> --collateral-token <token> \
|
|
105
|
+
--borrow-amount <n> --borrow-token <token> \
|
|
106
|
+
[--use-supplied]
|
|
107
|
+
npx starkfi lend-repay <amount> -p <pool> -t <token> \ # Repay outstanding debt
|
|
108
|
+
--collateral-token <token>
|
|
109
|
+
npx starkfi lend-status -p <pool> \ # Query active position status
|
|
110
|
+
--collateral-token <token> [--borrow-token <token>]
|
|
111
|
+
npx starkfi lend-close -p <pool> \ # Atomically repay debt and withdraw collateral
|
|
112
|
+
--collateral-token <token> --borrow-token <token>
|
|
69
113
|
```
|
|
70
114
|
|
|
71
|
-
##
|
|
115
|
+
## Artificial Intelligence Integration (MCP)
|
|
72
116
|
|
|
73
|
-
StarkFi
|
|
117
|
+
StarkFi is built from the ground up to operate as an MCP server, allowing AI assistants to reason about and execute DeFi operations.
|
|
74
118
|
|
|
75
119
|
```bash
|
|
76
120
|
npx starkfi mcp-start
|
|
77
121
|
```
|
|
78
122
|
|
|
79
|
-
|
|
123
|
+
For detailed integration instructions and the complete LLM tool registry, refer to the [MCP Documentation](MCP.md).
|
|
124
|
+
|
|
125
|
+
## Agent Skills
|
|
126
|
+
|
|
127
|
+
StarkFi ships with **10 agent skills** — structured instruction sets that teach AI coding assistants (Cursor, Claude, Antigravity) how to use the CLI without custom prompting.
|
|
128
|
+
|
|
129
|
+
| Category | Skills |
|
|
130
|
+
| ----------- | ------------------------------------------------------------ |
|
|
131
|
+
| Auth | `authenticate-wallet` |
|
|
132
|
+
| Wallet Data | `balance`, `portfolio` |
|
|
133
|
+
| Transaction | `send`, `trade`, `multi-swap`, `batch`, `staking`, `lending` |
|
|
134
|
+
| Utility | `config` |
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Install via Skills CLI
|
|
138
|
+
npx skills add ahmetenesdur/starkfi
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Each skill documents the exact commands, parameters, error handling, and multi-step workflows an agent should follow. For full details, see the [Skills Documentation](skills/README.md).
|
|
80
142
|
|
|
81
143
|
## License
|
|
82
144
|
|
|
83
|
-
MIT
|
|
145
|
+
MIT License.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { apiLogin } from "../../services/api/client.js";
|
|
2
|
-
import { createSpinner, success } from "../../lib/format.js";
|
|
2
|
+
import { createSpinner, success, formatError } from "../../lib/format.js";
|
|
3
3
|
import { getOrCreateAuthCommand } from "../../lib/command.js";
|
|
4
4
|
export function registerLoginCommand(program) {
|
|
5
5
|
const authCmd = getOrCreateAuthCommand(program);
|
|
@@ -15,7 +15,7 @@ export function registerLoginCommand(program) {
|
|
|
15
15
|
console.log(`Run: starkfi auth verify ${email} <code>`);
|
|
16
16
|
}
|
|
17
17
|
catch (error) {
|
|
18
|
-
console.error(
|
|
18
|
+
console.error(formatError(error));
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
21
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC/B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YAExD,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,SAAS,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE5D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { apiVerify } from "../../services/api/client.js";
|
|
2
2
|
import { saveSession } from "../../services/auth/session.js";
|
|
3
|
-
import { createSpinner, success, formatResult } from "../../lib/format.js";
|
|
3
|
+
import { createSpinner, success, formatResult, formatError } from "../../lib/format.js";
|
|
4
4
|
import { STARKFI_API_URL_DEFAULT } from "../../lib/config.js";
|
|
5
5
|
import { createSDK, connectWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
|
|
6
6
|
import { ConfigService } from "../../services/config/config.js";
|
|
@@ -56,7 +56,7 @@ export function registerVerifyCommand(program) {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
catch (error) {
|
|
59
|
-
console.error(
|
|
59
|
+
console.error(formatError(error));
|
|
60
60
|
process.exit(1);
|
|
61
61
|
}
|
|
62
62
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6EzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG3D"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
+
import { initSDKAndWallet } from "../../services/starkzap/client.js";
|
|
3
|
+
import { buildBatch } from "../../services/batch/batch.js";
|
|
4
|
+
import { simulateTransaction } from "../../services/simulate/simulate.js";
|
|
5
|
+
import { createSpinner, formatResult, formatError } from "../../lib/format.js";
|
|
6
|
+
import { ErrorCode, StarkfiError } from "../../lib/errors.js";
|
|
7
|
+
/** Collect repeatable options into array. */
|
|
8
|
+
function collect(value, previous) {
|
|
9
|
+
return previous.concat([value]);
|
|
10
|
+
}
|
|
11
|
+
/** Parse "100 USDC ETH" into a typed BatchOperation. */
|
|
12
|
+
function parseOperation(type, raw) {
|
|
13
|
+
const parts = raw.trim().split(/\s+/);
|
|
14
|
+
switch (type) {
|
|
15
|
+
case "swap": {
|
|
16
|
+
if (parts.length < 3) {
|
|
17
|
+
throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --swap format: "${raw}". Expected: "100 USDC ETH"`);
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
type: "swap",
|
|
21
|
+
params: { amount: parts[0], from_token: parts[1], to_token: parts[2] },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
case "stake": {
|
|
25
|
+
if (parts.length < 2) {
|
|
26
|
+
throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --stake format: "${raw}". Expected: "50 STRK karnot" or "50 STRK 0xPool"`);
|
|
27
|
+
}
|
|
28
|
+
const target = parts[2];
|
|
29
|
+
const isAddress = target?.startsWith("0x");
|
|
30
|
+
return {
|
|
31
|
+
type: "stake",
|
|
32
|
+
params: {
|
|
33
|
+
amount: parts[0],
|
|
34
|
+
token: parts[1],
|
|
35
|
+
...(isAddress ? { pool: target } : { validator: target }),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
case "supply": {
|
|
40
|
+
if (parts.length < 3) {
|
|
41
|
+
throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --supply format: "${raw}". Expected: "200 USDC 0xPool"`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
type: "supply",
|
|
45
|
+
params: { amount: parts[0], token: parts[1], pool: parts[2] },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
case "send": {
|
|
49
|
+
if (parts.length < 3) {
|
|
50
|
+
throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --send format: "${raw}". Expected: "10 STRK 0x04a3..."`);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
type: "send",
|
|
54
|
+
params: { amount: parts[0], token: parts[1], to: parts[2] },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
default:
|
|
58
|
+
throw new StarkfiError(ErrorCode.INVALID_CONFIG, `Unknown operation type: ${type}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function registerBatchCommand(program) {
|
|
62
|
+
program
|
|
63
|
+
.command("batch")
|
|
64
|
+
.description("Execute multiple DeFi operations in a single Starknet transaction (multicall)")
|
|
65
|
+
.option("--swap <args>", 'Swap tokens: "100 USDC ETH" (repeatable)', collect, [])
|
|
66
|
+
.option("--stake <args>", 'Stake tokens: "50 STRK karnot" (repeatable)', collect, [])
|
|
67
|
+
.option("--supply <args>", 'Supply to Vesu: "200 USDC 0xPool" (repeatable)', collect, [])
|
|
68
|
+
.option("--send <args>", 'Send tokens: "10 STRK 0xAddr" (repeatable)', collect, [])
|
|
69
|
+
.option("--simulate", "Estimate fees and validate without executing")
|
|
70
|
+
.option("--json", "Output raw JSON")
|
|
71
|
+
.action(async (opts) => {
|
|
72
|
+
const spinner = createSpinner("Preparing batch...").start();
|
|
73
|
+
try {
|
|
74
|
+
const operations = [
|
|
75
|
+
...opts.swap.map((s) => parseOperation("swap", s)),
|
|
76
|
+
...opts.stake.map((s) => parseOperation("stake", s)),
|
|
77
|
+
...opts.supply.map((s) => parseOperation("supply", s)),
|
|
78
|
+
...opts.send.map((s) => parseOperation("send", s)),
|
|
79
|
+
];
|
|
80
|
+
if (operations.length < 2) {
|
|
81
|
+
throw new StarkfiError(ErrorCode.INVALID_AMOUNT, "Batch requires at least 2 operations. Provide multiple --swap/--stake/--supply/--send options.");
|
|
82
|
+
}
|
|
83
|
+
const session = requireSession();
|
|
84
|
+
const { wallet } = await initSDKAndWallet(session);
|
|
85
|
+
await wallet.ensureReady({ deploy: "if_needed" });
|
|
86
|
+
spinner.text = "Building batch transaction...";
|
|
87
|
+
const { builder, summary } = await buildBatch(wallet, session, operations);
|
|
88
|
+
spinner.stop();
|
|
89
|
+
console.log("\n Batch Operations:\n");
|
|
90
|
+
summary.forEach((s, i) => console.log(` ${i + 1}. ${s}`));
|
|
91
|
+
console.log();
|
|
92
|
+
if (opts.simulate) {
|
|
93
|
+
spinner.start();
|
|
94
|
+
spinner.text = "Simulating batch...";
|
|
95
|
+
const sim = await simulateTransaction(builder);
|
|
96
|
+
if (sim.success) {
|
|
97
|
+
spinner.succeed("Simulation complete");
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
spinner.fail("Simulation failed");
|
|
101
|
+
}
|
|
102
|
+
const simResult = {
|
|
103
|
+
mode: "SIMULATION (no TX sent)",
|
|
104
|
+
operations: operations.length,
|
|
105
|
+
estimatedFee: sim.estimatedFee,
|
|
106
|
+
estimatedFeeUsd: sim.estimatedFeeUsd,
|
|
107
|
+
calls: sim.callCount,
|
|
108
|
+
...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
|
|
109
|
+
};
|
|
110
|
+
if (opts.json) {
|
|
111
|
+
console.log(JSON.stringify(simResult, null, 2));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log(formatResult(simResult));
|
|
115
|
+
}
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
spinner.start();
|
|
119
|
+
spinner.text = "Executing batch...";
|
|
120
|
+
const tx = await builder.send();
|
|
121
|
+
spinner.text = "Waiting for confirmation...";
|
|
122
|
+
await tx.wait();
|
|
123
|
+
spinner.succeed("Batch confirmed");
|
|
124
|
+
const txResult = {
|
|
125
|
+
operations: operations.length,
|
|
126
|
+
txHash: tx.hash,
|
|
127
|
+
explorer: tx.explorerUrl,
|
|
128
|
+
};
|
|
129
|
+
if (opts.json) {
|
|
130
|
+
console.log(JSON.stringify(txResult, null, 2));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(formatResult(txResult));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
spinner.fail("Batch failed");
|
|
138
|
+
console.error(formatError(error));
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { requireSession } from "../../services/auth/session.js";
|
|
2
2
|
import { createSDK } from "../../services/starkzap/client.js";
|
|
3
3
|
import { ConfigService } from "../../services/config/config.js";
|
|
4
|
-
import { createSpinner, formatResult } from "../../lib/format.js";
|
|
4
|
+
import { createSpinner, formatResult, formatError } from "../../lib/format.js";
|
|
5
5
|
import { explorerUrl } from "../../lib/config.js";
|
|
6
6
|
export function registerTxStatusCommand(program) {
|
|
7
7
|
program
|
|
@@ -31,7 +31,7 @@ export function registerTxStatusCommand(program) {
|
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
33
|
spinner.fail("Failed to get transaction status");
|
|
34
|
-
console.error(error
|
|
34
|
+
console.error(formatError(error));
|
|
35
35
|
process.exit(1);
|
|
36
36
|
}
|
|
37
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-status.js","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tx-status.js","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACvD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE3D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAErC,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/E,MAAM,WAAW,GAChB,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;gBACZ,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC7C,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;aAC5C,CAAC,CACF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyH5D"}
|