@@ -177,7 +177,7 @@ async def set_hyperparameter_extrinsic(
177
177
wait_for_inclusion: bool = False,
178
178
wait_for_finalization: bool = True,
179
179
prompt: bool = True,
180
- ) -> bool:
180
+ ) -> tuple[ bool, str] :
181
181
"""Sets a hyperparameter for a specific subnetwork.
182
182
183
183
:param subtensor: initialized SubtensorInterface object
@@ -200,13 +200,14 @@ async def set_hyperparameter_extrinsic(
200
200
params=[netuid],
201
201
)
202
202
if subnet_owner != wallet.coldkeypub.ss58_address:
203
- err_console.print (
203
+ err_msg = (
204
204
":cross_mark: [red]This wallet doesn't own the specified subnet.[/red]"
205
205
)
206
- return False
206
+ err_console.print(err_msg)
207
+ return False, err_msg
207
208
208
- if not unlock_key(wallet).success:
209
- return False
209
+ if not (ulw := unlock_key(wallet) ).success:
210
+ return False, ulw.message
210
211
211
212
arbitrary_extrinsic = False
212
213
@@ -218,15 +219,14 @@ async def set_hyperparameter_extrinsic(
218
219
)
219
220
extrinsic = parameter
220
221
if not arbitrary_extrinsic:
221
- err_console.print(
222
- ":cross_mark: [red]Invalid hyperparameter specified.[/red]"
223
- )
224
- return False
222
+ err_msg = ":cross_mark: [red]Invalid hyperparameter specified.[/red]"
223
+ err_console.print(err_msg)
224
+ return False, err_msg
225
225
if sudo_ and prompt:
226
226
if not Confirm.ask(
227
227
"This hyperparam is only settable by root sudo users. If you are not, this will fail. Please confirm"
228
228
):
229
- return False
229
+ return False, "This hyperparam is only settable by root sudo users"
230
230
231
231
substrate = subtensor.substrate
232
232
msg_value = value if not arbitrary_extrinsic else call_params
@@ -254,10 +254,11 @@ async def set_hyperparameter_extrinsic(
254
254
]
255
255
256
256
if len(value) < len(non_netuid_fields):
257
- err_console.print (
257
+ err_msg = (
258
258
"Not enough values provided in the list for all parameters"
259
259
)
260
- return False
260
+ err_console.print(err_msg)
261
+ return False, err_msg
261
262
262
263
call_params.update(
263
264
{name: val for name, val in zip(non_netuid_fields, value)}
@@ -290,20 +291,20 @@ async def set_hyperparameter_extrinsic(
290
291
)
291
292
if not success:
292
293
err_console.print(f":cross_mark: [red]Failed[/red]: {err_msg}")
293
- return False
294
+ return False, err_msg
294
295
elif arbitrary_extrinsic:
295
296
console.print(
296
297
f":white_heavy_check_mark: "
297
298
f"[dark_sea_green3]Hyperparameter {parameter} values changed to {call_params}[/dark_sea_green3]"
298
299
)
299
- return True
300
+ return True, ""
300
301
# Successful registration, final check for membership
301
302
else:
302
303
console.print(
303
304
f":white_heavy_check_mark: "
304
305
f"[dark_sea_green3]Hyperparameter {parameter} changed to {value}[/dark_sea_green3]"
305
306
)
306
- return True
307
+ return True, ""
307
308
308
309
309
310
async def _get_senate_members(
@@ -619,25 +620,26 @@ async def sudo_set_hyperparameter(
619
620
param_value: Optional[str],
620
621
prompt: bool,
621
622
json_output: bool,
622
- ):
623
+ ) -> tuple[bool, str] :
623
624
"""Set subnet hyperparameters."""
624
625
is_allowed_value, value = allowed_value(param_name, param_value)
625
626
if not is_allowed_value:
626
- err_console.print (
627
+ err_msg = (
627
628
f"Hyperparameter [dark_orange]{param_name}[/dark_orange] value is not within bounds. "
628
629
f"Value is {param_value} but must be {value}"
629
630
)
630
- return False
631
- success = await set_hyperparameter_extrinsic(
631
+ err_console.print(err_msg)
632
+ return False, err_msg
633
+ success, err_msg = await set_hyperparameter_extrinsic(
632
634
subtensor, wallet, netuid, param_name, value, prompt=prompt
633
635
)
634
636
if json_output:
635
- return success
637
+ return success, err_msg
636
638
if success:
637
639
console.print("\n")
638
640
print_verbose("Fetching hyperparameters")
639
641
await get_hyperparameters(subtensor, netuid=netuid)
640
- return success
642
+ return success, err_msg
641
643
642
644
643
645
async def get_hyperparameters(
0 commit comments