fix: resolve remaining CI issues — services, hardhat, Rust, mypy
All checks were successful
API Endpoint Tests / test-api-endpoints (push) Successful in 38s
Integration Tests / test-service-integration (push) Successful in 43s
Package Tests / test-python-packages (map[name:aitbc-core path:packages/py/aitbc-core]) (push) Successful in 21s
Package Tests / test-python-packages (map[name:aitbc-agent-sdk path:packages/py/aitbc-agent-sdk]) (push) Successful in 36s
Package Tests / test-python-packages (map[name:aitbc-crypto path:packages/py/aitbc-crypto]) (push) Successful in 19s
Package Tests / test-python-packages (map[name:aitbc-sdk path:packages/py/aitbc-sdk]) (push) Successful in 20s
Package Tests / test-javascript-packages (map[name:aitbc-sdk-js path:packages/js/aitbc-sdk]) (push) Successful in 16s
Python Tests / test-python (push) Successful in 1m4s
Package Tests / test-javascript-packages (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 1m13s
Rust ZK Components Tests / test-rust-zk (push) Successful in 44s
Security Scanning / security-scan (push) Successful in 42s
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 39s
Smart Contract Tests / test-solidity (map[name:zk-circuits path:apps/zk-circuits]) (push) Successful in 44s
Smart Contract Tests / lint-solidity (push) Successful in 48s

Service health checks:
- Exchange API uses /api/health not /health — updated test script
  and workflow wait loops to check /api/health as fallback
- Increased wait time to 2s intervals, 15 retries for service readiness
- Performance tests now hit /health endpoints (not root /)

Hardhat compilation:
- aitbc-token was missing peer deps for @nomicfoundation/hardhat-toolbox
- Installed all 11 required peer packages (ethers, typechain, etc.)
- Contracts now compile (19 Solidity files) and all 17 tests pass

Rust workflow:
- Fixed HOME mismatch: gitea-runner HOME=/opt/gitea-runner vs
  euid root HOME=/root — explicitly set HOME=/root in all steps
- Set RUSTUP_HOME and CARGO_HOME for consistent toolchain location

Mypy type annotations (aitbc-agent-sdk):
- agent.py: narrow key types to RSA (isinstance check before sign/verify),
  fix supported_models Optional type, add __post_init__ return type
- compute_provider.py: add return types to all methods, declare
  pricing_model/dynamic_pricing attrs, rename register→create_provider
  to avoid signature conflict with parent, fix Optional safety
- swarm_coordinator.py: add return types to all 8 untyped methods
This commit is contained in:
aitbc1
2026-03-29 13:03:18 +02:00
parent 1f932d42e3
commit af34f6ae81
18 changed files with 317 additions and 221 deletions

View File

@@ -41,14 +41,15 @@ jobs:
run: |
echo "Waiting for AITBC services..."
for port in 8000 8001 8003 8006; do
for i in $(seq 1 10); do
if curl -sf "http://localhost:$port/" >/dev/null 2>&1 || \
curl -sf "http://localhost:$port/health" >/dev/null 2>&1; then
for i in $(seq 1 15); do
if curl -sf "http://localhost:$port/health" >/dev/null 2>&1 || \
curl -sf "http://localhost:$port/api/health" >/dev/null 2>&1 || \
curl -sf "http://localhost:$port/" >/dev/null 2>&1; then
echo "✅ Port $port ready"
break
fi
[ "$i" -eq 10 ] && echo "⚠️ Port $port not ready"
sleep 1
[ "$i" -eq 15 ] && echo "⚠️ Port $port not ready"
sleep 2
done
done

View File

@@ -56,12 +56,13 @@ jobs:
for port in 8000 8001 8003 8006; do
for i in $(seq 1 15); do
if curl -sf "http://localhost:$port/health" >/dev/null 2>&1 || \
curl -sf "http://localhost:$port/api/health" >/dev/null 2>&1 || \
curl -sf "http://localhost:$port/" >/dev/null 2>&1; then
echo "✅ Port $port ready"
break
fi
[ "$i" -eq 15 ] && echo "⚠️ Port $port not ready"
sleep 1
sleep 2
done
done

View File

@@ -30,29 +30,41 @@ jobs:
- name: Verify Rust toolchain
run: |
# Fix HOME mismatch (gitea-runner HOME vs euid root)
export HOME=/root
export RUSTUP_HOME="$HOME/.rustup"
export CARGO_HOME="$HOME/.cargo"
export PATH="$CARGO_HOME/bin:$PATH"
if ! command -v rustc >/dev/null 2>&1; then
echo "Installing Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
fi
source "$CARGO_HOME/env" 2>/dev/null || true
rustc --version
cargo --version
rustup component add rustfmt clippy 2>/dev/null || true
- name: Check formatting
run: |
export HOME=/root
export PATH="$HOME/.cargo/bin:$PATH"
source "$HOME/.cargo/env" 2>/dev/null || true
cd /var/lib/aitbc-workspaces/rust-zk-tests/repo/gpu_acceleration/research/gpu_zk_research
cargo fmt -- --check 2>/dev/null && echo "✅ Formatting OK" || echo "⚠️ Format warnings"
- name: Run Clippy
run: |
export HOME=/root
export PATH="$HOME/.cargo/bin:$PATH"
source "$HOME/.cargo/env" 2>/dev/null || true
cd /var/lib/aitbc-workspaces/rust-zk-tests/repo/gpu_acceleration/research/gpu_zk_research
cargo clippy -- -D warnings 2>/dev/null && echo "✅ Clippy OK" || echo "⚠️ Clippy warnings"
- name: Build
run: |
export HOME=/root
export PATH="$HOME/.cargo/bin:$PATH"
source "$HOME/.cargo/env" 2>/dev/null || true
cd /var/lib/aitbc-workspaces/rust-zk-tests/repo/gpu_acceleration/research/gpu_zk_research
cargo build --release
@@ -60,6 +72,8 @@ jobs:
- name: Run tests
run: |
export HOME=/root
export PATH="$HOME/.cargo/bin:$PATH"
source "$HOME/.cargo/env" 2>/dev/null || true
cd /var/lib/aitbc-workspaces/rust-zk-tests/repo/gpu_acceleration/research/gpu_zk_research
cargo test && echo "✅ Tests passed" || echo "⚠️ Tests completed with issues"

View File

@@ -21,12 +21,12 @@ class AgentCapabilities:
"""Agent capability specification"""
compute_type: str # "inference", "training", "processing"
gpu_memory: Optional[int] = None
supported_models: List[str] = None
supported_models: Optional[List[str]] = None
performance_score: float = 0.0
max_concurrent_jobs: int = 1
specialization: Optional[str] = None
def __post_init__(self):
def __post_init__(self) -> None:
if self.supported_models is None:
self.supported_models = []
@@ -47,6 +47,9 @@ class AgentIdentity:
password=None
)
if not isinstance(private_key, rsa.RSAPrivateKey):
raise TypeError("Only RSA private keys are supported")
signature = private_key.sign(
message_str.encode(),
padding.PSS(
@@ -65,6 +68,9 @@ class AgentIdentity:
self.public_key.encode()
)
if not isinstance(public_key, rsa.RSAPublicKey):
raise TypeError("Only RSA public keys are supported")
try:
public_key.verify(
bytes.fromhex(signature),

View File

@@ -37,16 +37,18 @@ class JobExecution:
class ComputeProvider(Agent):
"""Agent that provides computational resources"""
def __init__(self, *args, **kwargs):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
self.current_offers: List[ResourceOffer] = []
self.active_jobs: List[JobExecution] = []
self.earnings = 0.0
self.utilization_rate = 0.0
self.earnings: float = 0.0
self.utilization_rate: float = 0.0
self.pricing_model: Dict[str, Any] = {}
self.dynamic_pricing: Dict[str, Any] = {}
@classmethod
def register(cls, name: str, capabilities: Dict[str, Any], pricing_model: Dict[str, Any]) -> 'ComputeProvider':
"""Register as a compute provider"""
def create_provider(cls, name: str, capabilities: Dict[str, Any], pricing_model: Dict[str, Any]) -> 'ComputeProvider':
"""Create and register a compute provider"""
agent = super().create(name, "compute_provider", capabilities)
provider = cls(agent.identity, agent.capabilities)
provider.pricing_model = pricing_model
@@ -112,7 +114,7 @@ class ComputeProvider(Agent):
logger.error(f"Failed to enable dynamic pricing: {e}")
return False
async def _dynamic_pricing_loop(self):
async def _dynamic_pricing_loop(self) -> None:
"""Background task for dynamic price adjustments"""
while getattr(self, 'dynamic_pricing', {}).get('enabled', False):
try:
@@ -173,7 +175,7 @@ class ComputeProvider(Agent):
logger.error(f"Failed to accept job: {e}")
return False
async def _execute_job(self, job: JobExecution, job_request: Dict[str, Any]):
async def _execute_job(self, job: JobExecution, job_request: Dict[str, Any]) -> None:
"""Execute a computational job"""
try:
# Simulate job execution
@@ -202,7 +204,7 @@ class ComputeProvider(Agent):
job.status = "failed"
logger.error(f"Job execution failed: {job.job_id} - {e}")
async def _notify_job_completion(self, job: JobExecution, earnings: float):
async def _notify_job_completion(self, job: JobExecution, earnings: float) -> None:
"""Notify consumer about job completion"""
notification = {
"job_id": job.job_id,
@@ -215,7 +217,7 @@ class ComputeProvider(Agent):
await self.send_message(job.consumer_id, "job_completion", notification)
def _update_utilization(self):
def _update_utilization(self) -> None:
"""Update current utilization rate"""
self.utilization_rate = len(self.active_jobs) / self.capabilities.max_concurrent_jobs
@@ -227,8 +229,8 @@ class ComputeProvider(Agent):
"utilization_rate": self.utilization_rate,
"active_jobs": len(self.active_jobs),
"total_earnings": self.earnings,
"average_job_duration": sum(j.actual_duration.total_seconds() for j in completed_jobs) / len(completed_jobs) if completed_jobs else 0,
"quality_score": sum(j.quality_score for j in completed_jobs if j.quality_score) / len(completed_jobs) if completed_jobs else 0,
"average_job_duration": sum(j.actual_duration.total_seconds() for j in completed_jobs if j.actual_duration) / len(completed_jobs) if completed_jobs else 0,
"quality_score": sum(j.quality_score for j in completed_jobs if j.quality_score is not None) / len(completed_jobs) if completed_jobs else 0,
"current_offers": len(self.current_offers)
}

View File

@@ -5,7 +5,7 @@ Swarm Coordinator - for agents participating in collective intelligence
import asyncio
import json
import logging
from typing import Dict, List, Optional, Any
from typing import Dict, List, Optional, Any # noqa: F401
from datetime import datetime
from dataclasses import dataclass
from .agent import Agent
@@ -37,7 +37,7 @@ class SwarmDecision:
class SwarmCoordinator(Agent):
"""Agent that participates in swarm intelligence"""
def __init__(self, *args, **kwargs):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
self.joined_swarms: Dict[str, Dict[str, Any]] = {}
self.swarm_reputation: Dict[str, float] = {}
@@ -91,7 +91,7 @@ class SwarmCoordinator(Agent):
logger.error(f"Failed to join swarm {swarm_type}: {e}")
return False
async def _swarm_participation_loop(self, swarm_id: str):
async def _swarm_participation_loop(self, swarm_id: str) -> None:
"""Background task for active swarm participation"""
while swarm_id in self.joined_swarms:
try:
@@ -145,7 +145,7 @@ class SwarmCoordinator(Agent):
logger.error(f"Failed to broadcast to swarm: {e}")
return False
async def _contribute_swarm_data(self, swarm_id: str):
async def _contribute_swarm_data(self, swarm_id: str) -> None:
"""Contribute data to swarm intelligence"""
try:
swarm_type = self.joined_swarms[swarm_id]["type"]
@@ -308,22 +308,22 @@ class SwarmCoordinator(Agent):
logger.error(f"Failed to analyze swarm benefits: {e}")
return {"error": str(e)}
async def _register_with_swarm(self, swarm_id: str, registration: Dict[str, Any]):
async def _register_with_swarm(self, swarm_id: str, registration: Dict[str, Any]) -> None:
"""Register with swarm coordinator (placeholder)"""
# TODO: Implement actual swarm registration
await asyncio.sleep(0.1)
async def _broadcast_to_swarm_network(self, message: SwarmMessage):
async def _broadcast_to_swarm_network(self, message: SwarmMessage) -> None:
"""Broadcast message to swarm network (placeholder)"""
# TODO: Implement actual swarm broadcasting
await asyncio.sleep(0.1)
async def _process_swarm_messages(self, swarm_id: str):
async def _process_swarm_messages(self, swarm_id: str) -> None:
"""Process incoming swarm messages (placeholder)"""
# TODO: Implement actual message processing
await asyncio.sleep(0.1)
async def _participate_in_decisions(self, swarm_id: str):
async def _participate_in_decisions(self, swarm_id: str) -> None:
"""Participate in swarm decision making (placeholder)"""
# TODO: Implement actual decision participation
await asyncio.sleep(0.1)

View File

@@ -1,18 +1,18 @@
{
"_format": "hh-sol-cache-2",
"files": {
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/contracts/AIToken.sol": {
"lastModificationDate": 1758948750896,
"/opt/aitbc/packages/solidity/aitbc-token/contracts/AIToken.sol": {
"lastModificationDate": 1774686815247,
"contentHash": "9da3e499c2dda7c4cfdc56c633b86873",
"sourceName": "contracts/AIToken.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -42,18 +42,18 @@
"AIToken"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
"lastModificationDate": 1758948616475,
"contentHash": "d0e2c05f09a3aea7cd299bbd4a435ee2",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
"lastModificationDate": 1774782027955,
"contentHash": "798a29e3c30dbd3eda1a67add26571e2",
"sourceName": "@openzeppelin/contracts/access/AccessControl.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -82,18 +82,54 @@
"AccessControl"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
"lastModificationDate": 1758948616511,
"contentHash": "59dfce11284f2636db261df9b6a18f81",
"sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
"lastModificationDate": 1774782027963,
"contentHash": "b038f3665d2262af34fe6009e3cd78dd",
"sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [],
"versionPragmas": [
"^0.8.20"
],
"artifacts": [
"ECDSA"
]
},
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
"lastModificationDate": 1774782027967,
"contentHash": "d15c4d05583536e080f1960ab282772d",
"sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
"solcConfig": {
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -123,54 +159,18 @@
"ERC20"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
"lastModificationDate": 1758948616491,
"contentHash": "81de029d56aa803972be03c5d277cb6c",
"sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
"solcConfig": {
"version": "0.8.24",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [],
"versionPragmas": [
"^0.8.20"
],
"artifacts": [
"ECDSA"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": {
"lastModificationDate": 1758948616595,
"contentHash": "260f3968eefa3bbd30520cff5384cd93",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": {
"lastModificationDate": 1774782027987,
"contentHash": "fab97298382d4c32182a66ec35255b71",
"sourceName": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -191,60 +191,24 @@
"../Strings.sol"
],
"versionPragmas": [
"^0.8.20"
"^0.8.24"
],
"artifacts": [
"MessageHashUtils"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
"lastModificationDate": 1758948616567,
"contentHash": "def1e8f7b6cac577cf2600655bf3bdf8",
"sourceName": "@openzeppelin/contracts/access/IAccessControl.sol",
"solcConfig": {
"version": "0.8.24",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [],
"versionPragmas": [
">=0.8.4"
],
"artifacts": [
"IAccessControl"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Context.sol": {
"lastModificationDate": 1758948616483,
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Context.sol": {
"lastModificationDate": 1774782027959,
"contentHash": "67bfbc07588eb8683b3fd8f6f909563e",
"sourceName": "@openzeppelin/contracts/utils/Context.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -269,18 +233,18 @@
"Context"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
"lastModificationDate": 1758948616511,
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
"lastModificationDate": 1774782027967,
"contentHash": "0906d06dca25210d4696dcef6dad2909",
"sourceName": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -307,18 +271,54 @@
"ERC165"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"lastModificationDate": 1758948616575,
"contentHash": "7074c93b1ea0a122063f26ddd1db1032",
"sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
"lastModificationDate": 1774782027979,
"contentHash": "def1e8f7b6cac577cf2600655bf3bdf8",
"sourceName": "@openzeppelin/contracts/access/IAccessControl.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [],
"versionPragmas": [
">=0.8.4"
],
"artifacts": [
"IAccessControl"
]
},
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"lastModificationDate": 1774782027983,
"contentHash": "7074c93b1ea0a122063f26ddd1db1032",
"sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
"solcConfig": {
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -343,18 +343,18 @@
"IERC165"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
"lastModificationDate": 1758948616491,
"contentHash": "5041977bbe908de2e6ed0270447f79ad",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
"lastModificationDate": 1774782027963,
"contentHash": "bcc76f4747d56c28c40ae272ef3470a6",
"sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -381,18 +381,18 @@
"IERC721Errors"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"lastModificationDate": 1758948616579,
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"lastModificationDate": 1774782027983,
"contentHash": "9261adf6457863de3e9892f51317ec89",
"sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -417,18 +417,18 @@
"IERC20"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
"lastModificationDate": 1758948616579,
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
"lastModificationDate": 1774782027983,
"contentHash": "513778b30d2750f5d2b9b19bbcf748a5",
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -455,18 +455,18 @@
"IERC20Metadata"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Strings.sol": {
"lastModificationDate": 1758948616623,
"contentHash": "d8f70caf0e0c77dc908176ed44812fb7",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Strings.sol": {
"lastModificationDate": 1774782027999,
"contentHash": "d2fa243e766a193585b7e9bf36898d80",
"sourceName": "@openzeppelin/contracts/utils/Strings.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -486,27 +486,104 @@
"imports": [
"./math/Math.sol",
"./math/SafeCast.sol",
"./math/SignedMath.sol"
"./math/SignedMath.sol",
"./Bytes.sol"
],
"versionPragmas": [
"^0.8.20"
"^0.8.24"
],
"artifacts": [
"Strings"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
"lastModificationDate": 1758948616595,
"contentHash": "5ec781e33d3a9ac91ffdc83d94420412",
"sourceName": "@openzeppelin/contracts/utils/math/Math.sol",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Bytes.sol": {
"lastModificationDate": 1774782027959,
"contentHash": "3b32ea3a40a2d708f61e7161f081ca93",
"sourceName": "@openzeppelin/contracts/utils/Bytes.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [
"./math/Math.sol"
],
"versionPragmas": [
"^0.8.24"
],
"artifacts": [
"Bytes"
]
},
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": {
"lastModificationDate": 1774782027995,
"contentHash": "ae3528afb8bdb0a7dcfba5b115ee8074",
"sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol",
"solcConfig": {
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [
"./SafeCast.sol"
],
"versionPragmas": [
"^0.8.20"
],
"artifacts": [
"SignedMath"
]
},
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
"lastModificationDate": 1774782027987,
"contentHash": "5b8c6935ac52b7494df19d6feb38f5cc",
"sourceName": "@openzeppelin/contracts/utils/math/Math.sol",
"solcConfig": {
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -534,56 +611,18 @@
"Math"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": {
"lastModificationDate": 1758948616619,
"contentHash": "ae3528afb8bdb0a7dcfba5b115ee8074",
"sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol",
"solcConfig": {
"version": "0.8.24",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [
"./SafeCast.sol"
],
"versionPragmas": [
"^0.8.20"
],
"artifacts": [
"SignedMath"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
"lastModificationDate": 1758948616611,
"contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca",
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
"lastModificationDate": 1774782027995,
"contentHash": "f28a38cd37f4225d0a91fb5405dd850f",
"sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -608,18 +647,18 @@
"SafeCast"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Panic.sol": {
"lastModificationDate": 1758948616603,
"/opt/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Panic.sol": {
"lastModificationDate": 1774782027991,
"contentHash": "2133dc13536b4a6a98131e431fac59e1",
"sourceName": "@openzeppelin/contracts/utils/Panic.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
@@ -644,18 +683,18 @@
"Panic"
]
},
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/contracts/AITokenRegistry.sol": {
"lastModificationDate": 1758946778726,
"/opt/aitbc/packages/solidity/aitbc-token/contracts/AITokenRegistry.sol": {
"lastModificationDate": 1774686815247,
"contentHash": "5e787829fa19b0a69c958e431fea5757",
"sourceName": "contracts/AITokenRegistry.sol",
"solcConfig": {
"version": "0.8.24",
"version": "0.8.25",
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [

View File

@@ -11,14 +11,25 @@
"deploy": "hardhat run scripts/deploy.ts --network localhost"
},
"devDependencies": {
"@nomicfoundation/hardhat-chai-matchers": "^2.1.2",
"@nomicfoundation/hardhat-ethers": "^3.1.3",
"@nomicfoundation/hardhat-ignition-ethers": "^0.15.17",
"@nomicfoundation/hardhat-network-helpers": "^1.1.2",
"@nomicfoundation/hardhat-toolbox": "^5.0.0",
"@nomicfoundation/hardhat-verify": "^2.1.3",
"@typechain/ethers-v6": "^0.5.1",
"@typechain/hardhat": "^9.1.0",
"@types/chai": "^4.3.11",
"@types/mocha": "^10.0.10",
"@types/node": "^20.11.30",
"chai": "^4.4.1",
"ethers": "^6.16.0",
"hardhat": "^2.22.1",
"hardhat-gas-reporter": "^1.0.10",
"prettier": "^3.2.5",
"solidity-coverage": "^0.8.17",
"ts-node": "^10.9.2",
"typechain": "^8.3.2",
"typescript": "^5.9.2"
},
"dependencies": {

View File

@@ -2,3 +2,4 @@
/* tslint:disable */
/* eslint-disable */
export type { ECDSA } from "./ECDSA";
export type { MessageHashUtils } from "./MessageHashUtils";

View File

@@ -44,7 +44,7 @@ const _abi = [
] as const;
const _bytecode =
"0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3fa6b95cf4f76e64227a9b2373ccb228efd9715fd7983e0646867999cceb9fb64736f6c63430008180033";
"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212201a6180167efb6562d882d394cd3a11d9f504b5200f4d3561a6332af0022ccaeb64736f6c63430008190033";
type StringsConstructorParams =
| [signer?: Signer]

View File

@@ -45,7 +45,7 @@ const _abi = [
] as const;
const _bytecode =
"0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a02ae933cd95f2ee943a9a3e5cbf4c6b7a6f7cc463d2cb58fac8fce23a0ba09464736f6c63430008180033";
"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122026f40e2f9829b7940304d9f14a6e9e5677a59dd8116e9080cf27c2c2bc85ef5b64736f6c63430008190033";
type ECDSAConstructorParams =
| [signer?: Signer]

View File

@@ -2,3 +2,4 @@
/* tslint:disable */
/* eslint-disable */
export { ECDSA__factory } from "./ECDSA__factory";
export { MessageHashUtils__factory } from "./MessageHashUtils__factory";

View File

@@ -72,7 +72,7 @@ const _abi = [
] as const;
const _bytecode =
"0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c97bba8d553a67561101942b2a9afa3628667de55efed8df898d3aab783793c64736f6c63430008180033";
"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122004223638d8d1e86abf400699f30c266341b4680b04bb0c8679d0cbf532d1c6d664736f6c63430008190033";
type SafeCastConstructorParams =
| [signer?: Signer]

File diff suppressed because one or more lines are too long

View File

@@ -49,6 +49,10 @@ declare module "hardhat/types/runtime" {
name: "ECDSA",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.ECDSA__factory>;
getContractFactory(
name: "MessageHashUtils",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.MessageHashUtils__factory>;
getContractFactory(
name: "ERC165",
signerOrOptions?: ethers.Signer | FactoryOptions
@@ -119,6 +123,11 @@ declare module "hardhat/types/runtime" {
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.ECDSA>;
getContractAt(
name: "MessageHashUtils",
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.MessageHashUtils>;
getContractAt(
name: "ERC165",
address: string | ethers.Addressable,
@@ -186,6 +195,10 @@ declare module "hardhat/types/runtime" {
name: "ECDSA",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.ECDSA>;
deployContract(
name: "MessageHashUtils",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.MessageHashUtils>;
deployContract(
name: "ERC165",
signerOrOptions?: ethers.Signer | DeployContractOptions
@@ -256,6 +269,11 @@ declare module "hardhat/types/runtime" {
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.ECDSA>;
deployContract(
name: "MessageHashUtils",
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.MessageHashUtils>;
deployContract(
name: "ERC165",
args: any[],

View File

@@ -24,6 +24,8 @@ export type { IERC20 } from "./@openzeppelin/contracts/token/ERC20/IERC20";
export { IERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/IERC20__factory";
export type { ECDSA } from "./@openzeppelin/contracts/utils/cryptography/ECDSA";
export { ECDSA__factory } from "./factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory";
export type { MessageHashUtils } from "./@openzeppelin/contracts/utils/cryptography/MessageHashUtils";
export { MessageHashUtils__factory } from "./factories/@openzeppelin/contracts/utils/cryptography/MessageHashUtils__factory";
export type { ERC165 } from "./@openzeppelin/contracts/utils/introspection/ERC165";
export { ERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/ERC165__factory";
export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC165";

View File

@@ -10,7 +10,7 @@ import sys
# Service ports (must match systemd config)
SERVICES = {
"coordinator": {"url": "http://localhost:8000", "endpoints": ["/", "/health", "/info"]},
"exchange": {"url": "http://localhost:8001", "endpoints": ["/", "/health", "/info"]},
"exchange": {"url": "http://localhost:8001", "endpoints": ["/", "/api/health", "/health", "/info"]},
"wallet": {"url": "http://localhost:8003", "endpoints": ["/", "/health", "/wallets"]},
"blockchain_rpc": {"url": "http://localhost:8006", "endpoints": []},
}
@@ -105,9 +105,9 @@ def main():
print("\n⚡ Performance tests...")
perf = test_performance([
("Coordinator", "http://localhost:8000/"),
("Exchange", "http://localhost:8001/"),
("Wallet", "http://localhost:8003/"),
("Coordinator", "http://localhost:8000/health"),
("Exchange", "http://localhost:8001/api/health"),
("Wallet", "http://localhost:8003/health"),
])
all_results["performance"] = perf