htcli 1.1.0__py3-none-any.whl
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.
- htcli-1.1.0.dist-info/METADATA +509 -0
- htcli-1.1.0.dist-info/RECORD +140 -0
- htcli-1.1.0.dist-info/WHEEL +4 -0
- htcli-1.1.0.dist-info/entry_points.txt +2 -0
- htcli-1.1.0.dist-info/licenses/LICENSE +21 -0
- src/__init__.py +0 -0
- src/htcli/__init__.py +5 -0
- src/htcli/client/__init__.py +338 -0
- src/htcli/client/extrinsics/__init__.py +26 -0
- src/htcli/client/extrinsics/base.py +487 -0
- src/htcli/client/extrinsics/consensus.py +79 -0
- src/htcli/client/extrinsics/governance.py +714 -0
- src/htcli/client/extrinsics/identity.py +490 -0
- src/htcli/client/extrinsics/node.py +1054 -0
- src/htcli/client/extrinsics/overwatch.py +401 -0
- src/htcli/client/extrinsics/staking.py +1504 -0
- src/htcli/client/extrinsics/subnet.py +2218 -0
- src/htcli/client/extrinsics/validator.py +203 -0
- src/htcli/client/extrinsics/wallet.py +323 -0
- src/htcli/client/offchain/__init__.py +10 -0
- src/htcli/client/offchain/backup.py +385 -0
- src/htcli/client/offchain/config.py +541 -0
- src/htcli/client/offchain/wallet.py +839 -0
- src/htcli/client/rpc/__init__.py +20 -0
- src/htcli/client/rpc/chain.py +568 -0
- src/htcli/client/rpc/node.py +783 -0
- src/htcli/client/rpc/overwatch.py +680 -0
- src/htcli/client/rpc/staking.py +216 -0
- src/htcli/client/rpc/subnet.py +2104 -0
- src/htcli/client/rpc/wallet.py +912 -0
- src/htcli/commands/__init__.py +31 -0
- src/htcli/commands/chain/__init__.py +66 -0
- src/htcli/commands/chain/display.py +204 -0
- src/htcli/commands/chain/handlers.py +260 -0
- src/htcli/commands/config/__init__.py +158 -0
- src/htcli/commands/config/display.py +353 -0
- src/htcli/commands/config/handlers.py +347 -0
- src/htcli/commands/config/prompts.py +357 -0
- src/htcli/commands/consensus/__init__.py +61 -0
- src/htcli/commands/consensus/handlers.py +100 -0
- src/htcli/commands/governance/__init__.py +49 -0
- src/htcli/commands/governance/handlers.py +81 -0
- src/htcli/commands/node/__init__.py +304 -0
- src/htcli/commands/node/display.py +749 -0
- src/htcli/commands/node/error_handling.py +470 -0
- src/htcli/commands/node/handlers.py +844 -0
- src/htcli/commands/node/prompts.py +346 -0
- src/htcli/commands/overwatch/__init__.py +219 -0
- src/htcli/commands/overwatch/display.py +396 -0
- src/htcli/commands/overwatch/error_handling.py +276 -0
- src/htcli/commands/overwatch/handlers.py +443 -0
- src/htcli/commands/overwatch/prompts.py +359 -0
- src/htcli/commands/stake/__init__.py +736 -0
- src/htcli/commands/stake/display.py +1103 -0
- src/htcli/commands/stake/error_handling.py +425 -0
- src/htcli/commands/stake/handlers.py +1902 -0
- src/htcli/commands/stake/prompts.py +1080 -0
- src/htcli/commands/subnet/__init__.py +639 -0
- src/htcli/commands/subnet/display.py +801 -0
- src/htcli/commands/subnet/error_handling.py +524 -0
- src/htcli/commands/subnet/handlers.py +2855 -0
- src/htcli/commands/subnet/prompts.py +1225 -0
- src/htcli/commands/validator/__init__.py +192 -0
- src/htcli/commands/validator/display.py +54 -0
- src/htcli/commands/validator/handlers.py +340 -0
- src/htcli/commands/wallet/__init__.py +546 -0
- src/htcli/commands/wallet/display.py +806 -0
- src/htcli/commands/wallet/error_handling.py +210 -0
- src/htcli/commands/wallet/handlers.py +3040 -0
- src/htcli/commands/wallet/prompts.py +1518 -0
- src/htcli/config.py +184 -0
- src/htcli/dependencies.py +186 -0
- src/htcli/errors/__init__.py +63 -0
- src/htcli/errors/base.py +141 -0
- src/htcli/errors/display.py +20 -0
- src/htcli/errors/handlers.py +710 -0
- src/htcli/main.py +343 -0
- src/htcli/models/__init__.py +21 -0
- src/htcli/models/enums/enum_types.py +35 -0
- src/htcli/models/errors.py +103 -0
- src/htcli/models/requests/__init__.py +197 -0
- src/htcli/models/requests/config.py +70 -0
- src/htcli/models/requests/consensus.py +19 -0
- src/htcli/models/requests/governance.py +38 -0
- src/htcli/models/requests/identity.py +51 -0
- src/htcli/models/requests/key.py +22 -0
- src/htcli/models/requests/node.py +91 -0
- src/htcli/models/requests/overwatch.py +64 -0
- src/htcli/models/requests/staking.py +580 -0
- src/htcli/models/requests/subnet.py +195 -0
- src/htcli/models/requests/validator.py +139 -0
- src/htcli/models/requests/wallet.py +118 -0
- src/htcli/models/responses/__init__.py +147 -0
- src/htcli/models/responses/base.py +18 -0
- src/htcli/models/responses/chain.py +39 -0
- src/htcli/models/responses/config.py +58 -0
- src/htcli/models/responses/identity.py +102 -0
- src/htcli/models/responses/overwatch.py +51 -0
- src/htcli/models/responses/staking.py +502 -0
- src/htcli/models/responses/subnet.py +856 -0
- src/htcli/models/responses/wallet.py +185 -0
- src/htcli/ui/__init__.py +87 -0
- src/htcli/ui/colors.py +309 -0
- src/htcli/ui/components/__init__.py +60 -0
- src/htcli/ui/components/panels.py +174 -0
- src/htcli/ui/components/progress.py +166 -0
- src/htcli/ui/components/spinners.py +92 -0
- src/htcli/ui/components/tables.py +809 -0
- src/htcli/ui/components/trees.py +721 -0
- src/htcli/ui/display.py +336 -0
- src/htcli/ui/prompts.py +870 -0
- src/htcli/utils/__init__.py +76 -0
- src/htcli/utils/blockchain/__init__.py +75 -0
- src/htcli/utils/blockchain/formatting.py +368 -0
- src/htcli/utils/blockchain/patches.py +286 -0
- src/htcli/utils/blockchain/peer_id.py +186 -0
- src/htcli/utils/blockchain/staking.py +448 -0
- src/htcli/utils/blockchain/type_registry.py +1373 -0
- src/htcli/utils/blockchain/validation.py +179 -0
- src/htcli/utils/cache.py +613 -0
- src/htcli/utils/constants.py +38 -0
- src/htcli/utils/legacy/__init__.py +12 -0
- src/htcli/utils/legacy/colors.py +311 -0
- src/htcli/utils/legacy/crypto.py +1176 -0
- src/htcli/utils/legacy/formatting.py +452 -0
- src/htcli/utils/legacy/interactive.py +306 -0
- src/htcli/utils/legacy/subnet_manifest.py +265 -0
- src/htcli/utils/legacy/validation.py +488 -0
- src/htcli/utils/logging.py +183 -0
- src/htcli/utils/network/__init__.py +20 -0
- src/htcli/utils/network/subnet.py +344 -0
- src/htcli/utils/prompts.py +27 -0
- src/htcli/utils/scale_codec.py +155 -0
- src/htcli/utils/validation/__init__.py +57 -0
- src/htcli/utils/validation/prompt_validators.py +267 -0
- src/htcli/utils/wallet/__init__.py +65 -0
- src/htcli/utils/wallet/auth.py +151 -0
- src/htcli/utils/wallet/core.py +1069 -0
- src/htcli/utils/wallet/crypto.py +1615 -0
- src/htcli/utils/wallet/migration.py +159 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: htcli
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: CLI to interact with Hypertensor
|
|
5
|
+
Project-URL: Repository, https://github.com/shiftlayer-llc/htcli
|
|
6
|
+
Project-URL: Issues, https://github.com/shiftlayer-llc/htcli/issues
|
|
7
|
+
Project-URL: Discord, https://discord.gg/CjVTDKaKzU
|
|
8
|
+
Project-URL: X, https://x.com/ShiftLayer_Ai
|
|
9
|
+
Author-email: ultrashiny <vasyl.123.000@gmail.com>
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Python: <4,>=3.10
|
|
12
|
+
Requires-Dist: base58>=2.1.1
|
|
13
|
+
Requires-Dist: click<8.2.0,>=8.1.0
|
|
14
|
+
Requires-Dist: cryptography>=41.0.0
|
|
15
|
+
Requires-Dist: eth-utils<6,>=5.0.0
|
|
16
|
+
Requires-Dist: mnemonic<0.22,>=0.21
|
|
17
|
+
Requires-Dist: protobuf>=5.29.1
|
|
18
|
+
Requires-Dist: psutil>=7.0.0
|
|
19
|
+
Requires-Dist: pydantic>=2.0.0
|
|
20
|
+
Requires-Dist: pyperclip>=1.10.0
|
|
21
|
+
Requires-Dist: pyyaml>=6.0
|
|
22
|
+
Requires-Dist: requests>=2.32.4
|
|
23
|
+
Requires-Dist: rich>=13.0.0
|
|
24
|
+
Requires-Dist: scalecodec>=1.2.11
|
|
25
|
+
Requires-Dist: six>=1.16.0
|
|
26
|
+
Requires-Dist: substrate-interface<2.0.0,>=1.7.11
|
|
27
|
+
Requires-Dist: tenacity>=9.1.2
|
|
28
|
+
Requires-Dist: typer<0.16.0,>=0.15.3
|
|
29
|
+
Requires-Dist: web3>=6.0.0
|
|
30
|
+
Requires-Dist: websockets>=15.0.1
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
|
|
33
|
+
# Hypertensor CLI (htcli)
|
|
34
|
+
|
|
35
|
+
[](https://www.python.org/downloads/)
|
|
36
|
+
[](https://opensource.org/licenses/MIT)
|
|
37
|
+
[](https://github.com/shiftlayer-llc/htcli)
|
|
38
|
+
[](https://github.com/shiftlayer-llc/htcli)
|
|
39
|
+
|
|
40
|
+
A command-line interface for interacting with the Hypertensor blockchain network. `htcli` helps users configure endpoints, manage wallets, inspect chain state, register subnets and nodes, operate validators, and submit staking transactions from a terminal.
|
|
41
|
+
|
|
42
|
+
Built and maintained by ShiftLayer LLC, the package provides a Typer-based CLI with Rich terminal output, table/JSON/CSV formats, wallet-aware commands, and live Hypertensor RPC integration.
|
|
43
|
+
|
|
44
|
+
## Install
|
|
45
|
+
|
|
46
|
+
`htcli` is distributed as a Python package and requires Python 3.10 or newer.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Install from PyPI (after production release)
|
|
50
|
+
pip install htcli
|
|
51
|
+
|
|
52
|
+
# Install a dev release from TestPyPI.
|
|
53
|
+
# Replace 1.1.1.dev3 with the latest htcli dev version shown on TestPyPI.
|
|
54
|
+
pip install --only-binary=:all: --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple "htcli==1.1.1.dev3"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
TestPyPI does not mirror PyPI dependencies, so `--extra-index-url https://pypi.org/simple` is required when testing dev releases. Installing the exact dev version avoids enabling prerelease dependencies globally, and `--only-binary=:all:` prevents native dependencies from falling back to local Rust builds.
|
|
58
|
+
|
|
59
|
+
### **Install from Source**
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Clone the repository
|
|
63
|
+
git clone https://github.com/shiftlayer-llc/htcli.git
|
|
64
|
+
cd htcli
|
|
65
|
+
|
|
66
|
+
# Install with uv (recommended)
|
|
67
|
+
uv pip install -e .
|
|
68
|
+
|
|
69
|
+
# Or install with pip
|
|
70
|
+
pip install -e .
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
For isolated CLI installation, use a tool installer:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv tool install htcli
|
|
77
|
+
# or
|
|
78
|
+
pipx install htcli
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Verify the install:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
htcli --version
|
|
85
|
+
htcli --help
|
|
86
|
+
htcli chain info
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Quick Start
|
|
90
|
+
|
|
91
|
+
### 1. Initialize Configuration
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
htcli config init
|
|
95
|
+
htcli config show
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
By default, htcli connects to `wss://rpc.htcli.io/`. You can override the endpoint per command:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
htcli --endpoint wss://custom.endpoint.example chain info
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 2. Create or Import Wallets
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
htcli wallet generate-coldkey --name my-coldkey
|
|
108
|
+
htcli wallet generate-hotkey --coldkey my-coldkey --hotkey my-hotkey
|
|
109
|
+
htcli wallet list
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 3. Inspect the Network
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
htcli chain info
|
|
116
|
+
htcli chain stats
|
|
117
|
+
htcli chain account 0x0000000000000000000000000000000000000000
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 4. Register and Manage Subnets
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
htcli subnet register \
|
|
124
|
+
--coldkey my-coldkey \
|
|
125
|
+
--name my-subnet \
|
|
126
|
+
--repo https://github.com/example/subnet \
|
|
127
|
+
--initial-coldkeys <coldkey-1>,<coldkey-2>,<coldkey-3> \
|
|
128
|
+
--key-types Ecdsa,Ecdsa,Ecdsa
|
|
129
|
+
|
|
130
|
+
htcli subnet activate --subnet-id 1 --coldkey my-coldkey
|
|
131
|
+
htcli subnet info --subnet-id 1
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 5. Register and Inspect Nodes
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
htcli node register \
|
|
138
|
+
--subnet-id 1 \
|
|
139
|
+
--validator-id 1 \
|
|
140
|
+
--hotkey <address> \
|
|
141
|
+
--peer-id <peer-id> \
|
|
142
|
+
--stake 100 \
|
|
143
|
+
--coldkey my-coldkey
|
|
144
|
+
|
|
145
|
+
htcli node list --subnet-id 1
|
|
146
|
+
htcli node info --subnet-id 1 --node-id 1
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 6. Operate Validators
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
htcli validator register --hotkey <address> --delegate-rate 10 --coldkey my-coldkey
|
|
153
|
+
htcli validator update-delegate-rate --validator-id 1 --delegate-rate 12 --coldkey my-coldkey
|
|
154
|
+
htcli validator update-identity --validator-id 1 --name "My Validator" --url https://example.com --coldkey my-coldkey
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 7. Stake and Delegate
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
htcli stake add --subnet-id 1 --node-id 1 --amount 100
|
|
161
|
+
htcli stake delegate-add --subnet-id 1 --amount 100 --coldkey my-coldkey
|
|
162
|
+
htcli stake list --coldkey <wallet-or-address>
|
|
163
|
+
htcli stake claim --coldkey my-coldkey
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 8. Use Script-Friendly Output
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
htcli --format json chain stats
|
|
170
|
+
htcli --format csv subnet list
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Command Groups
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
htcli
|
|
177
|
+
├── config # Configuration management
|
|
178
|
+
├── wallet # Coldkey and hotkey wallet management
|
|
179
|
+
├── chain # Chain info, stats, blocks, transactions, and accounts
|
|
180
|
+
├── subnet # Subnet registration and owner operations
|
|
181
|
+
├── node # Node registration, listing, info, and updates
|
|
182
|
+
├── validator # Validator registration, delegation, and identity
|
|
183
|
+
├── stake # Direct and delegated staking operations
|
|
184
|
+
├── consensus # Consensus proposals and attestations
|
|
185
|
+
├── governance # Network parameter governance
|
|
186
|
+
└── overwatch # Overwatch node operations
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Use `htcli --help`, `htcli <category> --help`, or `htcli <category> <command> --help` for the authoritative command list.
|
|
190
|
+
|
|
191
|
+
## Key Features
|
|
192
|
+
|
|
193
|
+
- **Wallet management**: Generate, restore, list, describe, rotate, and update coldkeys and hotkeys.
|
|
194
|
+
- **Hypertensor RPC access**: Query live network state through WebSocket RPC endpoints.
|
|
195
|
+
- **Subnet and node operations**: Register, activate, update, pause, unpause, inspect, and remove resources.
|
|
196
|
+
- **Validator operations**: Register validators, update delegate settings, rotate keys, and manage identity.
|
|
197
|
+
- **Staking operations**: Add/remove direct stake, delegate stake, transfer stake, swap stake, and claim unbonded tokens.
|
|
198
|
+
- **Structured output**: Use table output by default or JSON/CSV for scripts.
|
|
199
|
+
- **Safety prompts**: Confirmation and validation for transaction-producing commands.
|
|
200
|
+
|
|
201
|
+
## Contributing From Source
|
|
202
|
+
|
|
203
|
+
Clone the repository and install the project in editable mode:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
git clone https://github.com/shiftlayer-llc/htcli.git
|
|
207
|
+
cd htcli
|
|
208
|
+
uv sync
|
|
209
|
+
uv run htcli --help
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Run the local checks before opening a pull request:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
uv run pytest
|
|
216
|
+
uv run python -m build
|
|
217
|
+
uv run --with twine twine check dist/*
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Development workflow:
|
|
221
|
+
|
|
222
|
+
1. Create a feature branch from `dev`.
|
|
223
|
+
2. Make focused changes and add tests for changed behavior.
|
|
224
|
+
3. Run the relevant test suite and package checks.
|
|
225
|
+
4. Open a pull request against `dev`.
|
|
226
|
+
|
|
227
|
+
## Wallet-Based Filtering
|
|
228
|
+
|
|
229
|
+
Some asset commands support explicit wallet or coldkey filters:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
htcli subnet list --coldkey <wallet-or-address>
|
|
233
|
+
htcli stake list --coldkey <wallet-or-address>
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## 📋 **Command Structure**
|
|
237
|
+
|
|
238
|
+
### **Consistent Format**
|
|
239
|
+
|
|
240
|
+
Commands follow Typer's standard command-group format:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
htcli [global-options] <category> <command> [command-options] [arguments]
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Most transaction-producing commands use named options such as `--coldkey`, `--subnet-id`, and `--amount`. Use command help for the authoritative signature.
|
|
247
|
+
|
|
248
|
+
## 🎨 **User Experience Features**
|
|
249
|
+
|
|
250
|
+
### **Interactive Guidance**
|
|
251
|
+
|
|
252
|
+
Every complex operation includes comprehensive guidance:
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
╭────────────────────── 💰 Adding Stake to Node ──────────────────────────╮
|
|
256
|
+
│ This operation will stake TENSOR tokens to support a node in a subnet. │
|
|
257
|
+
│ │
|
|
258
|
+
│ 📋 Requirements: │
|
|
259
|
+
│ • Valid subnet ID and node ID │
|
|
260
|
+
│ • Sufficient TENSOR balance in your account │
|
|
261
|
+
│ • Node must be active and accepting stake │
|
|
262
|
+
│ │
|
|
263
|
+
│ 💡 Tips & Warnings: │
|
|
264
|
+
│ 💡 Staked tokens are locked and earn rewards │
|
|
265
|
+
│ ⚠️ Unstaking has an unbonding period before tokens are available │
|
|
266
|
+
│ │
|
|
267
|
+
│ 📊 Current Operation: │
|
|
268
|
+
│ • Subnet ID: 1 │
|
|
269
|
+
│ • Stake Amount: 1.000000000000000000 TENSOR │
|
|
270
|
+
╰──────────────────────────────────────────────────────────────────────────╯
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### **Safety Features**
|
|
274
|
+
|
|
275
|
+
- **Confirmation prompts** for destructive operations
|
|
276
|
+
- **Warning messages** for unbonding periods and risks
|
|
277
|
+
- **Input validation** with helpful error messages
|
|
278
|
+
- **Recovery guidance** for failed operations
|
|
279
|
+
|
|
280
|
+
### **Flexible Output**
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# Table format (default)
|
|
284
|
+
htcli chain stats
|
|
285
|
+
|
|
286
|
+
# JSON format for scripting
|
|
287
|
+
htcli --format json chain stats
|
|
288
|
+
|
|
289
|
+
# CSV format for data analysis
|
|
290
|
+
htcli --format csv chain stats
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## ⚙️ **Configuration**
|
|
294
|
+
|
|
295
|
+
### **Configuration File**
|
|
296
|
+
|
|
297
|
+
Default location: `~/.htcli/config.yaml`
|
|
298
|
+
|
|
299
|
+
```yaml
|
|
300
|
+
# Network Configuration
|
|
301
|
+
network:
|
|
302
|
+
endpoint: "wss://rpc.htcli.io/"
|
|
303
|
+
ws_endpoint: "wss://rpc.htcli.io/"
|
|
304
|
+
timeout: 30
|
|
305
|
+
retry_attempts: 3
|
|
306
|
+
|
|
307
|
+
# Output Configuration
|
|
308
|
+
output:
|
|
309
|
+
format: "table"
|
|
310
|
+
verbose: false
|
|
311
|
+
color: true
|
|
312
|
+
|
|
313
|
+
# Wallet Configuration
|
|
314
|
+
wallet:
|
|
315
|
+
path: "~/.htcli/wallets"
|
|
316
|
+
default_name: "default"
|
|
317
|
+
encryption_enabled: true
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### **Environment Variables**
|
|
321
|
+
|
|
322
|
+
Override configuration with environment variables:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
export HTCLI_NETWORK_ENDPOINT="wss://custom-endpoint.com"
|
|
326
|
+
export HTCLI_OUTPUT_FORMAT="json"
|
|
327
|
+
export HTCLI_WALLET_PATH="/custom/wallet/path"
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## 🔧 **Advanced Usage**
|
|
331
|
+
|
|
332
|
+
### **Custom Configuration**
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
# Use custom config file
|
|
336
|
+
htcli --config /path/to/config.yaml chain info
|
|
337
|
+
|
|
338
|
+
# Override endpoint temporarily
|
|
339
|
+
htcli --endpoint wss://custom.endpoint.com chain info
|
|
340
|
+
|
|
341
|
+
# Enable verbose output
|
|
342
|
+
htcli --verbose chain info
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### **Scripting Examples**
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Get network stats in JSON for processing
|
|
349
|
+
STATS=$(htcli --format json chain stats)
|
|
350
|
+
echo $STATS | jq '.total_subnets'
|
|
351
|
+
|
|
352
|
+
# Check multiple accounts
|
|
353
|
+
for addr in addr1 addr2 addr3; do
|
|
354
|
+
htcli --format json chain account $addr
|
|
355
|
+
done
|
|
356
|
+
|
|
357
|
+
# Automated staking workflow
|
|
358
|
+
htcli stake add --subnet-id 1 --node-id 1 --amount $AMOUNT
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### **Batch Operations**
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
# Register multiple subnets
|
|
365
|
+
for subnet in subnet1 subnet2 subnet3; do
|
|
366
|
+
htcli subnet register \
|
|
367
|
+
--coldkey my-coldkey \
|
|
368
|
+
--name $subnet \
|
|
369
|
+
--repo https://github.com/example/$subnet \
|
|
370
|
+
--initial-coldkeys <coldkey-1>,<coldkey-2>,<coldkey-3> \
|
|
371
|
+
--key-types Ecdsa,Ecdsa,Ecdsa
|
|
372
|
+
done
|
|
373
|
+
|
|
374
|
+
# Check status of multiple nodes
|
|
375
|
+
for node_id in {1..10}; do
|
|
376
|
+
htcli node info --subnet-id 1 --node-id $node_id
|
|
377
|
+
done
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## 🛠️ **Source Reference**
|
|
381
|
+
|
|
382
|
+
### **Project Structure**
|
|
383
|
+
|
|
384
|
+
```
|
|
385
|
+
htcli/
|
|
386
|
+
├── src/htcli/ # Main CLI source code
|
|
387
|
+
│ ├── commands/ # Command implementations
|
|
388
|
+
│ │ ├── config/ # Configuration commands
|
|
389
|
+
│ │ ├── subnet/ # Subnet commands
|
|
390
|
+
│ │ ├── node/ # Node commands
|
|
391
|
+
│ │ ├── stake/ # Staking commands
|
|
392
|
+
│ │ ├── wallet/ # Wallet commands
|
|
393
|
+
│ │ └── chain/ # Chain commands
|
|
394
|
+
│ ├── client/ # Blockchain client modules
|
|
395
|
+
│ ├── models/ # Request/response models
|
|
396
|
+
│ ├── utils/ # Utility functions
|
|
397
|
+
│ └── main.py # CLI entry point
|
|
398
|
+
├── tests/ # Test suite
|
|
399
|
+
└── pyproject.toml # Project configuration
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### **Testing**
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
# Run all tests
|
|
406
|
+
uv run pytest
|
|
407
|
+
|
|
408
|
+
# Run specific test categories
|
|
409
|
+
uv run pytest tests/unit/
|
|
410
|
+
uv run pytest tests/integration/
|
|
411
|
+
|
|
412
|
+
# Run opt-in live runtime validation
|
|
413
|
+
HTCLI_RUN_LIVE=1 uv run pytest tests/live -m live
|
|
414
|
+
|
|
415
|
+
# Run with coverage
|
|
416
|
+
uv run pytest --cov=src/htcli
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
See [LIVE_VALIDATION.md](LIVE_VALIDATION.md) for the current live-chain
|
|
420
|
+
validation endpoint, account setup, and known runtime migration gaps.
|
|
421
|
+
|
|
422
|
+
## 📚 **Documentation**
|
|
423
|
+
|
|
424
|
+
Use the built-in command help for the current command reference:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
htcli --help
|
|
428
|
+
htcli wallet --help
|
|
429
|
+
htcli stake add --help
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
## 🔍 **Troubleshooting**
|
|
433
|
+
|
|
434
|
+
### **Common Issues**
|
|
435
|
+
|
|
436
|
+
#### **Connection Problems**
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
# Test network connectivity
|
|
440
|
+
htcli chain info
|
|
441
|
+
|
|
442
|
+
# Use custom endpoint
|
|
443
|
+
htcli --endpoint wss://backup.endpoint.com chain info
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
#### **Configuration Issues**
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
# Validate configuration
|
|
450
|
+
htcli config validate
|
|
451
|
+
|
|
452
|
+
# Reset configuration
|
|
453
|
+
htcli config init --force
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
#### **Key Management Issues**
|
|
457
|
+
|
|
458
|
+
```bash
|
|
459
|
+
# List available keys
|
|
460
|
+
htcli wallet list
|
|
461
|
+
|
|
462
|
+
# Generate new key if needed
|
|
463
|
+
htcli wallet generate-coldkey --name backup-key
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### **Getting Help**
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
# General help
|
|
470
|
+
htcli --help
|
|
471
|
+
|
|
472
|
+
# Category help
|
|
473
|
+
htcli stake --help
|
|
474
|
+
|
|
475
|
+
# Command help
|
|
476
|
+
htcli stake add --help
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
## 🚀 **Performance & Reliability**
|
|
480
|
+
|
|
481
|
+
### **Performance Metrics**
|
|
482
|
+
|
|
483
|
+
- **Command Response Times**: < 0.1s for help, 1-3s for network operations
|
|
484
|
+
- **Success Rates**: 100% command execution success
|
|
485
|
+
- **Error Handling**: Comprehensive error recovery and user guidance
|
|
486
|
+
- **Network Resilience**: Automatic retry with exponential backoff
|
|
487
|
+
|
|
488
|
+
### **Production Ready Features**
|
|
489
|
+
|
|
490
|
+
- **18-digit TENSOR precision** for accurate token calculations
|
|
491
|
+
- **Real blockchain integration** with transaction submission
|
|
492
|
+
- **Comprehensive input validation** and error handling
|
|
493
|
+
- **Professional user interface** with rich console output
|
|
494
|
+
- **Extensive logging** and debugging capabilities
|
|
495
|
+
|
|
496
|
+
## 📄 **License**
|
|
497
|
+
|
|
498
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
499
|
+
|
|
500
|
+
## 🤝 **Support**
|
|
501
|
+
|
|
502
|
+
- **GitHub Issues**: [Report bugs or request features](https://github.com/shiftlayer-llc/htcli/issues)
|
|
503
|
+
- **Documentation**: Use `htcli --help` and category-specific help for current command details
|
|
504
|
+
- **Discord**: [Join the community](https://discord.gg/CjVTDKaKzU)
|
|
505
|
+
- **X**: [Follow ShiftLayer](https://x.com/ShiftLayer_Ai)
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
Built and maintained by [ShiftLayer LLC](https://shiftlayer.ai) for the Hypertensor network.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
src/htcli/__init__.py,sha256=kaXIYZT6UtXWdOas6194ukGm8ZtUfg3F9ViFf57s01w,106
|
|
3
|
+
src/htcli/config.py,sha256=mx8MqqUGRVYRXZhy1SCPtFH3rAA5aTv2bNv2kJVHVYA,6602
|
|
4
|
+
src/htcli/dependencies.py,sha256=tGsrxkUJ7ehmbKyoaMVrngkCnzDFWQFITV7V0dJ9UO4,6208
|
|
5
|
+
src/htcli/main.py,sha256=bEBf0GM6agVBtflFjiUi4WoJQjRwvY4WdFUtuwcRTJQ,12016
|
|
6
|
+
src/htcli/client/__init__.py,sha256=bsxXII0Zm6Pxc5aPqz-fBvwGVOmhKEp865-kCDPris8,13928
|
|
7
|
+
src/htcli/client/extrinsics/__init__.py,sha256=mZHwmS4hvgVkJnFHxazvRVmruevM5DaMkWJ5VDUPFA4,750
|
|
8
|
+
src/htcli/client/extrinsics/base.py,sha256=Dn49JiZ2X8H4gXLZWWTyTipxSneX-jVimwgpFa6DtPo,20606
|
|
9
|
+
src/htcli/client/extrinsics/consensus.py,sha256=5ojNwSr15NzGjKpq0iFMdZhHWgKu60KIdmWSCagTztk,2236
|
|
10
|
+
src/htcli/client/extrinsics/governance.py,sha256=ldXyX9_nu2CjDkVSV9iXSLRYpB2IHSPsI0ODzl8vaco,24765
|
|
11
|
+
src/htcli/client/extrinsics/identity.py,sha256=VUfIV6SkwlOZdENPg_ChMYZqgmxivPY08ZuNdNgEhYM,16739
|
|
12
|
+
src/htcli/client/extrinsics/node.py,sha256=hXTyWiV3Ntu6S0_W0GXlWo2YonJa-HUVica8OGRxgWo,39979
|
|
13
|
+
src/htcli/client/extrinsics/overwatch.py,sha256=4EiVZ0_UZL5yzdQnzMTSIwzPV-KDMnefbivpmPybNcI,15008
|
|
14
|
+
src/htcli/client/extrinsics/staking.py,sha256=gaGSqeQrCINzHAhkm_XexBh_Gn-287KZjFdIjpCLtCM,61285
|
|
15
|
+
src/htcli/client/extrinsics/subnet.py,sha256=E72QGqLjSWO9UNydTZMRBc8xivXNK-GflXZuFonw9zU,80486
|
|
16
|
+
src/htcli/client/extrinsics/validator.py,sha256=6_raUODFxagBXIIN2u6cxRxfaoBz4LrQdal69Gj1dV4,7455
|
|
17
|
+
src/htcli/client/extrinsics/wallet.py,sha256=tsGjSkdRm5UW7XegTC0oal1HVYPjFff1l47ZXEBZkUo,15153
|
|
18
|
+
src/htcli/client/offchain/__init__.py,sha256=aYhIhHt3LAblUeBI57WaLesQu8kNNCA7TQ7fh-a8100,338
|
|
19
|
+
src/htcli/client/offchain/backup.py,sha256=VmZ78u9JDfkkCdzwntE_pzZAkxxecTH0wknHNGftjf0,14795
|
|
20
|
+
src/htcli/client/offchain/config.py,sha256=86IH-OC7jpwh321tvDOwMavBU0QQzSw5wklFJ790jdA,19798
|
|
21
|
+
src/htcli/client/offchain/wallet.py,sha256=rxwfyDvh6GQaDEQl1I6uo6v4odi-4TrJhFhY6bUgWGQ,30797
|
|
22
|
+
src/htcli/client/rpc/__init__.py,sha256=E-kCAv4s0kiHVxhDAWqJrOpEnH5q4zB4C75fzUHfwaU,509
|
|
23
|
+
src/htcli/client/rpc/chain.py,sha256=QQHOHASynHRtJSl-7TbFTZr8QTy_Or62O8eUalrOfRo,20498
|
|
24
|
+
src/htcli/client/rpc/node.py,sha256=CkLUu3tuk6wBTj3E9eJ5vKU35EvAx6xI6vNBBDGIPQc,33766
|
|
25
|
+
src/htcli/client/rpc/overwatch.py,sha256=9RhMEtwbhS-LCQVYl-is8mr0RcjYjh3u_gYn3QF4IXE,29931
|
|
26
|
+
src/htcli/client/rpc/staking.py,sha256=_CI3MRRyxET69FIaH_-U_5U7Ucp2al8ud_nnmcKjB7s,7586
|
|
27
|
+
src/htcli/client/rpc/subnet.py,sha256=6ySztZxvlhxvBB9JkVpJLPKMDUIXl9gXcKB8KsHdnPM,96547
|
|
28
|
+
src/htcli/client/rpc/wallet.py,sha256=ncvolJGS5U0HWXkDJGSOp_1f3s0EmOExZrv3yD80SvQ,39454
|
|
29
|
+
src/htcli/commands/__init__.py,sha256=_lhqAr9vysZ7yhtsKu3tg6ihCUXNO3-4Vi6-sPCCpWY,832
|
|
30
|
+
src/htcli/commands/chain/__init__.py,sha256=UMfwaOkCozMirC1QB-HKqFyrB2bkLZsYTiW5klEupqE,1475
|
|
31
|
+
src/htcli/commands/chain/display.py,sha256=zAcWckpYA0w9Rpf-IotDCSN33fHuhzDdH6YWOAMTmKM,7166
|
|
32
|
+
src/htcli/commands/chain/handlers.py,sha256=uTfmctnUqGi6oifl6VCG9loamoP0C4koTSnTEX8JO3I,8820
|
|
33
|
+
src/htcli/commands/config/__init__.py,sha256=bt1vRnnBHdIX4Rr8_fPipvllzLzVb2kWiPa_Qdq3SEI,4622
|
|
34
|
+
src/htcli/commands/config/display.py,sha256=tX1vCBYyj4WmZK-pUzQ_hEeg4kQsxCsO06MwlXiMy-s,13079
|
|
35
|
+
src/htcli/commands/config/handlers.py,sha256=jdO0NNTIbRzBQmnmEEYZYUuJ02Q0tAfUbMKI3_61stw,9723
|
|
36
|
+
src/htcli/commands/config/prompts.py,sha256=P17KMy3b4A3ahIyRmhp4bUXCgprlhi65kk9IEFxa_yE,11496
|
|
37
|
+
src/htcli/commands/consensus/__init__.py,sha256=4lUqZc05gjkjdj_TzbIM10AQDk-R7EQh2aslyHdVNEU,1817
|
|
38
|
+
src/htcli/commands/consensus/handlers.py,sha256=hrZ5ToAcP18pQ2bhFOYs12_Ns7XEWmhBdTGi4yx0Xhk,3286
|
|
39
|
+
src/htcli/commands/governance/__init__.py,sha256=iLEXcatRYbvuDMjfl9ckSBWHkF0OK4NZV6w9Cjn8akE,1398
|
|
40
|
+
src/htcli/commands/governance/handlers.py,sha256=9iwjc4f0vU9sJir-ySAVedW4U-dpJd-9fXcQzsUk0JA,3143
|
|
41
|
+
src/htcli/commands/node/__init__.py,sha256=Kg-HHhIn4Psoizwbsx4e8W58GSEUrS1XS6DZ_axXvo4,8830
|
|
42
|
+
src/htcli/commands/node/display.py,sha256=H65b4PcSsviw53-2mijHDHoeMgisEhWMZOfUu4DypLY,28776
|
|
43
|
+
src/htcli/commands/node/error_handling.py,sha256=myRgb_phfsuKZ04jyxgwzCWglCxdkw1Fxr1Zhwv21IE,19328
|
|
44
|
+
src/htcli/commands/node/handlers.py,sha256=1cVFQfleixSVEuGbG-EJ9rpIbNPs6FYSxtLg12YQ2zA,29921
|
|
45
|
+
src/htcli/commands/node/prompts.py,sha256=wsDMPEaTvK25zMfIeVlWc7Gp4gq06fY-wGYTMe7H-R4,12671
|
|
46
|
+
src/htcli/commands/overwatch/__init__.py,sha256=PFzENbLvDgbASGfJoNsymXNDSWyJ9XjGCyVKjLmmLHk,5786
|
|
47
|
+
src/htcli/commands/overwatch/display.py,sha256=Ot5d-5E2tPNbtg2_E2qoen2ZI_i2oJssTkzCSRbrI5Q,16013
|
|
48
|
+
src/htcli/commands/overwatch/error_handling.py,sha256=-a_GT-Zivy4fMpRyvzEEEhT0FtRbtu0xSu628psuqzM,11031
|
|
49
|
+
src/htcli/commands/overwatch/handlers.py,sha256=2qpych2gG9pKj4XASVRnl4EhcKQgT0OTx5yBXjBMvPA,16429
|
|
50
|
+
src/htcli/commands/overwatch/prompts.py,sha256=5Jkk8GNo1NksstoJTb3OLcHhVAhNnNZauEp-fKb2aa8,13014
|
|
51
|
+
src/htcli/commands/stake/__init__.py,sha256=6KM8gCSVrcz883eDIDW0Z3dfoTmEMmTS9PiiGJpqz8A,25324
|
|
52
|
+
src/htcli/commands/stake/display.py,sha256=ZquDedAI_ad9eXA9ZU0cKeLOPxM-HHPNyEjp2yUtxuo,45998
|
|
53
|
+
src/htcli/commands/stake/error_handling.py,sha256=FzzuRc1WJo_CLg853QuzWYl8yIrDmdGRRKLk4tfxG3k,17573
|
|
54
|
+
src/htcli/commands/stake/handlers.py,sha256=24kgo59Wl8hASXYMOeExed7nzipIyg5DMU1AkFOb9_4,67007
|
|
55
|
+
src/htcli/commands/stake/prompts.py,sha256=slE5dx9oFLEQDB4ln0MdZ5Z8HYsvcVcmMVq-PkVuOv4,36811
|
|
56
|
+
src/htcli/commands/subnet/__init__.py,sha256=3UjK7trwOTsUtv4T38LL6QM6LpBZEwnOKyC420VNhG8,21505
|
|
57
|
+
src/htcli/commands/subnet/display.py,sha256=Jwj7M3cWVCopA1_xyRNk923lAHTY6D8pU7tZJIS4DCg,31491
|
|
58
|
+
src/htcli/commands/subnet/error_handling.py,sha256=r62z6YFkM9AE4VEqS0CEKRYwyQA9iS5SgDlgWw-JdKk,21644
|
|
59
|
+
src/htcli/commands/subnet/handlers.py,sha256=3CWUtAgqzEuVHuJTOxUgfUWKIzI8F44g9-iveenvfS4,119067
|
|
60
|
+
src/htcli/commands/subnet/prompts.py,sha256=NY4T-M3sgwt2e9wVTx-wSJOfLQC3BRH3LrVKZLl3FEU,50542
|
|
61
|
+
src/htcli/commands/validator/__init__.py,sha256=n46WOMj9yb8Z3sp8joUVh0p29It6RGKyN5ILOm_2olE,6090
|
|
62
|
+
src/htcli/commands/validator/display.py,sha256=wY6D-NhjABkEZFpy8QruzCGjfzVMwpSJfLulfd3xu54,1859
|
|
63
|
+
src/htcli/commands/validator/handlers.py,sha256=Z2JMkpBuqm4Ei7uc6cx0hh2dsk_oYEBtHr8QnFHh2Fg,11119
|
|
64
|
+
src/htcli/commands/wallet/__init__.py,sha256=vRgd-7umETJrum17KIZBSeHEEDh1gnZd08dGMM0qMJ4,16377
|
|
65
|
+
src/htcli/commands/wallet/display.py,sha256=Ng1CZI_lnUQIC7kSnrl7BdaeqFGXh11Nb_9mCOUsdm4,30101
|
|
66
|
+
src/htcli/commands/wallet/error_handling.py,sha256=r6N64MhaAXU1lStFHwiyuatQ_pftH5uvfrIxRcnxrvs,8861
|
|
67
|
+
src/htcli/commands/wallet/handlers.py,sha256=RQT9IwAQtOOqofj3ZMB8_nSEvatDe-Vr1GDvAAv7ZYM,124675
|
|
68
|
+
src/htcli/commands/wallet/prompts.py,sha256=FC1WBcveeeHtTJH85R6WhCfDPngmYnzZ212RPH6-FYM,60320
|
|
69
|
+
src/htcli/errors/__init__.py,sha256=4S80Mc8NBjv6l7pEWDCjE7nXABdo3QwVbuQuR5npvDo,1527
|
|
70
|
+
src/htcli/errors/base.py,sha256=f16skezRFIhoI5G1aA_wNUvc1dGqg3VybIxAIhwyiYU,3122
|
|
71
|
+
src/htcli/errors/display.py,sha256=6spc41lLCrWkx4jJQxK2U5_uiLp0LTEqyRdphXx4jQA,676
|
|
72
|
+
src/htcli/errors/handlers.py,sha256=d0BfAhsPRkGlcc0YRVkmobWeChvI6A9TOLCLcDc4vrc,27631
|
|
73
|
+
src/htcli/models/__init__.py,sha256=g5Z9rjzBDmHC-DnFPMCvo7L4BxdWlcQeqd67Vba5t7g,602
|
|
74
|
+
src/htcli/models/errors.py,sha256=PitOzIhK-vK2q3gNNda872A8O5yX8l31A0v85KpyFZA,3287
|
|
75
|
+
src/htcli/models/enums/enum_types.py,sha256=V4HsMRv5CvHCHdCzDPP5-mizZG_NOrfneDVmIryhUc8,626
|
|
76
|
+
src/htcli/models/requests/__init__.py,sha256=RolLB229OdX-1fkS4AaSCV-V8mJyqCVtbrKaUmFFdcY,5578
|
|
77
|
+
src/htcli/models/requests/config.py,sha256=NsuwVDdPSP6rYip6l_4zih64Tbv6sb2eEShOfKDoMUY,2478
|
|
78
|
+
src/htcli/models/requests/consensus.py,sha256=F15ILcZb0D6f02r__d9UwE_vcgxHFf9C5-gnaq5EWyY,552
|
|
79
|
+
src/htcli/models/requests/governance.py,sha256=c1qTJHV9Wk5ipj3brYPWM2e-wmc8mSdOuFJU1aA3nuA,1125
|
|
80
|
+
src/htcli/models/requests/identity.py,sha256=2_HwBbwdcg73exw8pQrqPktWQ84-_fIbLtSD8VlsqhA,1721
|
|
81
|
+
src/htcli/models/requests/key.py,sha256=uCVgLEvicvSVlzvUxDIIPRlNt5oI0MK5tMj8Qn2qmFU,605
|
|
82
|
+
src/htcli/models/requests/node.py,sha256=JAizAEdodPkH2yBdGrKFVzzyor3gwRvd9B1rHMnYD6w,3699
|
|
83
|
+
src/htcli/models/requests/overwatch.py,sha256=neknZLPn2NckXNOnpmmEdRcSTxLg0-JVELcQF9uosa8,2273
|
|
84
|
+
src/htcli/models/requests/staking.py,sha256=xnjwP4J75493JVd-B97sThddGHcdwgq1WsjLQmlfOxs,19302
|
|
85
|
+
src/htcli/models/requests/subnet.py,sha256=3ptfBft7oRv2hccfJFPktkE2BTFdmOpq92NHJclEI4g,7266
|
|
86
|
+
src/htcli/models/requests/validator.py,sha256=X4N-0gvml5WeaUic0g3XCmoeSoUlUJlBrqNqyoLUEpA,5121
|
|
87
|
+
src/htcli/models/requests/wallet.py,sha256=WmJBZZxCrvDJiU49I3ktBm32vcp_AHFvdJz9fLVCYZ4,4519
|
|
88
|
+
src/htcli/models/responses/__init__.py,sha256=DIpdEW-puga6fA-6Tv9-NQZXsD6q92mARrBwEMhPdwE,3582
|
|
89
|
+
src/htcli/models/responses/base.py,sha256=sJq7gzixrWWzNRyeq_Okh6JRxJfaSMqPV1ZLFwNWGn0,670
|
|
90
|
+
src/htcli/models/responses/chain.py,sha256=zqBqaRgQp3reoccGjMzS9goWQRp83GX5DgE9FULImeo,1589
|
|
91
|
+
src/htcli/models/responses/config.py,sha256=VQFpsf5axxXJ9FMGY-LngoVRQEiiXM240KJdxjYwib0,2047
|
|
92
|
+
src/htcli/models/responses/identity.py,sha256=p06U1QNE6qgB_KTIa8a19efvizzOKAxgTtifOh5UVDI,3450
|
|
93
|
+
src/htcli/models/responses/overwatch.py,sha256=UcfWak2RVtWsv-bFFCs-uDYzCLcfFYz82KQlE7YI574,1990
|
|
94
|
+
src/htcli/models/responses/staking.py,sha256=aaizcZ8LacfAJriJvIau0vTsjZmpfomCDx-d3ml9AR0,19869
|
|
95
|
+
src/htcli/models/responses/subnet.py,sha256=REP_0DuK-Zhtl-wQ6sVM9_1VS3PAtxNql_AUgZR9EKA,35478
|
|
96
|
+
src/htcli/models/responses/wallet.py,sha256=KipCP1vFE6ylEQhPPuRUJ8lbkWoj7b972MWy-Mci2KI,7499
|
|
97
|
+
src/htcli/ui/__init__.py,sha256=aK9PHzflcQzwLMAiox59Na6FrkCbY9V8uwOHNuyJ9o4,1829
|
|
98
|
+
src/htcli/ui/colors.py,sha256=3pYUY8rkTiqwNHnHA0AmT1P1eP_CEGRQeTQ7tu6P_RE,12793
|
|
99
|
+
src/htcli/ui/display.py,sha256=f1nBDxNoKaIzuh49RG6jOaCk2_pX4_D0qiP4a65KJOA,10651
|
|
100
|
+
src/htcli/ui/prompts.py,sha256=1x3qYH8uRzIBl-fuM2X9NOyrw2VuNLktdtQWCC1g-Jw,29203
|
|
101
|
+
src/htcli/ui/components/__init__.py,sha256=8EQgg2ZCsY8UyuioEWCMCw_2IGXi1i2fgwjWg739N1w,1445
|
|
102
|
+
src/htcli/ui/components/panels.py,sha256=CJRXRLB68uLhu0hES0HePCscxBuEBi2hqh_4F5iI_VY,5014
|
|
103
|
+
src/htcli/ui/components/progress.py,sha256=DLSTwFXXQhqQz5vtyw3bCrv-jLYMh2D-4ejKY76MDkM,5533
|
|
104
|
+
src/htcli/ui/components/spinners.py,sha256=52X7jG4XVkhUkxJvi5yh3KcUIJnPrDLtHtJSjIrnJWU,3223
|
|
105
|
+
src/htcli/ui/components/tables.py,sha256=UTqilIEdNJn_ibFkr_et6G6ADlGI9x2txUNbNpT4obM,29255
|
|
106
|
+
src/htcli/ui/components/trees.py,sha256=v72tPqBhcbyhr8V6Wx1XCXFqaHSwWMOvyffnGKhKwO0,28470
|
|
107
|
+
src/htcli/utils/__init__.py,sha256=UAtiqGxMqcOqNhiZHrixipOsTPMQD6sIssKgz-S5WtY,2081
|
|
108
|
+
src/htcli/utils/cache.py,sha256=26qIme298Bg9IP3z9JRZvcm-s1sA4bR1Z34Bg3F4SwA,17055
|
|
109
|
+
src/htcli/utils/constants.py,sha256=_5-tBgKYH9cYbG9JQea9323h1fg0s6-tSUFcSzzFEIc,1254
|
|
110
|
+
src/htcli/utils/logging.py,sha256=vKcDLKVhYZ1Mc9hZbuwX-5zWId90h2QmqziRNT7Y3-I,5875
|
|
111
|
+
src/htcli/utils/prompts.py,sha256=R87m8G5tjUQddChYeinfR-kEBUdiFVZcUNCTRO78PDI,822
|
|
112
|
+
src/htcli/utils/scale_codec.py,sha256=B1PgbcLr4cYme2HtObcW21JupBvBTsp2csrkMnvQFSo,4425
|
|
113
|
+
src/htcli/utils/blockchain/__init__.py,sha256=_3zR_bgtLX4RtMECRAXcvDCqJefSlRT-JD5EdMWVJDs,1930
|
|
114
|
+
src/htcli/utils/blockchain/formatting.py,sha256=FVVzSntRMsF_NVUOk0NHm0BYJVp04-ogdLtgMAqp2hw,9854
|
|
115
|
+
src/htcli/utils/blockchain/patches.py,sha256=fE6uhCKp0xHfkgpyotYV-I9YEinySm8MakeIFiSdQWQ,9840
|
|
116
|
+
src/htcli/utils/blockchain/peer_id.py,sha256=ETOPdIpTNmy_Jl8IJE-SCndJyA-FcKHasHllPX6Fnrw,5071
|
|
117
|
+
src/htcli/utils/blockchain/staking.py,sha256=RSOHYdV-AgivBr1Qb8inpWbkycrfYRw1hxjeDg2ulPo,12023
|
|
118
|
+
src/htcli/utils/blockchain/type_registry.py,sha256=Ic_7W1Mf_VqOr8r_80xvFY2CovFlFu2tAf4VDN2xlRQ,57067
|
|
119
|
+
src/htcli/utils/blockchain/validation.py,sha256=kODSmevGdj0eM6kZqeEmDWBqZj-9TX9ysBwMUuJgmgI,5419
|
|
120
|
+
src/htcli/utils/legacy/__init__.py,sha256=WdmV5uNp5h08PvGFPCa-PCqCtv2-QslUGo2eWDmtKvM,328
|
|
121
|
+
src/htcli/utils/legacy/colors.py,sha256=IGjpzetF3m_B2EnTwhSEcKZmaeEp30oyz-TF0xHTtOk,9938
|
|
122
|
+
src/htcli/utils/legacy/crypto.py,sha256=8uysF2iy6rv2sFg_A9P6fpMdTnUApW6D-JmYrPARLZs,40485
|
|
123
|
+
src/htcli/utils/legacy/formatting.py,sha256=2SHW8Okj5Ud9njkRRPMi9kUmsl10dSi4hwNjiy5p8Y8,14916
|
|
124
|
+
src/htcli/utils/legacy/interactive.py,sha256=dli0ExhpDiwmQZFqu05_suaJIIXjlulFBQqyDnCgnc4,9109
|
|
125
|
+
src/htcli/utils/legacy/subnet_manifest.py,sha256=rvrUrOfYElcpYWi9AYySHeObffYeWTaAVMAhQoa04qQ,9219
|
|
126
|
+
src/htcli/utils/legacy/validation.py,sha256=aERPV2XwEwMdu1XafRT_HHxjEd2JWxhUwC_zD5A9MF0,12632
|
|
127
|
+
src/htcli/utils/network/__init__.py,sha256=RhNea9taT1C1FK4DPmQh6p9Ls_JtLIpYIJWKPCXbONg,460
|
|
128
|
+
src/htcli/utils/network/subnet.py,sha256=PN5IzK5oN1g2Otnv6GL0rL1jqVzrqJ_inyGNoIpoSiY,9966
|
|
129
|
+
src/htcli/utils/validation/__init__.py,sha256=MNSG9P5mnOZlDpSkyJuMJSPwq4wTC3n2FBz4bA5nk2Y,1661
|
|
130
|
+
src/htcli/utils/validation/prompt_validators.py,sha256=8YTHXpFs4mR0WuOyEWS3xjO0GLt-3AU7zai0-sWQ6hg,10126
|
|
131
|
+
src/htcli/utils/wallet/__init__.py,sha256=NvWVRC_vqvb6bwTPaxitK8bVHlIbPV_9jRCmb3JVTxY,1653
|
|
132
|
+
src/htcli/utils/wallet/auth.py,sha256=d4zbLzoo-HRbkDiThMRAkVyqk7stRX_ydwEyqYav1tQ,5438
|
|
133
|
+
src/htcli/utils/wallet/core.py,sha256=bGiezLwPn1pWQxZ-MlyjwhsjCDOrWmgwaFrPtq8sLWk,39859
|
|
134
|
+
src/htcli/utils/wallet/crypto.py,sha256=W_t0AwlGC3U5p7v5T-pszzDFE1yC-Ky0rQPE0R0tKBY,62698
|
|
135
|
+
src/htcli/utils/wallet/migration.py,sha256=t7HJWg0r7VhiAlxgdFi64iX59f6wBRPyFOvGL5Uqc5Y,5090
|
|
136
|
+
htcli-1.1.0.dist-info/METADATA,sha256=vx-HX4t0tmCTqm_vSN48u_KIx_0_aqGEPnIySA3SzzM,14892
|
|
137
|
+
htcli-1.1.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
138
|
+
htcli-1.1.0.dist-info/entry_points.txt,sha256=gSb9DFg8EgC-4YNkTGRL84Uxv5UUry-Phe4VyjZ-pNs,45
|
|
139
|
+
htcli-1.1.0.dist-info/licenses/LICENSE,sha256=HTCXmQv6CWwRW4fOX5HO3aRWAcFa1PCeFITlvnF0-AQ,1071
|
|
140
|
+
htcli-1.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 ShiftLayer LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
src/__init__.py
ADDED
|
File without changes
|