bittensor-cli 9.9.0__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:
@@ -1471,7 +1523,7 @@ async def inspect(
1471
1523
  if hotkey_names := [
1472
1524
  w.hotkey_str
1473
1525
  for w in hotkeys
1474
- if w.hotkey.ss58_address == n.hotkey
1526
+ if get_hotkey_pub_ss58(w) == n.hotkey
1475
1527
  ]:
1476
1528
  hotkey_name = f"{hotkey_names[0]}-"
1477
1529
  yield [""] * 5 + [
@@ -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.9.0
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
@@ -11,7 +11,6 @@ Requires-Dist: wheel
11
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=lG3LyOXXiOOEIPgiW9qnqmKnH2wa598iJ6pf-eNCveg,234995
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=37BB5dfcRE6QrAKwuYs9XlaLs36xHrhJ3wCsWd-rXek,62672
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=S4HFvgwhUk-NQ26FOkg8m1ggAJ50jgPsW_isdAdS_rc,9235
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=SIcEf7AkxonUAM3zYEaQUJTczCIY6iFtR3sTunhB1C8,74745
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=jdNOilpEsq8f7vJUQH1qFdiQ-HbSg6siYQl_CQdtlh0,29731
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=RJiY_oSQUV-ZO04Y_PosrDqfz0JfdQX4ioB74f_7lU8,35144
43
- bittensor_cli/src/commands/stake/remove.py,sha256=Xf_BWihl--4WGKPl6Wz4VkWus3JKEikHQKA0tbQTetM,51318
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.9.0.dist-info/METADATA,sha256=3KHTWo7iaqwIrHfos259k3CbxZI9MBy_OwGxAZSf2rI,6601
48
- bittensor_cli-9.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
- bittensor_cli-9.9.0.dist-info/entry_points.txt,sha256=hBTLGLbVxmAKy69XSKaUZvjTCmyEzDGZKq4S8UOto8I,49
50
- bittensor_cli-9.9.0.dist-info/top_level.txt,sha256=DvgvXpmTtI_Q1BbDZMlK90LFcGFCreN1daViEPV2iFw,14
51
- bittensor_cli-9.9.0.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,,