bittensor-cli 9.0.0rc2__py3-none-any.whl → 9.0.0rc4__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.
@@ -326,7 +326,7 @@ async def subnets_list(
326
326
  if netuid == 0:
327
327
  emission_tao = 0.0
328
328
  else:
329
- emission_tao = subnet.emission.tao
329
+ emission_tao = subnet.tao_in_emission.tao
330
330
 
331
331
  alpha_in_value = (
332
332
  f"{millify_tao(subnet.alpha_in.tao)}"
@@ -399,7 +399,7 @@ async def subnets_list(
399
399
  )
400
400
 
401
401
  total_emissions = round(
402
- sum(float(subnet.emission.tao) for subnet in subnets if subnet.netuid != 0),
402
+ sum(subnet.tao_in_emission.tao for subnet in subnets if subnet.netuid != 0),
403
403
  4,
404
404
  )
405
405
  total_rate = round(
@@ -528,7 +528,7 @@ async def subnets_list(
528
528
  if netuid == 0:
529
529
  emission_tao = 0.0
530
530
  else:
531
- emission_tao = subnet.emission.tao
531
+ emission_tao = subnet.tao_in_emission.tao
532
532
 
533
533
  market_cap = (subnet.alpha_in.tao + subnet.alpha_out.tao) * subnet.price.tao
534
534
  supply = subnet.alpha_in.tao + subnet.alpha_out.tao
@@ -657,7 +657,7 @@ async def subnets_list(
657
657
  # Calculate totals
658
658
  total_netuids = len(subnets)
659
659
  _total_emissions = sum(
660
- float(subnet.emission.tao) for subnet in subnets if subnet.netuid != 0
660
+ subnet.tao_in_emission.tao for subnet in subnets if subnet.netuid != 0
661
661
  )
662
662
  total_emissions = (
663
663
  f"{millify_tao(_total_emissions)}"
@@ -665,9 +665,7 @@ async def subnets_list(
665
665
  else f"{_total_emissions:,.2f}"
666
666
  )
667
667
 
668
- total_rate = sum(
669
- float(subnet.price.tao) for subnet in subnets if subnet.netuid != 0
670
- )
668
+ total_rate = sum(subnet.price.tao for subnet in subnets if subnet.netuid != 0)
671
669
  total_rate = (
672
670
  f"{millify_tao(total_rate)}" if not verbose else f"{total_rate:,.2f}"
673
671
  )
@@ -804,6 +802,7 @@ async def subnets_list(
804
802
  async def show(
805
803
  subtensor: "SubtensorInterface",
806
804
  netuid: int,
805
+ sort: bool = False,
807
806
  max_rows: Optional[int] = None,
808
807
  delegate_selection: bool = False,
809
808
  verbose: bool = False,
@@ -850,18 +849,6 @@ async def show(
850
849
  )
851
850
 
852
851
  table.add_column("[bold white]Position", style="white", justify="center")
853
- # table.add_column(
854
- # f"[bold white]Total Stake ({Balance.get_unit(0)})",
855
- # style=COLOR_PALETTE["POOLS"]["ALPHA_IN"],
856
- # justify="center",
857
- # )
858
- # ------- Temporary columns for testing -------
859
- # table.add_column(
860
- # "Alpha (τ)",
861
- # style=COLOR_PALETTE["POOLS"]["EXTRA_2"],
862
- # no_wrap=True,
863
- # justify="right",
864
- # )
865
852
  table.add_column(
866
853
  "Tao (τ)",
867
854
  style=COLOR_PALETTE["POOLS"]["EXTRA_2"],
@@ -869,7 +856,6 @@ async def show(
869
856
  justify="right",
870
857
  footer=f"{tao_sum:.4f} τ" if verbose else f"{millify_tao(tao_sum)} τ",
871
858
  )
872
- # ------- End Temporary columns for testing -------
873
859
  table.add_column(
874
860
  f"[bold white]Emission ({Balance.get_unit(0)}/block)",
875
861
  style=COLOR_PALETTE["POOLS"]["EMISSION"],
@@ -1075,14 +1061,6 @@ async def show(
1075
1061
  pad_edge=True,
1076
1062
  )
1077
1063
 
1078
- # For hotkey_block_emission calculation
1079
- emission_sum = sum(
1080
- [
1081
- subnet_state.emission[idx].tao
1082
- for idx in range(len(subnet_state.emission))
1083
- ]
1084
- )
1085
-
1086
1064
  # For table footers
1087
1065
  alpha_sum = sum(
1088
1066
  [
@@ -1102,7 +1080,16 @@ async def show(
1102
1080
  for idx in range(len(subnet_state.tao_stake))
1103
1081
  ]
1104
1082
  )
1105
- relative_emissions_sum = 0
1083
+ dividends_sum = sum(
1084
+ subnet_state.dividends[idx] for idx in range(len(subnet_state.dividends))
1085
+ )
1086
+ emission_sum = sum(
1087
+ [
1088
+ subnet_state.emission[idx].tao
1089
+ for idx in range(len(subnet_state.emission))
1090
+ ]
1091
+ )
1092
+
1106
1093
  owner_hotkeys = await subtensor.get_owned_hotkeys(subnet_info.owner_coldkey)
1107
1094
  if subnet_info.owner_hotkey not in owner_hotkeys:
1108
1095
  owner_hotkeys.append(subnet_info.owner_hotkey)
@@ -1118,25 +1105,24 @@ async def show(
1118
1105
  sorted_indices = sorted(
1119
1106
  range(len(subnet_state.hotkeys)),
1120
1107
  key=lambda i: (
1121
- # Sort by owner status first
1122
- not (
1123
- subnet_state.coldkeys[i] == subnet_info.owner_coldkey
1124
- or subnet_state.hotkeys[i] in owner_hotkeys
1125
- ),
1126
- # Then sort by stake amount (higher stakes first)
1127
- -subnet_state.total_stake[i].tao,
1108
+ # If sort is True, sort only by UIDs
1109
+ i
1110
+ if sort
1111
+ else (
1112
+ # Otherwise
1113
+ # Sort by owner status first
1114
+ not (
1115
+ subnet_state.coldkeys[i] == subnet_info.owner_coldkey
1116
+ or subnet_state.hotkeys[i] in owner_hotkeys
1117
+ ),
1118
+ # Then sort by stake amount (higher stakes first)
1119
+ -subnet_state.total_stake[i].tao,
1120
+ )
1128
1121
  ),
1129
1122
  )
1130
1123
 
1131
1124
  rows = []
1132
1125
  for idx in sorted_indices:
1133
- hotkey_block_emission = (
1134
- subnet_state.emission[idx].tao / emission_sum
1135
- if emission_sum != 0
1136
- else 0
1137
- )
1138
- relative_emissions_sum += hotkey_block_emission
1139
-
1140
1126
  # Get identity for this uid
1141
1127
  coldkey_identity = identities.get(subnet_state.coldkeys[idx], {}).get(
1142
1128
  "name", ""
@@ -1175,11 +1161,9 @@ async def show(
1175
1161
  f"τ {tao_stake.tao:.4f}"
1176
1162
  if verbose
1177
1163
  else f"τ {millify_tao(tao_stake)}", # Tao Stake
1178
- # str(subnet_state.dividends[idx]),
1179
- f"{Balance.from_tao(hotkey_block_emission).set_unit(netuid_).tao:.5f}", # Dividends
1180
- f"{subnet_state.incentives[idx]:.4f}", # Incentive
1181
- # f"{Balance.from_tao(hotkey_block_emission).set_unit(netuid_).tao:.5f}", # Emissions relative
1182
- f"{Balance.from_tao(subnet_state.emission[idx].tao).set_unit(netuid_).tao:.5f} {subnet_info.symbol}", # Emissions
1164
+ f"{subnet_state.dividends[idx]:.6f}", # Dividends
1165
+ f"{subnet_state.incentives[idx]:.6f}", # Incentive
1166
+ f"{Balance.from_tao(subnet_state.emission[idx].tao).set_unit(netuid_).tao:.6f} {subnet_info.symbol}", # Emissions
1183
1167
  f"{subnet_state.hotkeys[idx][:6]}"
1184
1168
  if not verbose
1185
1169
  else f"{subnet_state.hotkeys[idx]}", # Hotkey
@@ -1201,7 +1185,6 @@ async def show(
1201
1185
  if verbose
1202
1186
  else f"{millify_tao(stake_sum)} {subnet_info.symbol}",
1203
1187
  )
1204
- # ------- Temporary columns for testing -------
1205
1188
  table.add_column(
1206
1189
  f"Alpha ({Balance.get_unit(netuid_)})",
1207
1190
  style=COLOR_PALETTE["POOLS"]["EXTRA_2"],
@@ -1220,24 +1203,14 @@ async def show(
1220
1203
  if verbose
1221
1204
  else f"{millify_tao(tao_sum)} {subnet_info.symbol}",
1222
1205
  )
1223
- # ------- End Temporary columns for testing -------
1224
1206
  table.add_column(
1225
1207
  "Dividends",
1226
1208
  style=COLOR_PALETTE["POOLS"]["EMISSION"],
1227
1209
  no_wrap=True,
1228
1210
  justify="center",
1229
- footer=f"{relative_emissions_sum:.3f}",
1211
+ footer=f"{dividends_sum:.3f}",
1230
1212
  )
1231
1213
  table.add_column("Incentive", style="#5fd7ff", no_wrap=True, justify="center")
1232
-
1233
- # Hiding relative emissions for now
1234
- # table.add_column(
1235
- # "Emissions",
1236
- # style="light_goldenrod2",
1237
- # no_wrap=True,
1238
- # justify="center",
1239
- # footer=f"{relative_emissions_sum:.3f}",
1240
- # )
1241
1214
  table.add_column(
1242
1215
  f"Emissions ({Balance.get_unit(netuid_)})",
1243
1216
  style=COLOR_PALETTE["POOLS"]["EMISSION"],
@@ -6,7 +6,7 @@ from typing import Generator, Optional
6
6
 
7
7
  import aiohttp
8
8
  from bittensor_wallet import Wallet, Keypair
9
- from bittensor_wallet.errors import KeyFileError
9
+ from bittensor_wallet.errors import KeyFileError, PasswordError
10
10
  from bittensor_wallet.keyfile import Keyfile
11
11
  from fuzzywuzzy import fuzz
12
12
  from rich import box
@@ -286,16 +286,12 @@ async def wallet_balance(
286
286
  wallet_names = [wallet.name]
287
287
 
288
288
  block_hash = await subtensor.substrate.get_chain_head()
289
- free_balances, staked_balances = await asyncio.gather(
290
- subtensor.get_balances(*coldkeys, block_hash=block_hash),
291
- subtensor.get_total_stake_for_coldkey(*coldkeys, block_hash=block_hash),
292
- )
289
+ free_balances = await subtensor.get_balances(*coldkeys, block_hash=block_hash)
293
290
 
294
291
  total_free_balance = sum(free_balances.values())
295
- total_staked_balance = sum(staked_balances.values())
296
292
 
297
293
  balances = {
298
- name: (coldkey, free_balances[coldkey], staked_balances[coldkey])
294
+ name: (coldkey, free_balances[coldkey])
299
295
  for (name, coldkey) in zip(wallet_names, coldkeys)
300
296
  }
301
297
 
@@ -316,18 +312,6 @@ async def wallet_balance(
316
312
  style=COLOR_PALETTE["GENERAL"]["BALANCE"],
317
313
  no_wrap=True,
318
314
  ),
319
- Column(
320
- "[white]Staked Balance",
321
- justify="right",
322
- style=COLOR_PALETTE["STAKE"]["STAKE_AMOUNT"],
323
- no_wrap=True,
324
- ),
325
- Column(
326
- "[white]Total Balance",
327
- justify="right",
328
- style=COLOR_PALETTE["GENERAL"]["BALANCE"],
329
- no_wrap=True,
330
- ),
331
315
  title=f"\n [{COLOR_PALETTE['GENERAL']['HEADER']}]Wallet Coldkey Balance\nNetwork: {subtensor.network}",
332
316
  show_footer=True,
333
317
  show_edge=False,
@@ -338,25 +322,21 @@ async def wallet_balance(
338
322
  leading=True,
339
323
  )
340
324
 
341
- for name, (coldkey, free, staked) in balances.items():
325
+ for name, (coldkey, free) in balances.items():
342
326
  table.add_row(
343
327
  name,
344
328
  coldkey,
345
329
  str(free),
346
- str(staked),
347
- str(free + staked),
348
330
  )
349
331
  table.add_row()
350
332
  table.add_row(
351
333
  "Total Balance",
352
334
  "",
353
335
  str(total_free_balance),
354
- str(total_staked_balance),
355
- str(total_free_balance + total_staked_balance),
356
336
  )
357
337
  console.print(Padding(table, (0, 0, 0, 4)))
358
338
  await subtensor.substrate.close()
359
- return total_free_balance, total_staked_balance
339
+ return total_free_balance
360
340
 
361
341
 
362
342
  async def get_wallet_transfers(wallet_address: str) -> list[dict]:
@@ -1418,19 +1398,31 @@ async def check_coldkey_swap(wallet: Wallet, subtensor: SubtensorInterface):
1418
1398
  async def sign(wallet: Wallet, message: str, use_hotkey: str):
1419
1399
  """Sign a message using the provided wallet or hotkey."""
1420
1400
 
1421
- try:
1422
- wallet.unlock_coldkey()
1423
- except KeyFileError:
1424
- err_console.print(
1425
- ":cross_mark: [red]Keyfile is corrupt, non-writable, non-readable or the password used to decrypt is "
1426
- "invalid[/red]:[bold white]\n [/bold white]"
1427
- )
1401
+ def _unlock(key: str):
1402
+ try:
1403
+ getattr(wallet, f"unlock_{key}")()
1404
+ return True
1405
+ except PasswordError:
1406
+ err_console.print(
1407
+ ":cross_mark: [red]The password used to decrypt your keyfile is invalid[/red]"
1408
+ )
1409
+ return False
1410
+ except KeyFileError:
1411
+ err_console.print(
1412
+ ":cross_mark: [red]Keyfile is corrupt, non-writable, or non-readable[/red]:"
1413
+ )
1414
+ return False
1415
+
1428
1416
  if not use_hotkey:
1417
+ if not _unlock("coldkey"):
1418
+ return False
1429
1419
  keypair = wallet.coldkey
1430
1420
  print_verbose(
1431
1421
  f"Signing using [{COLOR_PALETTE['GENERAL']['COLDKEY']}]coldkey: {wallet.name}"
1432
1422
  )
1433
1423
  else:
1424
+ if not _unlock("hotkey"):
1425
+ return False
1434
1426
  keypair = wallet.hotkey
1435
1427
  print_verbose(
1436
1428
  f"Signing using [{COLOR_PALETTE['GENERAL']['HOTKEY']}]hotkey: {wallet.hotkey_str}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bittensor-cli
3
- Version: 9.0.0rc2
3
+ Version: 9.0.0rc4
4
4
  Summary: Bittensor CLI
5
5
  Home-page: https://github.com/opentensor/btcli
6
6
  Author: bittensor.com
@@ -1,14 +1,14 @@
1
- bittensor_cli/__init__.py,sha256=ahR14ZNIE6lpjK1vEC4NA8XjHQuOaQYjySuRNJTgpno,1216
2
- bittensor_cli/cli.py,sha256=4o-3gpKQ9dQHLS4O4uX-rFBgIRaKH_51hgJYNqgAo1I,174144
1
+ bittensor_cli/__init__.py,sha256=9HvyLfJ2pUxwPjgT8Aqp6uWbkuD-TKrpVMLUBeD9U9A,1216
2
+ bittensor_cli/cli.py,sha256=LHeltSOQArKSc2Fct6dIUwXPoJs1pJoA4Y0aHvDGC_g,186698
3
3
  bittensor_cli/doc_generation_helper.py,sha256=GexqjEIKulWg84hpNBEchJ840oOgOi7DWpt447nsdNI,91
4
- bittensor_cli/src/__init__.py,sha256=ybFc_B-cHvxjtpAbfwHaufuQFCkW9tz4Fab7F8nuvCw,25504
4
+ bittensor_cli/src/__init__.py,sha256=CBUMVER1JwPi2bWXhpPJ4xtZqPZyvekExOS7Fv6HtAE,25531
5
5
  bittensor_cli/src/bittensor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  bittensor_cli/src/bittensor/balances.py,sha256=E-niENvR7lAaoS5ZyCmwl_9M-nspnkcuIxf_dHiJIDg,11078
7
7
  bittensor_cli/src/bittensor/chain_data.py,sha256=6VyuoDLaJz2QC9NJz9x2Ampi2fdqXumg6cCFfN-Vpq4,30642
8
8
  bittensor_cli/src/bittensor/minigraph.py,sha256=BIzmSVLfBYiRAeGD_i1LAC8Cw7zxp38a91SIFEPMqYc,10479
9
9
  bittensor_cli/src/bittensor/networking.py,sha256=pZLMs8YXpZzDMLXWMBb_Bj6TVkm_q9khyY-lnbwVMuE,462
10
- bittensor_cli/src/bittensor/subtensor_interface.py,sha256=koqbGIUhqHBpY4ckDF--kmwXjXb9hRK0ye5uFDUBL-g,53072
11
- bittensor_cli/src/bittensor/utils.py,sha256=oFr_gKcKOSi1nR6hFA2lKpnnLcOZTg5dGbKlyZE3LnU,42353
10
+ bittensor_cli/src/bittensor/subtensor_interface.py,sha256=rwB-P0rw_h-ynO9KUNK4ODooboHpQ54RoNBKSVU9BxA,53074
11
+ bittensor_cli/src/bittensor/utils.py,sha256=q_uSvTDpgQOqWhvwi3gi7xoROSlBJ0K1ErwUenqURag,42962
12
12
  bittensor_cli/src/bittensor/extrinsics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  bittensor_cli/src/bittensor/extrinsics/registration.py,sha256=OYRq6hjKzKpZuMjsVK-3O6xeV3TCOZch3VEt8hGITjo,64169
14
14
  bittensor_cli/src/bittensor/extrinsics/root.py,sha256=PvAPkLqfcCRLAR_d1qu3YfKhywFZuHuUyy5h_XZzfR8,19359
@@ -16,17 +16,19 @@ bittensor_cli/src/bittensor/extrinsics/transfer.py,sha256=mg7hyvQX2IGVh4hkTd1u_o
16
16
  bittensor_cli/src/bittensor/templates/table.j2,sha256=P2EFiksnO1cQsB8zjK6hVJwUryHTsLslzRE0YtobAV8,10601
17
17
  bittensor_cli/src/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  bittensor_cli/src/commands/sudo.py,sha256=PTOTp0_OmWksi29k4d33qmNWZAOKAcjZyU7G3wNIdjs,26343
19
- bittensor_cli/src/commands/wallets.py,sha256=VgTIgA9L-Ugf6n2ut3b9cmAeRKbfNznB0_mYKoeR6IA,49197
19
+ bittensor_cli/src/commands/wallets.py,sha256=qH0TkeSQqvowZ8uGF8qeQOgyBS-KxyegD4VK0S0BG4Q,48802
20
20
  bittensor_cli/src/commands/weights.py,sha256=icJpHGLBxMUYvVUFkmPxMYuKAgBx4ELjY7f1WvX3rqg,16433
21
21
  bittensor_cli/src/commands/stake/__init__.py,sha256=uxomMv_QrYt5Qn3_X5UWFFh45ISjB0JmDmCFxVyX8nQ,6495
22
+ bittensor_cli/src/commands/stake/add.py,sha256=57Dhu8B6EGlEBrsqtHJ4k_en5p_oZ1b0L1YbB0dEspw,25226
22
23
  bittensor_cli/src/commands/stake/children_hotkeys.py,sha256=k8XxWuoUVTaDi6PtrHwnVqc0gs9sGbrogP5XpCVbK7E,29745
23
- bittensor_cli/src/commands/stake/move.py,sha256=yXpBiOZJy1L3-N8t5ezerGTMeaiQpsdqjxOA7EE1iXs,37467
24
- bittensor_cli/src/commands/stake/stake.py,sha256=_0zUeEXm0iRQtqWAvk6qq9Y44GcItiyb2g9Ee9bdxYY,77686
24
+ bittensor_cli/src/commands/stake/list.py,sha256=Z5pB5YlSLfY0QWR4ZWd-IWXbQRWy09FBK6iHsodWntk,29797
25
+ bittensor_cli/src/commands/stake/move.py,sha256=YEXz5BfhAaQUJYyG11qnhXvFsSmz6ZJ6U4CWLHey4AE,37466
26
+ bittensor_cli/src/commands/stake/remove.py,sha256=T8poiXia_9hexiVXdi7YG6SzicoEt2sIybN2SIFDyP4,43393
25
27
  bittensor_cli/src/commands/subnets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
28
  bittensor_cli/src/commands/subnets/price.py,sha256=TWcRXUFeS_Q-pfyv0YIluAL8SE7d2gzTODK-9M2J5pw,29878
27
- bittensor_cli/src/commands/subnets/subnets.py,sha256=a4g5Dcx28Jzrlh2HE2VQ7iEpRSnx9XUFyy1gGGPM0v0,80882
28
- bittensor_cli-9.0.0rc2.dist-info/METADATA,sha256=XScNNV2UmDogTn35NdwmJNrdSUGpwNFVSBvxwp1TrGw,6862
29
- bittensor_cli-9.0.0rc2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
30
- bittensor_cli-9.0.0rc2.dist-info/entry_points.txt,sha256=hBTLGLbVxmAKy69XSKaUZvjTCmyEzDGZKq4S8UOto8I,49
31
- bittensor_cli-9.0.0rc2.dist-info/top_level.txt,sha256=DvgvXpmTtI_Q1BbDZMlK90LFcGFCreN1daViEPV2iFw,14
32
- bittensor_cli-9.0.0rc2.dist-info/RECORD,,
29
+ bittensor_cli/src/commands/subnets/subnets.py,sha256=ydCKUvmEwJK3hVns4QaV_Cw4sZTajrQk0CVGs_ynBcM,79805
30
+ bittensor_cli-9.0.0rc4.dist-info/METADATA,sha256=j_Ocs-LAFHWU_LhNEkSN6ZET6LHuHQVpX_LdOQ4cqm0,6862
31
+ bittensor_cli-9.0.0rc4.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
32
+ bittensor_cli-9.0.0rc4.dist-info/entry_points.txt,sha256=hBTLGLbVxmAKy69XSKaUZvjTCmyEzDGZKq4S8UOto8I,49
33
+ bittensor_cli-9.0.0rc4.dist-info/top_level.txt,sha256=DvgvXpmTtI_Q1BbDZMlK90LFcGFCreN1daViEPV2iFw,14
34
+ bittensor_cli-9.0.0rc4.dist-info/RECORD,,