bittensor-cli 9.8.7__py3-none-any.whl → 9.10.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.
@@ -3,7 +3,7 @@ import itertools
3
3
  import json
4
4
  import os
5
5
  from collections import defaultdict
6
- from typing import Generator, Optional
6
+ from typing import Generator, Optional, Union
7
7
 
8
8
  import aiohttp
9
9
  from bittensor_wallet import Wallet, Keypair
@@ -48,6 +48,7 @@ from bittensor_cli.src.bittensor.utils import (
48
48
  WalletLike,
49
49
  blocks_to_duration,
50
50
  decode_account_id,
51
+ get_hotkey_pub_ss58,
51
52
  )
52
53
 
53
54
 
@@ -159,7 +160,7 @@ async def regen_coldkey(
159
160
  "name": new_wallet.name,
160
161
  "path": new_wallet.path,
161
162
  "hotkey": new_wallet.hotkey_str,
162
- "hotkey_ss58": new_wallet.hotkey.ss58_address,
163
+ "hotkey_ss58": get_hotkey_pub_ss58(new_wallet),
163
164
  "coldkey_ss58": new_wallet.coldkeypub.ss58_address,
164
165
  },
165
166
  "error": "",
@@ -209,7 +210,7 @@ async def regen_coldkey_pub(
209
210
  "name": new_coldkeypub.name,
210
211
  "path": new_coldkeypub.path,
211
212
  "hotkey": new_coldkeypub.hotkey_str,
212
- "hotkey_ss58": new_coldkeypub.hotkey.ss58_address,
213
+ "hotkey_ss58": get_hotkey_pub_ss58(new_coldkeypub),
213
214
  "coldkey_ss58": new_coldkeypub.coldkeypub.ss58_address,
214
215
  },
215
216
  "error": "",
@@ -255,7 +256,7 @@ async def regen_hotkey(
255
256
  console.print(
256
257
  "\n✅ [dark_sea_green]Regenerated hotkey successfully!\n",
257
258
  f"[dark_sea_green]Wallet name: ({new_hotkey_.name}), path: ({new_hotkey_.path}), "
258
- f"hotkey ss58: ({new_hotkey_.hotkey.ss58_address})",
259
+ f"hotkey ss58: ({new_hotkey_.hotkeypub.ss58_address})",
259
260
  )
260
261
  if json_output:
261
262
  json_console.print(
@@ -266,7 +267,7 @@ async def regen_hotkey(
266
267
  "name": new_hotkey_.name,
267
268
  "path": new_hotkey_.path,
268
269
  "hotkey": new_hotkey_.hotkey_str,
269
- "hotkey_ss58": new_hotkey_.hotkey.ss58_address,
270
+ "hotkey_ss58": new_hotkey_.hotkeypub.ss58_address,
270
271
  "coldkey_ss58": new_hotkey_.coldkeypub.ss58_address,
271
272
  },
272
273
  "error": "",
@@ -287,6 +288,50 @@ async def regen_hotkey(
287
288
  )
288
289
 
289
290
 
291
+ async def regen_hotkey_pub(
292
+ wallet: Wallet,
293
+ ss58_address: str,
294
+ public_key_hex: str,
295
+ overwrite: Optional[bool] = False,
296
+ json_output: bool = False,
297
+ ):
298
+ """Creates a new hotkeypub under this wallet."""
299
+ try:
300
+ new_hotkeypub = wallet.regenerate_hotkeypub(
301
+ ss58_address=ss58_address,
302
+ public_key=public_key_hex,
303
+ overwrite=overwrite,
304
+ )
305
+ if isinstance(new_hotkeypub, Wallet):
306
+ console.print(
307
+ "\n✅ [dark_sea_green]Regenerated coldkeypub successfully!\n",
308
+ f"[dark_sea_green]Wallet name: ({new_hotkeypub.name}), path: ({new_hotkeypub.path}), "
309
+ f"coldkey ss58: ({new_hotkeypub.coldkeypub.ss58_address})",
310
+ )
311
+ if json_output:
312
+ json_console.print(
313
+ json.dumps(
314
+ {
315
+ "success": True,
316
+ "data": {
317
+ "name": new_hotkeypub.name,
318
+ "path": new_hotkeypub.path,
319
+ "hotkey": new_hotkeypub.hotkey_str,
320
+ "hotkey_ss58": new_hotkeypub.hotkeypub.ss58_address,
321
+ "coldkey_ss58": new_hotkeypub.coldkeypub.ss58_address,
322
+ },
323
+ "error": "",
324
+ }
325
+ )
326
+ )
327
+ except KeyFileError:
328
+ print_error("KeyFileError: File is not writable")
329
+ if json_output:
330
+ json_console.print(
331
+ '{"success": false, "error": "Keyfile is not writable", "data": null}'
332
+ )
333
+
334
+
290
335
  async def new_hotkey(
291
336
  wallet: Wallet,
292
337
  n_words: int,
@@ -323,7 +368,7 @@ async def new_hotkey(
323
368
  "name": wallet.name,
324
369
  "path": wallet.path,
325
370
  "hotkey": wallet.hotkey_str,
326
- "hotkey_ss58": wallet.hotkey.ss58_address,
371
+ "hotkey_ss58": get_hotkey_pub_ss58(wallet),
327
372
  "coldkey_ss58": wallet.coldkeypub.ss58_address,
328
373
  },
329
374
  "error": "",
@@ -402,19 +447,24 @@ async def wallet_create(
402
447
  json_output: bool = False,
403
448
  ):
404
449
  """Creates a new wallet."""
405
- output_dict = {"success": False, "error": "", "data": None}
450
+ output_dict: dict[str, Optional[Union[bool, str, dict]]] = {
451
+ "success": False,
452
+ "error": "",
453
+ "data": None,
454
+ }
406
455
  if uri:
407
456
  try:
408
457
  keypair = Keypair.create_from_uri(uri)
409
458
  wallet.set_coldkey(keypair=keypair, encrypt=False, overwrite=False)
410
459
  wallet.set_coldkeypub(keypair=keypair, encrypt=False, overwrite=False)
411
460
  wallet.set_hotkey(keypair=keypair, encrypt=False, overwrite=False)
461
+ wallet.set_coldkeypub(keypair=keypair, encrypt=False, overwrite=False)
412
462
  output_dict["success"] = True
413
463
  output_dict["data"] = {
414
464
  "name": wallet.name,
415
465
  "path": wallet.path,
416
466
  "hotkey": wallet.hotkey_str,
417
- "hotkey_ss58": wallet.hotkey.ss58_address,
467
+ "hotkey_ss58": wallet.hotkeypub.ss58_address,
418
468
  "coldkey_ss58": wallet.coldkeypub.ss58_address,
419
469
  }
420
470
  except Exception as e:
@@ -455,7 +505,7 @@ async def wallet_create(
455
505
  "name": wallet.name,
456
506
  "path": wallet.path,
457
507
  "hotkey": wallet.hotkey_str,
458
- "hotkey_ss58": wallet.hotkey.ss58_address,
508
+ "hotkey_ss58": wallet.hotkeypub.ss58_address,
459
509
  }
460
510
  except KeyFileError as error:
461
511
  err = str(error)
@@ -794,13 +844,14 @@ async def wallet_list(wallet_path: str, json_output: bool):
794
844
  data = f"[bold red]Hotkey[/bold red][green] {hkey}[/green] (?)"
795
845
  hk_data = {"name": hkey.name, "ss58_address": "?"}
796
846
  if hkey:
847
+ hkey_ss58 = get_hotkey_pub_ss58(hkey)
797
848
  try:
798
849
  data = (
799
850
  f"[bold red]Hotkey[/bold red] [green]{hkey.hotkey_str}[/green] "
800
- f"ss58_address [green]{hkey.hotkey.ss58_address}[/green]\n"
851
+ f"ss58_address [green]{hkey_ss58}[/green]\n"
801
852
  )
802
853
  hk_data["name"] = hkey.hotkey_str
803
- hk_data["ss58_address"] = hkey.hotkey.ss58_address
854
+ hk_data["ss58_address"] = hkey_ss58
804
855
  except UnicodeDecodeError:
805
856
  pass
806
857
  wallet_tree.add(data)
@@ -1253,7 +1304,7 @@ def _get_hotkeys(
1253
1304
 
1254
1305
  def is_hotkey_matched(wallet: Wallet, item: str) -> bool:
1255
1306
  if is_valid_ss58_address(item):
1256
- return wallet.hotkey.ss58_address == item
1307
+ return get_hotkey_pub_ss58(wallet) == item
1257
1308
  else:
1258
1309
  return wallet.hotkey_str == item
1259
1310
 
@@ -1285,9 +1336,10 @@ def _get_key_address(all_hotkeys: list[Wallet]) -> tuple[list[str], dict[str, Wa
1285
1336
  hotkey_coldkey_to_hotkey_wallet = {}
1286
1337
  for hotkey_wallet in all_hotkeys:
1287
1338
  if hotkey_wallet.coldkeypub:
1288
- if hotkey_wallet.hotkey.ss58_address not in hotkey_coldkey_to_hotkey_wallet:
1289
- hotkey_coldkey_to_hotkey_wallet[hotkey_wallet.hotkey.ss58_address] = {}
1290
- hotkey_coldkey_to_hotkey_wallet[hotkey_wallet.hotkey.ss58_address][
1339
+ hotkey_ss58 = get_hotkey_pub_ss58(hotkey_wallet)
1340
+ if hotkey_ss58 not in hotkey_coldkey_to_hotkey_wallet:
1341
+ hotkey_coldkey_to_hotkey_wallet[hotkey_ss58] = {}
1342
+ hotkey_coldkey_to_hotkey_wallet[hotkey_ss58][
1291
1343
  hotkey_wallet.coldkeypub.ss58_address
1292
1344
  ] = hotkey_wallet
1293
1345
  else:
@@ -1408,6 +1460,7 @@ async def transfer(
1408
1460
  destination: str,
1409
1461
  amount: float,
1410
1462
  transfer_all: bool,
1463
+ allow_death: bool,
1411
1464
  era: int,
1412
1465
  prompt: bool,
1413
1466
  json_output: bool,
@@ -1419,6 +1472,7 @@ async def transfer(
1419
1472
  destination=destination,
1420
1473
  amount=Balance.from_tao(amount),
1421
1474
  transfer_all=transfer_all,
1475
+ allow_death=allow_death,
1422
1476
  era=era,
1423
1477
  prompt=prompt,
1424
1478
  )
@@ -1469,7 +1523,7 @@ async def inspect(
1469
1523
  if hotkey_names := [
1470
1524
  w.hotkey_str
1471
1525
  for w in hotkeys
1472
- if w.hotkey.ss58_address == n.hotkey
1526
+ if get_hotkey_pub_ss58(w) == n.hotkey
1473
1527
  ]:
1474
1528
  hotkey_name = f"{hotkey_names[0]}-"
1475
1529
  yield [""] * 5 + [
@@ -1800,10 +1854,96 @@ async def sign(
1800
1854
  )
1801
1855
 
1802
1856
  signed_message = keypair.sign(message.encode("utf-8")).hex()
1803
- console.print("[dark_sea_green3]Message signed successfully:")
1857
+ signer_address = keypair.ss58_address
1858
+ console.print("[dark_sea_green3]Message signed successfully!\n")
1859
+
1860
+ if json_output:
1861
+ json_console.print(
1862
+ json.dumps(
1863
+ {"signed_message": signed_message, "signer_address": signer_address}
1864
+ )
1865
+ )
1866
+ else:
1867
+ console.print(f"[yellow]Signature:[/yellow]\n{signed_message}")
1868
+ console.print(f"[yellow]Signer address:[/yellow] {signer_address}")
1869
+
1870
+
1871
+ async def verify(
1872
+ message: str,
1873
+ signature: str,
1874
+ public_key_or_ss58: str,
1875
+ json_output: bool = False,
1876
+ ):
1877
+ """Verify a message signature using a public key or SS58 address."""
1878
+
1879
+ if is_valid_ss58_address(public_key_or_ss58):
1880
+ print_verbose(f"[blue]SS58 address detected:[/blue] {public_key_or_ss58}")
1881
+ keypair = Keypair(ss58_address=public_key_or_ss58)
1882
+ signer_address = public_key_or_ss58
1883
+ else:
1884
+ try:
1885
+ public_key_hex = public_key_or_ss58.strip().lower()
1886
+ if public_key_hex.startswith("0x"):
1887
+ public_key_hex = public_key_hex[2:]
1888
+ if len(public_key_hex) == 64:
1889
+ bytes.fromhex(public_key_hex)
1890
+ print_verbose("[blue]Hex public key detected[/blue] (64 characters)")
1891
+ keypair = Keypair(public_key=public_key_hex)
1892
+ signer_address = keypair.ss58_address
1893
+ print_verbose(
1894
+ f"[blue]Corresponding SS58 address:[/blue] {signer_address}"
1895
+ )
1896
+ else:
1897
+ raise ValueError("Public key must be 32 bytes (64 hex characters)")
1898
+
1899
+ except (ValueError, TypeError) as e:
1900
+ if json_output:
1901
+ json_console.print(
1902
+ json.dumps(
1903
+ {
1904
+ "verified": False,
1905
+ "error": f"Invalid public key or SS58 address: {str(e)}",
1906
+ }
1907
+ )
1908
+ )
1909
+ else:
1910
+ err_console.print(
1911
+ f":cross_mark: Invalid SS58 address or hex public key (64 chars, with or without 0x prefix)- {str(e)}"
1912
+ )
1913
+ return False
1914
+
1915
+ try:
1916
+ signature_bytes = bytes.fromhex(signature.strip().lower().replace("0x", ""))
1917
+ except ValueError as e:
1918
+ if json_output:
1919
+ json_console.print(
1920
+ json.dumps(
1921
+ {
1922
+ "verified": False,
1923
+ "error": f"Invalid signature format: {str(e)}",
1924
+ }
1925
+ )
1926
+ )
1927
+ else:
1928
+ err_console.print(f"[red]:cross_mark: Invalid signature format: {str(e)}")
1929
+ return False
1930
+
1931
+ is_valid = keypair.verify(message.encode("utf-8"), signature_bytes)
1932
+
1804
1933
  if json_output:
1805
- json_console.print(json.dumps({"signed_message": signed_message}))
1806
- console.print(signed_message)
1934
+ json_console.print(
1935
+ json.dumps(
1936
+ {"verified": is_valid, "signer": signer_address, "message": message}
1937
+ )
1938
+ )
1939
+ else:
1940
+ if is_valid:
1941
+ console.print("[dark_sea_green3]Signature is valid!\n")
1942
+ console.print(f"[yellow]Signer:[/yellow] {signer_address}")
1943
+ else:
1944
+ err_console.print(":cross_mark: [red]Signature verification failed!")
1945
+
1946
+ return is_valid
1807
1947
 
1808
1948
 
1809
1949
  async def schedule_coldkey_swap(
@@ -15,6 +15,7 @@ from bittensor_cli.src.bittensor.utils import (
15
15
  console,
16
16
  format_error_message,
17
17
  json_console,
18
+ get_hotkey_pub_ss58,
18
19
  )
19
20
  from bittensor_cli.src.bittensor.extrinsics.root import (
20
21
  convert_weights_and_uids_for_emit,
@@ -128,7 +129,7 @@ class SetWeightsExtrinsic:
128
129
 
129
130
  # Generate the hash of the weights
130
131
  commit_hash = generate_weight_hash(
131
- address=self.wallet.hotkey.ss58_address,
132
+ address=get_hotkey_pub_ss58(self.wallet),
132
133
  netuid=self.netuid,
133
134
  uids=uids,
134
135
  values=weights,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bittensor-cli
3
- Version: 9.8.7
3
+ Version: 9.10.0
4
4
  Summary: Bittensor CLI
5
5
  Author: bittensor.com
6
6
  Project-URL: homepage, https://github.com/opentensor/btcli
@@ -8,10 +8,9 @@ Project-URL: Repository, https://github.com/opentensor/btcli
8
8
  Requires-Python: <3.14,>=3.9
9
9
  Description-Content-Type: text/markdown
10
10
  Requires-Dist: wheel
11
- Requires-Dist: async-substrate-interface>=1.1.0
11
+ Requires-Dist: async-substrate-interface>=1.4.2
12
12
  Requires-Dist: aiohttp~=3.10.2
13
13
  Requires-Dist: backoff~=2.2.1
14
- Requires-Dist: click<8.2.0
15
14
  Requires-Dist: GitPython>=3.0.0
16
15
  Requires-Dist: netaddr~=1.3.0
17
16
  Requires-Dist: numpy<3.0.0,>=2.0.1
@@ -20,8 +19,9 @@ Requires-Dist: pycryptodome<4.0.0,>=3.0.0
20
19
  Requires-Dist: PyYAML~=6.0.1
21
20
  Requires-Dist: rich<15.0,>=13.7
22
21
  Requires-Dist: scalecodec==1.2.11
23
- Requires-Dist: typer<0.16,>=0.12
24
- Requires-Dist: bittensor-wallet>=3.0.7
22
+ Requires-Dist: typer>=0.16
23
+ Requires-Dist: bittensor-wallet>=4.0.0
24
+ Requires-Dist: packaging
25
25
  Requires-Dist: plotille>=5.0.0
26
26
  Requires-Dist: plotly>=6.0.0
27
27
  Provides-Extra: cuda
@@ -71,7 +71,15 @@ Installation steps are described below. For a full documentation on how to use `
71
71
 
72
72
  ## Install on macOS and Linux
73
73
 
74
- You can install `btcli` on your local machine directly from source, PyPI, or Homebrew. **Make sure you verify your installation after you install**:
74
+ You can install `btcli` on your local machine directly from source, PyPI, or Homebrew.
75
+ **Make sure you verify your installation after you install**.
76
+
77
+ ### For macOS users
78
+ Note that the macOS preinstalled CPython installation is compiled with LibreSSL instead of OpenSSL. There are a number
79
+ of issues with LibreSSL, and as such is not fully supported by the libraries used by btcli. Thus we highly recommend, if
80
+ you are using a Mac, to first install Python from [Homebrew](https://brew.sh/). Additionally, the Rust FFI bindings
81
+ [if installing from precompiled wheels (default)] require the Homebrew-installed OpenSSL pacakge. If you choose to use
82
+ the preinstalled Python version from macOS, things may not work completely.
75
83
 
76
84
 
77
85
  ### Install from [PyPI](https://pypi.org/project/bittensor/)
@@ -1,5 +1,5 @@
1
1
  bittensor_cli/__init__.py,sha256=Lpv4NkbAQgwrfqFOnTMuR_S-fqGdaWCSLhxnFnGTHM0,1232
2
- bittensor_cli/cli.py,sha256=Q2AzvNEUz080lc7Usz-Dg2kFjQYCNERXnE1cWTWQubw,232741
2
+ bittensor_cli/cli.py,sha256=98G_j7HE6IM3breC6kOsEl6zvVXxrrwDFSEk1pEAxbg,240109
3
3
  bittensor_cli/doc_generation_helper.py,sha256=GexqjEIKulWg84hpNBEchJ840oOgOi7DWpt447nsdNI,91
4
4
  bittensor_cli/version.py,sha256=dU1xsa3mG5FPdhzvqlzDByNcCHmzcFQH3q1pQr4u76g,720
5
5
  bittensor_cli/src/__init__.py,sha256=QCR6kt9rbUiLC4gkvczl47eg725nqSFK4Xr7_mz3e_s,33171
@@ -8,12 +8,12 @@ bittensor_cli/src/bittensor/balances.py,sha256=q5KkxF8wmUguWAFddEKstfDKTxPe5ISHp
8
8
  bittensor_cli/src/bittensor/chain_data.py,sha256=_GATOCacWMN2jRurzn3hffJiq_l7AznGRkKePTAflwQ,44420
9
9
  bittensor_cli/src/bittensor/minigraph.py,sha256=BIzmSVLfBYiRAeGD_i1LAC8Cw7zxp38a91SIFEPMqYc,10479
10
10
  bittensor_cli/src/bittensor/networking.py,sha256=pZLMs8YXpZzDMLXWMBb_Bj6TVkm_q9khyY-lnbwVMuE,462
11
- bittensor_cli/src/bittensor/subtensor_interface.py,sha256=iPpM0mGsRwc7iejBI9oChpFd8DgEw13-Yb1fflQyCb8,61886
12
- bittensor_cli/src/bittensor/utils.py,sha256=WfxxQnekVy7nbB2jsPrRC4E7SFIvAjDJJjq3glhKMSc,48270
11
+ bittensor_cli/src/bittensor/subtensor_interface.py,sha256=9XJ74DTOLHoV5qQNmkhuvbl2kiaar4p1SV7GJeZY5p8,62698
12
+ bittensor_cli/src/bittensor/utils.py,sha256=DsBVb2WZ6baviYg0t9FfVZp8sn5C-h_Khbm4akxx1gg,48657
13
13
  bittensor_cli/src/bittensor/extrinsics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- bittensor_cli/src/bittensor/extrinsics/registration.py,sha256=7ybqpJ7-Z_PTgj4boCOFxgfjMBCHv0JE7MNpJzJmyDc,66360
15
- bittensor_cli/src/bittensor/extrinsics/root.py,sha256=C9WPssL2HpNK8u_IFPPr8TrdFgbLPTfkbAYzalfmbRM,19188
16
- bittensor_cli/src/bittensor/extrinsics/transfer.py,sha256=tKXC7DTvaR15Lh20FWtoRMkEWQdNFQcXstZCEw9sWHM,8567
14
+ bittensor_cli/src/bittensor/extrinsics/registration.py,sha256=Q43L-d_Ayp7saWWCPR4hShBDpzjh5bfsqtatiiiM2Zk,66199
15
+ bittensor_cli/src/bittensor/extrinsics/root.py,sha256=tOG-xSO0ihC--AhPwrhLkm1nduvHbFAObeONGSHUdJw,19218
16
+ bittensor_cli/src/bittensor/extrinsics/transfer.py,sha256=Dry4DZ5lSlJdrD0Y-W-8B4WMsN1oag0Kzm_GP8Nt9E8,9276
17
17
  bittensor_cli/src/bittensor/templates/main-filters.j2,sha256=ZM0l2exr6FKqw86GRyHHtw-h8Y5Ckgx-SPc-48gZoxI,914
18
18
  bittensor_cli/src/bittensor/templates/main-header.j2,sha256=aZwB9NeEjNr0pM5mPYTYeky_031zAu6yErIMiwTPcwE,1684
19
19
  bittensor_cli/src/bittensor/templates/neuron-details.j2,sha256=O_Mhg2E04BzW_cSGIldObhVTSRX29gDNqnimW4ty9rY,4848
@@ -28,24 +28,24 @@ bittensor_cli/src/bittensor/templates/view.css,sha256=OS0V_ixzdTU15FbNzpZW1m7-c6
28
28
  bittensor_cli/src/bittensor/templates/view.j2,sha256=4ux3uyqz34v9VVAX17GezuPESk4z9n5kkd9HbnTsF_Y,1101
29
29
  bittensor_cli/src/bittensor/templates/view.js,sha256=QIPnPp9SuYS9wcl7cwL8nFzd8idiDjNzrDjwwxpiVvY,45076
30
30
  bittensor_cli/src/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- bittensor_cli/src/commands/sudo.py,sha256=zyv4sJM7sH73_c-mgskcnF2kQfJBJ8_xF74WrZFv7rY,33820
31
+ bittensor_cli/src/commands/sudo.py,sha256=Ut4jD8mSRMT0dF0Xgoqr5_I3eW_1TnmOhFZ2zQNzWwU,33874
32
32
  bittensor_cli/src/commands/view.py,sha256=9lx6vfOkel8KIefUhDNaBS_j5lNR2djcRFRbK4mbnDE,12535
33
- bittensor_cli/src/commands/wallets.py,sha256=v6JDcWhP_CcBruboixKM1XMqhUKL6GbllGd39wHKbBs,71646
34
- bittensor_cli/src/commands/weights.py,sha256=BCJm_mlw0pVK4YEZuEMqQBpvvOoB7B1rzdvMeN3uTfM,16503
33
+ bittensor_cli/src/commands/wallets.py,sha256=aQs9XHFeL9_oW3gHwP3tmG6dCx8IiQH0npO5Gggsgc0,76668
34
+ bittensor_cli/src/commands/weights.py,sha256=iZMiZM3Y_WbglJdbN6QrRHnJ0AtlCOGmSJlXTIcOa3E,16529
35
35
  bittensor_cli/src/commands/liquidity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  bittensor_cli/src/commands/liquidity/liquidity.py,sha256=AXCjBvQb2gakP8n1z81npYkZ_QF5CQy7r82AMtQwXzk,21692
37
37
  bittensor_cli/src/commands/liquidity/utils.py,sha256=egfZHnvBMc8ydntAHnU6V5Zyi-wLkomjNuucUj73aZQ,6361
38
38
  bittensor_cli/src/commands/stake/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- bittensor_cli/src/commands/stake/add.py,sha256=oEpWFnRWazaFsbKn06o4gwQ1JfFmn4AwxRNecimI3js,27614
40
- bittensor_cli/src/commands/stake/children_hotkeys.py,sha256=lMiV-Z3SGZUEapdy0LRthFLx0RlFK0KVxytE47ybdEc,31746
39
+ bittensor_cli/src/commands/stake/add.py,sha256=9FFC0g2NDKm3Uheh4LFvqNvz17mhXpwWFRG2gyXjc7w,29759
40
+ bittensor_cli/src/commands/stake/children_hotkeys.py,sha256=1xR1FTljjaWD_-uTopVUkM88jNaz7vWuOwydG202lLQ,31736
41
41
  bittensor_cli/src/commands/stake/list.py,sha256=tzjhiJucXgOGaw7TGt420nGosH85AEjvOimP1XXV3Xs,29038
42
- bittensor_cli/src/commands/stake/move.py,sha256=X8rphxkL5BBHJSNpNqY_o3fffCpSI0-yX03SlNXfX_A,34857
43
- bittensor_cli/src/commands/stake/remove.py,sha256=DX7yPXs5n8Gp3O_Fwz8cMYI8CAiRp16gbKLwSCAoYmM,47341
42
+ bittensor_cli/src/commands/stake/move.py,sha256=TqUBqYEhfDu77l8BUdZYNy1MVybcizmtUTaPPFIAvbk,35171
43
+ bittensor_cli/src/commands/stake/remove.py,sha256=ANrH9VyCJqddnabXU1EbdUxh0bpwZzz3BH58MCvKqA4,51347
44
44
  bittensor_cli/src/commands/subnets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- bittensor_cli/src/commands/subnets/price.py,sha256=akXkbilWjQYqTYvtOhXngX_cVkU0Mv-Gl3kjce6dtl0,21490
46
- bittensor_cli/src/commands/subnets/subnets.py,sha256=ZeR7gxjtxi9eQdPLlIOmw3jDxDPnteppTPJ1-1y_TCs,94601
47
- bittensor_cli-9.8.7.dist-info/METADATA,sha256=PPTxAAdYJbLNkgqEtJHrr6nhlGBP-fVlbXiG5IRTEvA,6601
48
- bittensor_cli-9.8.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
- bittensor_cli-9.8.7.dist-info/entry_points.txt,sha256=hBTLGLbVxmAKy69XSKaUZvjTCmyEzDGZKq4S8UOto8I,49
50
- bittensor_cli-9.8.7.dist-info/top_level.txt,sha256=DvgvXpmTtI_Q1BbDZMlK90LFcGFCreN1daViEPV2iFw,14
51
- bittensor_cli-9.8.7.dist-info/RECORD,,
45
+ bittensor_cli/src/commands/subnets/price.py,sha256=RzcFVqFnQV5zBekyZCMrqpydh88yWlMLm5VJNUNfQCU,25814
46
+ bittensor_cli/src/commands/subnets/subnets.py,sha256=ROtNBTUuoQcinIO5l55ky28JPd1PI4IqybdIc9JTjr0,94628
47
+ bittensor_cli-9.10.0.dist-info/METADATA,sha256=Ws21m1MXBECp1IEizYL66YoemCnMzNqlNk133RC4_4Q,7169
48
+ bittensor_cli-9.10.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
+ bittensor_cli-9.10.0.dist-info/entry_points.txt,sha256=hBTLGLbVxmAKy69XSKaUZvjTCmyEzDGZKq4S8UOto8I,49
50
+ bittensor_cli-9.10.0.dist-info/top_level.txt,sha256=DvgvXpmTtI_Q1BbDZMlK90LFcGFCreN1daViEPV2iFw,14
51
+ bittensor_cli-9.10.0.dist-info/RECORD,,