meshtensor-cli 9.22.0__tar.gz → 9.23.0__tar.gz

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.
Files changed (73) hide show
  1. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/PKG-INFO +1 -1
  2. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/cli.py +69 -0
  3. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/governance/governance.py +155 -0
  4. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/pyproject.toml +1 -1
  5. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/README.md +0 -0
  6. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/__init__.py +0 -0
  7. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/doc_generation_helper.py +0 -0
  8. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/__init__.py +0 -0
  9. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/__init__.py +0 -0
  10. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/axon/__init__.py +0 -0
  11. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/axon/axon.py +0 -0
  12. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/__init__.py +0 -0
  13. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/contribute.py +0 -0
  14. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/contributors.py +0 -0
  15. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/create.py +0 -0
  16. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/dissolve.py +0 -0
  17. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/refund.py +0 -0
  18. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/update.py +0 -0
  19. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/utils.py +0 -0
  20. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/crowd/view.py +0 -0
  21. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/governance/__init__.py +0 -0
  22. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/liquidity/__init__.py +0 -0
  23. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/liquidity/liquidity.py +0 -0
  24. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/liquidity/utils.py +0 -0
  25. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/proxy.py +0 -0
  26. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/__init__.py +0 -0
  27. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/add.py +0 -0
  28. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/auto_staking.py +0 -0
  29. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/children_hotkeys.py +0 -0
  30. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/claim.py +0 -0
  31. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/list.py +0 -0
  32. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/move.py +0 -0
  33. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/remove.py +0 -0
  34. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/stake/wizard.py +0 -0
  35. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/subnets/__init__.py +0 -0
  36. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/subnets/mechanisms.py +0 -0
  37. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/subnets/price.py +0 -0
  38. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/subnets/subnets.py +0 -0
  39. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/sudo.py +0 -0
  40. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/tc/__init__.py +0 -0
  41. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/tc/tc.py +0 -0
  42. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/treasury/__init__.py +0 -0
  43. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/treasury/treasury.py +0 -0
  44. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/view.py +0 -0
  45. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/wallets.py +0 -0
  46. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/commands/weights.py +0 -0
  47. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/__init__.py +0 -0
  48. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/balances.py +0 -0
  49. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/chain_data.py +0 -0
  50. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/extrinsics/__init__.py +0 -0
  51. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/extrinsics/mev_shield.py +0 -0
  52. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/extrinsics/registration.py +0 -0
  53. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/extrinsics/root.py +0 -0
  54. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/extrinsics/serving.py +0 -0
  55. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/extrinsics/transfer.py +0 -0
  56. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/meshtensor_interface.py +0 -0
  57. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/minigraph.py +0 -0
  58. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/networking.py +0 -0
  59. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/main-filters.j2 +0 -0
  60. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/main-header.j2 +0 -0
  61. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/neuron-details.j2 +0 -0
  62. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/price-multi.j2 +0 -0
  63. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/price-single.j2 +0 -0
  64. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/subnet-details-header.j2 +0 -0
  65. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/subnet-details.j2 +0 -0
  66. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/subnet-metrics.j2 +0 -0
  67. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/subnets-table.j2 +0 -0
  68. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/table.j2 +0 -0
  69. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/view.css +0 -0
  70. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/view.j2 +0 -0
  71. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/templates/view.js +0 -0
  72. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/src/meshtensor/utils.py +0 -0
  73. {meshtensor_cli-9.22.0 → meshtensor_cli-9.23.0}/meshtensor_cli/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshtensor-cli
3
- Version: 9.22.0
3
+ Version: 9.23.0
4
4
  Summary: Meshtensor CLI
5
5
  Author: meshtensor.com
6
6
  Requires-Python: >=3.9
@@ -1441,6 +1441,9 @@ class CLIManager:
1441
1441
  self.governance_app.command("endorse")(self.governance_endorse)
1442
1442
  self.governance_app.command("cancel")(self.governance_cancel)
1443
1443
  self.governance_app.command("approve-treasury")(self.governance_approve_treasury)
1444
+ self.governance_app.command("status")(self.governance_status)
1445
+ self.governance_app.command("my-rewards")(self.governance_my_rewards)
1446
+ self.governance_app.command("my-delegations")(self.governance_my_delegations)
1444
1447
 
1445
1448
  # Treasury commands
1446
1449
  self.treasury_app.command("propose")(self.treasury_propose)
@@ -10854,6 +10857,72 @@ class CLIManager:
10854
10857
  )
10855
10858
  )
10856
10859
 
10860
+ def governance_status(
10861
+ self,
10862
+ network: Optional[list[str]] = Options.network,
10863
+ quiet: bool = Options.quiet,
10864
+ verbose: bool = Options.verbose,
10865
+ ):
10866
+ """Display governance system status overview."""
10867
+ self.verbosity_handler(quiet, verbose)
10868
+ return self._run_command(
10869
+ governance.governance_status(
10870
+ subtensor=self.initialize_chain(network),
10871
+ quiet=quiet,
10872
+ verbose=verbose,
10873
+ )
10874
+ )
10875
+
10876
+ def governance_my_rewards(
10877
+ self,
10878
+ network: Optional[list[str]] = Options.network,
10879
+ wallet_name: str = Options.wallet_name,
10880
+ wallet_path: str = Options.wallet_path,
10881
+ quiet: bool = Options.quiet,
10882
+ verbose: bool = Options.verbose,
10883
+ ):
10884
+ """Display governance rewards and contribution score for your wallet."""
10885
+ self.verbosity_handler(quiet, verbose)
10886
+ wallet = self.wallet_ask(
10887
+ wallet_name,
10888
+ wallet_path,
10889
+ ask_for=[WO.NAME, WO.PATH],
10890
+ validate=WV.WALLET,
10891
+ )
10892
+ return self._run_command(
10893
+ governance.governance_my_rewards(
10894
+ subtensor=self.initialize_chain(network),
10895
+ wallet=wallet,
10896
+ quiet=quiet,
10897
+ verbose=verbose,
10898
+ )
10899
+ )
10900
+
10901
+ def governance_my_delegations(
10902
+ self,
10903
+ network: Optional[list[str]] = Options.network,
10904
+ wallet_name: str = Options.wallet_name,
10905
+ wallet_path: str = Options.wallet_path,
10906
+ quiet: bool = Options.quiet,
10907
+ verbose: bool = Options.verbose,
10908
+ ):
10909
+ """Display active governance delegations for your wallet."""
10910
+ self.verbosity_handler(quiet, verbose)
10911
+ wallet = self.wallet_ask(
10912
+ wallet_name,
10913
+ wallet_path,
10914
+ ask_for=[WO.NAME, WO.PATH],
10915
+ validate=WV.WALLET,
10916
+ )
10917
+ return self._run_command(
10918
+ governance.governance_my_delegations(
10919
+ subtensor=self.initialize_chain(network),
10920
+ wallet=wallet,
10921
+ quiet=quiet,
10922
+ verbose=verbose,
10923
+ )
10924
+ )
10925
+
10857
10926
  # =========================================================================
10858
10927
  # Treasury commands
10859
10928
  # =========================================================================
@@ -1232,3 +1232,158 @@ async def governance_approve_treasury(
1232
1232
  print_error(f"Failed to approve treasury proposal #{proposal_id}")
1233
1233
  except Exception as e:
1234
1234
  print_error(f"Error approving treasury proposal: {e}")
1235
+
1236
+
1237
+ # ============================================================================
1238
+ # Governance Query Commands
1239
+ # ============================================================================
1240
+
1241
+
1242
+ async def governance_status(
1243
+ subtensor: "MeshtensorInterface",
1244
+ quiet: bool = False,
1245
+ verbose: bool = False,
1246
+ ):
1247
+ """Display governance system status overview."""
1248
+
1249
+ try:
1250
+ pool_balance = await subtensor.get_treasury_balance()
1251
+ participation = await subtensor.get_governance_participation_rate()
1252
+ golr_active = await subtensor.is_golr_active()
1253
+ threshold_mult = await subtensor.get_threshold_multiplier()
1254
+ total_eligible_vp = await subtensor.get_total_eligible_voting_power()
1255
+ rates = await subtensor.get_governance_reward_rate()
1256
+
1257
+ if quiet:
1258
+ data = {
1259
+ "reward_pool": str(pool_balance),
1260
+ "participation_rate_pct": participation / 10.0,
1261
+ "golr_active": golr_active,
1262
+ "threshold_multiplier_pct": threshold_mult / 10.0,
1263
+ "total_eligible_vp": total_eligible_vp,
1264
+ "reward_rates": rates,
1265
+ }
1266
+ json_console.print_json(data=data)
1267
+ return
1268
+
1269
+ table = Table(
1270
+ title="Governance Status",
1271
+ box=box.ROUNDED,
1272
+ show_header=False,
1273
+ )
1274
+ table.add_column("Parameter", style="bold")
1275
+ table.add_column("Value")
1276
+
1277
+ table.add_row("Reward Pool", str(pool_balance))
1278
+ table.add_row("Participation Rate", f"{participation / 10.0:.1f}%")
1279
+ table.add_row("GoLR Active", "[red]YES[/red]" if golr_active else "[green]No[/green]")
1280
+ table.add_row("Threshold Multiplier", f"{threshold_mult / 10.0:.1f}%")
1281
+ table.add_row("Total Eligible VP", f"{total_eligible_vp:,}")
1282
+ table.add_row("Reward Rate (base/min/max)",
1283
+ f"{rates['base_rate']/10:.1f}% / {rates['min_rate']/10:.1f}% / {rates['max_rate']/10:.1f}%")
1284
+
1285
+ if golr_active:
1286
+ signatories = await subtensor.get_golr_signatories()
1287
+ table.add_row("GoLR Signatories", str(len(signatories)))
1288
+
1289
+ console.print(table)
1290
+
1291
+ except Exception as e:
1292
+ print_error(f"Error querying governance status: {e}")
1293
+
1294
+
1295
+ async def governance_my_rewards(
1296
+ subtensor: "MeshtensorInterface",
1297
+ wallet: Wallet,
1298
+ quiet: bool = False,
1299
+ verbose: bool = False,
1300
+ ):
1301
+ """Display governance rewards and score for the current wallet."""
1302
+
1303
+ try:
1304
+ ss58 = wallet.coldkey.ss58_address
1305
+
1306
+ pending = await subtensor.get_pending_governance_rewards(ss58)
1307
+ score = await subtensor.get_contribution_score(ss58)
1308
+ vote_count = await subtensor.get_governance_vote_count(ss58)
1309
+
1310
+ if quiet:
1311
+ data = {
1312
+ "account": ss58,
1313
+ "pending_rewards": str(pending),
1314
+ "contribution_score": score,
1315
+ "vote_count": vote_count,
1316
+ }
1317
+ json_console.print_json(data=data)
1318
+ return
1319
+
1320
+ table = Table(
1321
+ title=f"Governance Rewards: {ss58[:8]}...{ss58[-8:]}",
1322
+ box=box.ROUNDED,
1323
+ show_header=False,
1324
+ )
1325
+ table.add_column("Field", style="bold")
1326
+ table.add_column("Value")
1327
+
1328
+ table.add_row("Pending Rewards", str(pending))
1329
+ table.add_row("Contribution Score", f"{score}/1000")
1330
+ table.add_row("Total Votes Cast", str(vote_count))
1331
+
1332
+ console.print(table)
1333
+
1334
+ except Exception as e:
1335
+ print_error(f"Error querying rewards: {e}")
1336
+
1337
+
1338
+ async def governance_my_delegations(
1339
+ subtensor: "MeshtensorInterface",
1340
+ wallet: Wallet,
1341
+ quiet: bool = False,
1342
+ verbose: bool = False,
1343
+ ):
1344
+ """Display active delegations for the current wallet."""
1345
+
1346
+ try:
1347
+ ss58 = wallet.coldkey.ss58_address
1348
+
1349
+ delegations = []
1350
+ for track_id in range(6):
1351
+ deleg = await subtensor.get_delegation(ss58, track_id)
1352
+ if deleg:
1353
+ track_name = GOVERNANCE_TRACKS.get(track_id, {}).get("name", f"Track {track_id}")
1354
+ delegations.append({
1355
+ "track": track_id,
1356
+ "track_name": track_name,
1357
+ **deleg,
1358
+ })
1359
+
1360
+ if quiet:
1361
+ json_console.print_json(data={"account": ss58, "delegations": delegations})
1362
+ return
1363
+
1364
+ if not delegations:
1365
+ console.print(f"\nNo active delegations for {ss58[:8]}...{ss58[-8:]}")
1366
+ return
1367
+
1368
+ table = Table(
1369
+ title=f"Delegations: {ss58[:8]}...{ss58[-8:]}",
1370
+ box=box.ROUNDED,
1371
+ )
1372
+ table.add_column("Track", style="bold")
1373
+ table.add_column("Delegatee")
1374
+ table.add_column("Conviction", justify="center")
1375
+ table.add_column("VP Estimate", justify="right")
1376
+
1377
+ for d in delegations:
1378
+ delegatee = d["delegatee"]
1379
+ table.add_row(
1380
+ d["track_name"],
1381
+ f"{delegatee[:8]}...{delegatee[-8:]}",
1382
+ str(d["conviction"]),
1383
+ f"{d['vp_estimate']:,}",
1384
+ )
1385
+
1386
+ console.print(table)
1387
+
1388
+ except Exception as e:
1389
+ print_error(f"Error querying delegations: {e}")
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "meshtensor-cli"
7
- version = "9.22.0"
7
+ version = "9.23.0"
8
8
  description = "Meshtensor CLI"
9
9
  readme = "README.md"
10
10
  authors = [