meshtensor-cli 9.20.0__tar.gz → 9.22.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.
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/PKG-INFO +1 -1
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/cli.py +120 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/governance/governance.py +161 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/pyproject.toml +1 -1
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/README.md +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/doc_generation_helper.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/axon/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/axon/axon.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/contribute.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/contributors.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/create.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/dissolve.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/refund.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/update.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/utils.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/view.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/governance/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/liquidity/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/liquidity/liquidity.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/liquidity/utils.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/proxy.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/add.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/auto_staking.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/children_hotkeys.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/claim.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/list.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/move.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/remove.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/wizard.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/mechanisms.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/price.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/subnets.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/sudo.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/tc/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/tc/tc.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/treasury/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/treasury/treasury.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/view.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/wallets.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/weights.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/balances.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/chain_data.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/__init__.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/mev_shield.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/registration.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/root.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/serving.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/transfer.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/meshtensor_interface.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/minigraph.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/networking.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/main-filters.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/main-header.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/neuron-details.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/price-multi.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/price-single.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/subnet-details-header.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/subnet-details.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/subnet-metrics.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/subnets-table.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/table.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/view.css +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/view.j2 +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/view.js +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/utils.py +0 -0
- {meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/version.py +0 -0
|
@@ -1437,6 +1437,10 @@ class CLIManager:
|
|
|
1437
1437
|
self.governance_app.command("set-track-coefficients")(self.governance_set_track_coefficients)
|
|
1438
1438
|
self.governance_app.command("set-config")(self.governance_set_config)
|
|
1439
1439
|
self.governance_app.command("set-golr-config")(self.governance_set_golr_config)
|
|
1440
|
+
self.governance_app.command("prune-accounts")(self.governance_prune_accounts)
|
|
1441
|
+
self.governance_app.command("endorse")(self.governance_endorse)
|
|
1442
|
+
self.governance_app.command("cancel")(self.governance_cancel)
|
|
1443
|
+
self.governance_app.command("approve-treasury")(self.governance_approve_treasury)
|
|
1440
1444
|
|
|
1441
1445
|
# Treasury commands
|
|
1442
1446
|
self.treasury_app.command("propose")(self.treasury_propose)
|
|
@@ -10734,6 +10738,122 @@ class CLIManager:
|
|
|
10734
10738
|
)
|
|
10735
10739
|
)
|
|
10736
10740
|
|
|
10741
|
+
def governance_prune_accounts(
|
|
10742
|
+
self,
|
|
10743
|
+
accounts: list[str] = typer.Option(
|
|
10744
|
+
..., "--accounts", help="SS58 addresses to prune (max 500)."
|
|
10745
|
+
),
|
|
10746
|
+
network: Optional[list[str]] = Options.network,
|
|
10747
|
+
wallet_name: str = Options.wallet_name,
|
|
10748
|
+
wallet_path: str = Options.wallet_path,
|
|
10749
|
+
quiet: bool = Options.quiet,
|
|
10750
|
+
verbose: bool = Options.verbose,
|
|
10751
|
+
):
|
|
10752
|
+
"""Prune governance storage for zero-balance accounts (Root-only)."""
|
|
10753
|
+
self.verbosity_handler(quiet, verbose)
|
|
10754
|
+
wallet = self.wallet_ask(
|
|
10755
|
+
wallet_name,
|
|
10756
|
+
wallet_path,
|
|
10757
|
+
ask_for=[WO.NAME, WO.PATH],
|
|
10758
|
+
validate=WV.WALLET,
|
|
10759
|
+
)
|
|
10760
|
+
return self._run_command(
|
|
10761
|
+
governance.governance_prune_accounts(
|
|
10762
|
+
subtensor=self.initialize_chain(network),
|
|
10763
|
+
wallet=wallet,
|
|
10764
|
+
accounts=accounts,
|
|
10765
|
+
quiet=quiet,
|
|
10766
|
+
verbose=verbose,
|
|
10767
|
+
)
|
|
10768
|
+
)
|
|
10769
|
+
|
|
10770
|
+
def governance_endorse(
|
|
10771
|
+
self,
|
|
10772
|
+
ref_index: int = typer.Option(
|
|
10773
|
+
..., "--ref-index", help="Referendum index to endorse."
|
|
10774
|
+
),
|
|
10775
|
+
network: Optional[list[str]] = Options.network,
|
|
10776
|
+
wallet_name: str = Options.wallet_name,
|
|
10777
|
+
wallet_path: str = Options.wallet_path,
|
|
10778
|
+
quiet: bool = Options.quiet,
|
|
10779
|
+
verbose: bool = Options.verbose,
|
|
10780
|
+
):
|
|
10781
|
+
"""Endorse a referendum as a Technical Committee member."""
|
|
10782
|
+
self.verbosity_handler(quiet, verbose)
|
|
10783
|
+
wallet = self.wallet_ask(
|
|
10784
|
+
wallet_name,
|
|
10785
|
+
wallet_path,
|
|
10786
|
+
ask_for=[WO.NAME, WO.PATH],
|
|
10787
|
+
validate=WV.WALLET,
|
|
10788
|
+
)
|
|
10789
|
+
return self._run_command(
|
|
10790
|
+
governance.governance_endorse(
|
|
10791
|
+
subtensor=self.initialize_chain(network),
|
|
10792
|
+
wallet=wallet,
|
|
10793
|
+
ref_index=ref_index,
|
|
10794
|
+
quiet=quiet,
|
|
10795
|
+
verbose=verbose,
|
|
10796
|
+
)
|
|
10797
|
+
)
|
|
10798
|
+
|
|
10799
|
+
def governance_cancel(
|
|
10800
|
+
self,
|
|
10801
|
+
ref_index: int = typer.Option(
|
|
10802
|
+
..., "--ref-index", help="Referendum index to cancel."
|
|
10803
|
+
),
|
|
10804
|
+
network: Optional[list[str]] = Options.network,
|
|
10805
|
+
wallet_name: str = Options.wallet_name,
|
|
10806
|
+
wallet_path: str = Options.wallet_path,
|
|
10807
|
+
quiet: bool = Options.quiet,
|
|
10808
|
+
verbose: bool = Options.verbose,
|
|
10809
|
+
):
|
|
10810
|
+
"""Cancel an active referendum (requires root origin)."""
|
|
10811
|
+
self.verbosity_handler(quiet, verbose)
|
|
10812
|
+
wallet = self.wallet_ask(
|
|
10813
|
+
wallet_name,
|
|
10814
|
+
wallet_path,
|
|
10815
|
+
ask_for=[WO.NAME, WO.PATH],
|
|
10816
|
+
validate=WV.WALLET,
|
|
10817
|
+
)
|
|
10818
|
+
return self._run_command(
|
|
10819
|
+
governance.governance_cancel(
|
|
10820
|
+
subtensor=self.initialize_chain(network),
|
|
10821
|
+
wallet=wallet,
|
|
10822
|
+
ref_index=ref_index,
|
|
10823
|
+
quiet=quiet,
|
|
10824
|
+
verbose=verbose,
|
|
10825
|
+
)
|
|
10826
|
+
)
|
|
10827
|
+
|
|
10828
|
+
def governance_approve_treasury(
|
|
10829
|
+
self,
|
|
10830
|
+
proposal_id: int = typer.Option(
|
|
10831
|
+
..., "--proposal-id", help="Treasury proposal ID to approve."
|
|
10832
|
+
),
|
|
10833
|
+
network: Optional[list[str]] = Options.network,
|
|
10834
|
+
wallet_name: str = Options.wallet_name,
|
|
10835
|
+
wallet_path: str = Options.wallet_path,
|
|
10836
|
+
quiet: bool = Options.quiet,
|
|
10837
|
+
verbose: bool = Options.verbose,
|
|
10838
|
+
):
|
|
10839
|
+
"""Approve a treasury proposal (requires root origin)."""
|
|
10840
|
+
self.verbosity_handler(quiet, verbose)
|
|
10841
|
+
wallet = self.wallet_ask(
|
|
10842
|
+
wallet_name,
|
|
10843
|
+
wallet_path,
|
|
10844
|
+
ask_for=[WO.NAME, WO.PATH],
|
|
10845
|
+
validate=WV.WALLET,
|
|
10846
|
+
)
|
|
10847
|
+
return self._run_command(
|
|
10848
|
+
governance.governance_approve_treasury(
|
|
10849
|
+
subtensor=self.initialize_chain(network),
|
|
10850
|
+
wallet=wallet,
|
|
10851
|
+
proposal_id=proposal_id,
|
|
10852
|
+
quiet=quiet,
|
|
10853
|
+
verbose=verbose,
|
|
10854
|
+
)
|
|
10855
|
+
)
|
|
10856
|
+
|
|
10737
10857
|
# =========================================================================
|
|
10738
10858
|
# Treasury commands
|
|
10739
10859
|
# =========================================================================
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/governance/governance.py
RENAMED
|
@@ -1071,3 +1071,164 @@ async def governance_set_golr_config(
|
|
|
1071
1071
|
print_error(f"Failed to set GoLR config: {response.error_message}")
|
|
1072
1072
|
except Exception as e:
|
|
1073
1073
|
print_error(f"Error setting GoLR config: {e}")
|
|
1074
|
+
|
|
1075
|
+
|
|
1076
|
+
# ============================================================================
|
|
1077
|
+
# meshcli governance prune-accounts
|
|
1078
|
+
# ============================================================================
|
|
1079
|
+
|
|
1080
|
+
async def governance_prune_accounts(
|
|
1081
|
+
subtensor: "MeshtensorInterface",
|
|
1082
|
+
wallet: Wallet,
|
|
1083
|
+
accounts: list[str],
|
|
1084
|
+
quiet: bool = False,
|
|
1085
|
+
verbose: bool = False,
|
|
1086
|
+
):
|
|
1087
|
+
"""Prune governance storage for zero-balance accounts.
|
|
1088
|
+
|
|
1089
|
+
Root-only: must be submitted through a governance referendum.
|
|
1090
|
+
Removes ContributionScore, GovernanceVoteCount, StakeDepositBlock,
|
|
1091
|
+
HasVotedThisEpoch, and PendingRewards for the specified accounts
|
|
1092
|
+
(only if their free balance is zero). Max 500 per call.
|
|
1093
|
+
"""
|
|
1094
|
+
|
|
1095
|
+
if not quiet:
|
|
1096
|
+
console.print(f"\n[bold]Pruning {len(accounts)} Stale Accounts[/bold]")
|
|
1097
|
+
|
|
1098
|
+
if not confirm_action(f"Prune governance data for {len(accounts)} accounts?"):
|
|
1099
|
+
return
|
|
1100
|
+
|
|
1101
|
+
if not unlock_key(wallet):
|
|
1102
|
+
return
|
|
1103
|
+
|
|
1104
|
+
try:
|
|
1105
|
+
call = await subtensor.substrate.compose_call(
|
|
1106
|
+
call_module="MeshtensorGovernance",
|
|
1107
|
+
call_function="prune_stale_accounts",
|
|
1108
|
+
call_params={
|
|
1109
|
+
"accounts": accounts,
|
|
1110
|
+
},
|
|
1111
|
+
)
|
|
1112
|
+
|
|
1113
|
+
extrinsic = await subtensor.substrate.create_signed_extrinsic(
|
|
1114
|
+
call=call, keypair=wallet.coldkey
|
|
1115
|
+
)
|
|
1116
|
+
response = await subtensor.substrate.submit_extrinsic(
|
|
1117
|
+
extrinsic, wait_for_inclusion=True
|
|
1118
|
+
)
|
|
1119
|
+
|
|
1120
|
+
if response.is_success:
|
|
1121
|
+
print_success(f"Pruned governance data for stale accounts")
|
|
1122
|
+
print_extrinsic_id(response)
|
|
1123
|
+
else:
|
|
1124
|
+
print_error(f"Failed to prune accounts: {response.error_message}")
|
|
1125
|
+
except Exception as e:
|
|
1126
|
+
print_error(f"Error pruning accounts: {e}")
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
# ============================================================================
|
|
1130
|
+
# meshcli governance endorse
|
|
1131
|
+
# ============================================================================
|
|
1132
|
+
|
|
1133
|
+
async def governance_endorse(
|
|
1134
|
+
subtensor: "MeshtensorInterface",
|
|
1135
|
+
wallet: Wallet,
|
|
1136
|
+
ref_index: int,
|
|
1137
|
+
quiet: bool = False,
|
|
1138
|
+
verbose: bool = False,
|
|
1139
|
+
):
|
|
1140
|
+
"""Endorse a referendum as a Technical Committee member.
|
|
1141
|
+
|
|
1142
|
+
TC endorsement is required for Emergency track referenda.
|
|
1143
|
+
"""
|
|
1144
|
+
|
|
1145
|
+
if not quiet:
|
|
1146
|
+
console.print(f"\n[bold]Endorsing Referendum #{ref_index}[/bold]")
|
|
1147
|
+
|
|
1148
|
+
if not confirm_action(f"Endorse referendum #{ref_index}?"):
|
|
1149
|
+
return
|
|
1150
|
+
|
|
1151
|
+
if not unlock_key(wallet):
|
|
1152
|
+
return
|
|
1153
|
+
|
|
1154
|
+
try:
|
|
1155
|
+
from meshtensor.core.extrinsics.governance import endorse_referendum_extrinsic
|
|
1156
|
+
success = await endorse_referendum_extrinsic(
|
|
1157
|
+
subtensor, wallet, ref_index=ref_index,
|
|
1158
|
+
)
|
|
1159
|
+
if success:
|
|
1160
|
+
print_success(f"Endorsed referendum #{ref_index}")
|
|
1161
|
+
else:
|
|
1162
|
+
print_error(f"Failed to endorse referendum #{ref_index}")
|
|
1163
|
+
except Exception as e:
|
|
1164
|
+
print_error(f"Error endorsing referendum: {e}")
|
|
1165
|
+
|
|
1166
|
+
|
|
1167
|
+
# ============================================================================
|
|
1168
|
+
# meshcli governance cancel
|
|
1169
|
+
# ============================================================================
|
|
1170
|
+
|
|
1171
|
+
async def governance_cancel(
|
|
1172
|
+
subtensor: "MeshtensorInterface",
|
|
1173
|
+
wallet: Wallet,
|
|
1174
|
+
ref_index: int,
|
|
1175
|
+
quiet: bool = False,
|
|
1176
|
+
verbose: bool = False,
|
|
1177
|
+
):
|
|
1178
|
+
"""Cancel an active referendum. Requires root origin (governance vote)."""
|
|
1179
|
+
|
|
1180
|
+
if not quiet:
|
|
1181
|
+
console.print(f"\n[bold]Cancelling Referendum #{ref_index}[/bold]")
|
|
1182
|
+
|
|
1183
|
+
if not confirm_action(f"Cancel referendum #{ref_index}? This is irreversible."):
|
|
1184
|
+
return
|
|
1185
|
+
|
|
1186
|
+
if not unlock_key(wallet):
|
|
1187
|
+
return
|
|
1188
|
+
|
|
1189
|
+
try:
|
|
1190
|
+
from meshtensor.core.extrinsics.governance import cancel_referendum_extrinsic
|
|
1191
|
+
success = await cancel_referendum_extrinsic(
|
|
1192
|
+
subtensor, wallet, ref_index=ref_index,
|
|
1193
|
+
)
|
|
1194
|
+
if success:
|
|
1195
|
+
print_success(f"Cancelled referendum #{ref_index}")
|
|
1196
|
+
else:
|
|
1197
|
+
print_error(f"Failed to cancel referendum #{ref_index}")
|
|
1198
|
+
except Exception as e:
|
|
1199
|
+
print_error(f"Error cancelling referendum: {e}")
|
|
1200
|
+
|
|
1201
|
+
|
|
1202
|
+
# ============================================================================
|
|
1203
|
+
# meshcli governance approve-treasury
|
|
1204
|
+
# ============================================================================
|
|
1205
|
+
|
|
1206
|
+
async def governance_approve_treasury(
|
|
1207
|
+
subtensor: "MeshtensorInterface",
|
|
1208
|
+
wallet: Wallet,
|
|
1209
|
+
proposal_id: int,
|
|
1210
|
+
quiet: bool = False,
|
|
1211
|
+
verbose: bool = False,
|
|
1212
|
+
):
|
|
1213
|
+
"""Approve a treasury proposal. Requires root origin (governance vote)."""
|
|
1214
|
+
|
|
1215
|
+
if not quiet:
|
|
1216
|
+
console.print(f"\n[bold]Approving Treasury Proposal #{proposal_id}[/bold]")
|
|
1217
|
+
|
|
1218
|
+
if not confirm_action(f"Approve treasury proposal #{proposal_id}?"):
|
|
1219
|
+
return
|
|
1220
|
+
|
|
1221
|
+
if not unlock_key(wallet):
|
|
1222
|
+
return
|
|
1223
|
+
|
|
1224
|
+
try:
|
|
1225
|
+
from meshtensor.core.extrinsics.governance import approve_treasury_proposal_extrinsic
|
|
1226
|
+
success = await approve_treasury_proposal_extrinsic(
|
|
1227
|
+
subtensor, wallet, proposal_id=proposal_id,
|
|
1228
|
+
)
|
|
1229
|
+
if success:
|
|
1230
|
+
print_success(f"Approved treasury proposal #{proposal_id}")
|
|
1231
|
+
else:
|
|
1232
|
+
print_error(f"Failed to approve treasury proposal #{proposal_id}")
|
|
1233
|
+
except Exception as e:
|
|
1234
|
+
print_error(f"Error approving treasury proposal: {e}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/axon/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/__init__.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/contribute.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/contributors.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/crowd/dissolve.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/governance/__init__.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/liquidity/__init__.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/liquidity/liquidity.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/liquidity/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/stake/auto_staking.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/__init__.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/mechanisms.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/price.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/subnets/subnets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/treasury/__init__.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/commands/treasury/treasury.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/root.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/serving.py
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/extrinsics/transfer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/table.j2
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/view.css
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/view.j2
RENAMED
|
File without changes
|
{meshtensor_cli-9.20.0 → meshtensor_cli-9.22.0}/meshtensor_cli/src/meshtensor/templates/view.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|