Add authentication to dispute endpoints and improve test coverage infrastructure
Some checks failed
Blockchain Synchronization Verification / sync-verification (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
Contract Performance Benchmarks / benchmark-gas-usage (push) Has been cancelled
Contract Performance Benchmarks / benchmark-execution-time (push) Has been cancelled
Contract Performance Benchmarks / benchmark-throughput (push) Has been cancelled
Coverage Phase 1 (70% Target) / test-coverage-70 (push) Has been cancelled
Coverage Phase 2 (85% Target) / test-coverage-85 (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Has been cancelled
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Has been cancelled
Deploy to Testnet / deploy-testnet (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Documentation Validation / validate-policies-strict (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Multi-Chain Island Architecture Tests / test-multi-chain-island (push) Has been cancelled
Multi-Node Blockchain Health Monitoring / health-check (push) Has been cancelled
Node Failover Simulation / failover-test (push) Has been cancelled
P2P Network Verification / p2p-verification (push) Has been cancelled
Package Tests / Python package - aitbc-agent-sdk (push) Has been cancelled
Package Tests / Python package - aitbc-core (push) Has been cancelled
Package Tests / Python package - aitbc-crypto (push) Has been cancelled
Package Tests / Python package - aitbc-sdk (push) Has been cancelled
Package Tests / JavaScript package - aitbc-sdk-js (push) Has been cancelled
Package Tests / JavaScript package - aitbc-token (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-contracts path:contracts]) (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Has been cancelled
Smart Contract Tests / test-foundry (push) Has been cancelled
Smart Contract Tests / lint-solidity (push) Has been cancelled
Smart Contract Tests / deploy-contracts (push) Has been cancelled
Staking Tests / test-staking-service (push) Has been cancelled
Contract Performance Benchmarks / compare-benchmarks (push) Has been cancelled
Cross-Chain Functionality Tests / aggregate-results (push) Has been cancelled
Staking Tests / test-staking-integration (push) Has been cancelled
Staking Tests / test-staking-contract (push) Has been cancelled
Staking Tests / run-staking-test-runner (push) Has been cancelled
Multi-Node Stress Testing / stress-test (push) Successful in 3s
Cross-Node Transaction Testing / transaction-test (push) Successful in 3s

- Add get_authenticated_address() helper to extract wallet address from X-Wallet-Address header or JWT token
- Add authentication to dispute filing, evidence submission, verification, voting, and arbitrator authorization endpoints
- Replace hardcoded zero addresses with authenticated addresses from request headers
- Add DEV_MODE fallback for development without authentication
- Add --mock flag to experimental resource
This commit is contained in:
aitbc
2026-05-22 23:13:47 +02:00
parent a6868e5836
commit 494bd962b4
12 changed files with 581 additions and 27 deletions

View File

@@ -13,7 +13,7 @@ from ..utils import error, success
@click.group()
def resource():
"""Resource management commands"""
"""Resource management commands (EXPERIMENTAL - use --mock for testing)"""
pass
@@ -21,20 +21,33 @@ def resource():
@click.option('--resource-type', required=True, help='Type of resource (gpu, cpu, storage)')
@click.option('--quantity', type=int, required=True, help='Quantity of resources')
@click.option('--priority', type=click.Choice(['low', 'medium', 'high']), default='medium', help='Allocation priority')
def allocate(resource_type: str, quantity: int, priority: str):
"""Allocate resources"""
@click.option('--mock', is_flag=True, help='Use mock data for experimental command')
def allocate(resource_type: str, quantity: int, priority: str, mock: bool):
"""Allocate resources (EXPERIMENTAL)"""
if not mock:
error("[EXPERIMENTAL] This command uses placeholder logic. Use --mock for testing.")
click.echo("To proceed with mock data, run: aitbc resource allocate --mock")
return 1
success(f"Allocate {quantity} {resource_type} with {priority} priority")
# TODO: Implement actual resource allocation via coordinator API
click.echo(f"Allocation ID: alloc_{int(time.time())}")
click.echo(f"Status: Allocated")
click.echo(f"Cost per hour: 25 AIT")
return 0
@resource.command()
@click.option('--resource-id', help='Specific resource ID')
@click.option('--format', type=click.Choice(['table', 'json']), default='table', help='Output format')
def list(resource_id: Optional[str], format: str):
"""List allocated resources"""
@click.option('--mock', is_flag=True, help='Use mock data for experimental command')
def list(resource_id: Optional[str], format: str, mock: bool):
"""List allocated resources (EXPERIMENTAL)"""
if not mock:
error("[EXPERIMENTAL] This command uses placeholder logic. Use --mock for testing.")
click.echo("To proceed with mock data, run: aitbc resource list --mock")
return 1
success("Allocated resources:")
resources = [
{"type": "gpu", "allocated": 4, "available": 8, "efficiency": "78.5%"},
@@ -47,21 +60,35 @@ def list(resource_id: Optional[str], format: str):
else:
for res in resources:
click.echo(f" - {res['type'].upper()}: {res['allocated']} allocated, {res['available']} available ({res['efficiency']})")
return 0
@resource.command()
@click.argument('resource_id')
def release(resource_id: str):
"""Release allocated resources"""
@click.option('--mock', is_flag=True, help='Use mock data for experimental command')
def release(resource_id: str, mock: bool):
"""Release allocated resources (EXPERIMENTAL)"""
if not mock:
error("[EXPERIMENTAL] This command uses placeholder logic. Use --mock for testing.")
click.echo("To proceed with mock data, run: aitbc resource release <id> --mock")
return 1
success(f"Release resource {resource_id}")
# TODO: Implement actual resource release via coordinator API
click.echo("Status: Released")
return 0
@resource.command()
@click.option('--format', type=click.Choice(['table', 'json']), default='table', help='Output format')
def utilization(format: str):
"""Get resource utilization metrics"""
@click.option('--mock', is_flag=True, help='Use mock data for experimental command')
def utilization(format: str, mock: bool):
"""Get resource utilization metrics (EXPERIMENTAL)"""
if not mock:
error("[EXPERIMENTAL] This command uses placeholder logic. Use --mock for testing.")
click.echo("To proceed with mock data, run: aitbc resource utilization --mock")
return 1
success("Resource utilization:")
metrics = {
"cpu_utilization": "45.2%",
@@ -77,13 +104,20 @@ def utilization(format: str):
else:
for key, value in metrics.items():
click.echo(f" {key}: {value}")
return 0
@resource.command()
@click.option('--target', default='all', help='Optimization target (all, cpu, gpu, memory)')
@click.option('--agent-id', help='Specific agent ID')
def optimize(target: str, agent_id: Optional[str]):
"""Optimize resource allocation"""
@click.option('--mock', is_flag=True, help='Use mock data for experimental command')
def optimize(target: str, agent_id: Optional[str], mock: bool):
"""Optimize resource allocation (EXPERIMENTAL)"""
if not mock:
error("[EXPERIMENTAL] This command uses placeholder logic. Use --mock for testing.")
click.echo("To proceed with mock data, run: aitbc resource optimize --mock")
return 1
success(f"Optimize resources for target: {target}")
if agent_id:
click.echo(f"Agent: {agent_id}")
@@ -91,3 +125,4 @@ def optimize(target: str, agent_id: Optional[str]):
click.echo("Optimization score: 85.2%")
click.echo("Improvement: 12.5%")
click.echo("Status: Optimized")
return 0

View File

@@ -5,10 +5,14 @@ Node client for multi-chain operations
import asyncio
import httpx
import json
import os
import logging
from typing import Dict, List, Optional, Any
from core.config import NodeConfig
from models.chain import ChainInfo, ChainType, ChainStatus, ConsensusAlgorithm
logger = logging.getLogger(__name__)
class NodeClient:
"""Client for communicating with AITBC nodes"""
@@ -16,6 +20,8 @@ class NodeClient:
self.config = node_config
self._client: Optional[httpx.AsyncClient] = None
self._session_id: Optional[str] = None
self._mock_fallback_count = 0
self._dev_mocks_enabled = os.getenv("DEV_MOCKS_ENABLED", "false").lower() == "true"
async def __aenter__(self):
"""Async context manager entry"""
@@ -45,7 +51,11 @@ class NodeClient:
self._session_id = data.get("session_id")
except Exception as e:
# For development, we'll continue without authentication
pass # print(f"Warning: Could not authenticate with node {self.config.id}: {e}")
if self._dev_mocks_enabled:
logger.warning(f"[DEV_MODE] Authentication failed for node {self.config.id}: {e}")
else:
logger.error(f"Authentication failed for node {self.config.id}: {e}")
raise
async def get_node_info(self) -> Dict[str, Any]:
"""Get node information"""
@@ -57,7 +67,13 @@ class NodeClient:
raise Exception(f"Node info request failed: {response.status_code}")
except Exception as e:
# Return mock data for development
return self._get_mock_node_info()
if self._dev_mocks_enabled:
self._mock_fallback_count += 1
logger.warning(f"[DEV_MODE] Using mock node info for {self.config.id} (fallback #{self._mock_fallback_count})")
return self._get_mock_node_info()
else:
logger.error(f"Failed to get node info for {self.config.id}: {e}")
raise
async def get_hosted_chains(self) -> List[ChainInfo]:
"""Get all chains hosted by this node"""