Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 7 additions & 32 deletions gittensor/cli/issue_commands/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,12 @@
from .help import StyledGroup
from .helpers import (
_make_contract_client,
_resolve_contract_and_network,
console,
format_alpha,
get_contract_address,
print_error,
print_network_header,
print_success,
resolve_network,
validate_issue_id,
validate_ss58_address,
with_network_contract_options,
Expand Down Expand Up @@ -60,11 +59,7 @@ def admin_cancel(issue_id: int, network: str, rpc_url: str, contract: str, walle
$ gitt a cancel-issue 5 --network test
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_issue_id(issue_id)
Expand Down Expand Up @@ -124,11 +119,7 @@ def admin_payout(issue_id: int, network: str, rpc_url: str, contract: str, walle
$ gitt a payout-issue 3 --network test
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_issue_id(issue_id)
Expand Down Expand Up @@ -184,11 +175,7 @@ def admin_set_owner(new_owner: str, network: str, rpc_url: str, contract: str, w
$ gitt admin set-owner 5Hxxx...
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_ss58_address(new_owner, 'new_owner')
Expand Down Expand Up @@ -240,11 +227,7 @@ def admin_set_treasury(
$ gitt admin set-treasury 5Hxxx...
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_ss58_address(new_treasury, 'new_treasury')
Expand Down Expand Up @@ -297,11 +280,7 @@ def admin_add_validator(hotkey: str, network: str, rpc_url: str, contract: str,
$ gitt admin add-vali 5Hxxx...
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_ss58_address(hotkey, 'hotkey')
Expand Down Expand Up @@ -355,11 +334,7 @@ def admin_remove_validator(
$ gitt admin remove-vali 5Hxxx...
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_ss58_address(hotkey, 'hotkey')
Expand Down
21 changes: 21 additions & 0 deletions gittensor/cli/issue_commands/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,27 @@ def resolve_network(network: Optional[str] = None, rpc_url: Optional[str] = None
return NETWORK_MAP['finney'], 'finney'


def _resolve_contract_and_network(
contract: str,
network: Optional[str] = None,
rpc_url: Optional[str] = None,
*,
missing_contract_message: str = 'Contract address not configured.',
) -> Tuple[str, str, str]:
"""Resolve contract address, WS endpoint, and network name from CLI options.

Combines get_contract_address and resolve_network into one call, raising
click.ClickException when the contract address is empty.

Returns (contract_addr, ws_endpoint, network_name).
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)
if not contract_addr:
raise click.ClickException(missing_contract_message)
return contract_addr, ws_endpoint, network_name


# ============================================================================
# Contract storage reading helpers (shared by view and admin commands)
# ============================================================================
Expand Down
29 changes: 13 additions & 16 deletions gittensor/cli/issue_commands/mutations.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@
from .helpers import (
MAX_ISSUE_NUMBER,
_is_interactive,
_resolve_contract_and_network,
console,
format_alpha,
get_contract_address,
load_config,
print_error,
print_network_header,
print_success,
resolve_network,
validate_bounty_amount,
validate_github_issue,
validate_repository,
Expand Down Expand Up @@ -119,15 +118,14 @@ def issue_register(
"""
console.print('\n[bold cyan]Register Issue for Bounty[/bold cyan]\n')

contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(
contract,
network,
rpc_url,
missing_contract_message='Contract address not configured. Run ./up.sh --issues to deploy the contract first.',
)
config = load_config()

if not contract_addr:
raise click.ClickException(
'Contract address not configured. Run ./up.sh --issues to deploy the contract first.'
)

# Validate inputs before showing summary
try:
owner, repo_name = validate_repository(repo)
Expand Down Expand Up @@ -304,13 +302,12 @@ def issue_harvest(wallet_name: str, wallet_hotkey: str, network: str, rpc_url: s
"""
console.print('\n[bold cyan]Manual Emission Harvest[/bold cyan]\n')

contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException(
'Contract address not configured. Set CONTRACT_ADDRESS env var or run ./up.sh --issues.'
)
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(
contract,
network,
rpc_url,
missing_contract_message='Contract address not configured. Set CONTRACT_ADDRESS env var or run ./up.sh --issues.',
)

print_network_header(network_name, contract_addr)
console.print(f'[dim]Wallet: {wallet_name}/{wallet_hotkey}[/dim]\n')
Expand Down
32 changes: 10 additions & 22 deletions gittensor/cli/issue_commands/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,14 @@
from .helpers import (
_read_contract_packed_storage,
_read_issues_from_child_storage,
_resolve_contract_and_network,
colorize_status,
console,
emit_error_json,
format_alpha,
get_contract_address,
print_error,
print_network_header,
read_issues_from_contract,
resolve_network,
with_cli_behavior_options,
with_network_contract_options,
)
Expand Down Expand Up @@ -60,11 +59,12 @@ def issues_list(issue_id: int, network: str, rpc_url: str, contract: str, verbos
$ gitt i list --json
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured. Set via: gitt config set contract_address <ADDR>.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(
contract,
network,
rpc_url,
missing_contract_message='Contract address not configured. Set via: gitt config set contract_address <ADDR>.',
)

if not as_json:
print_network_header(network_name, contract_addr)
Expand Down Expand Up @@ -188,11 +188,7 @@ def issues_bounty_pool(network: str, rpc_url: str, contract: str, verbose: bool,
$ gitt i bounty-pool --json
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

if not as_json:
print_network_header(network_name, contract_addr)
Expand Down Expand Up @@ -238,11 +234,7 @@ def issues_pending_harvest(network: str, rpc_url: str, contract: str, verbose: b
$ gitt i pending-harvest --json
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

if not as_json:
print_network_header(network_name, contract_addr)
Expand Down Expand Up @@ -305,11 +297,7 @@ def admin_info(network: str, rpc_url: str, contract: str, verbose: bool, as_json
$ gitt a info --json
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

if not as_json:
print_network_header(network_name, contract_addr)
Expand Down
21 changes: 4 additions & 17 deletions gittensor/cli/issue_commands/vote.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@
from .help import StyledGroup
from .helpers import (
_make_contract_client,
_resolve_contract_and_network,
console,
get_contract_address,
print_error,
print_network_header,
print_success,
resolve_network,
validate_issue_id,
validate_ss58_address,
with_cli_behavior_options,
Expand Down Expand Up @@ -102,11 +101,7 @@ def val_vote_solution(
$ gitt vote solution 1 5Hxxx... 5Hyyy... https://github.com/.../pull/123
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_issue_id(issue_id)
Expand Down Expand Up @@ -177,11 +172,7 @@ def val_vote_cancel_issue(
$ gitt vote cancel 42 "Issue invalid"
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

try:
validate_issue_id(issue_id)
Expand Down Expand Up @@ -225,11 +216,7 @@ def vote_list_validators(network: str, rpc_url: str, contract: str, as_json: boo
$ gitt vote list --json
[/dim]
"""
contract_addr = get_contract_address(contract)
ws_endpoint, network_name = resolve_network(network, rpc_url)

if not contract_addr:
raise click.ClickException('Contract address not configured.')
contract_addr, ws_endpoint, network_name = _resolve_contract_and_network(contract, network, rpc_url)

if not as_json:
print_network_header(network_name, contract_addr)
Expand Down
Loading
Loading