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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -11,14 +11,25 @@
"deploy": "hardhat run scripts/deploy.ts --network localhost" "deploy": "hardhat run scripts/deploy.ts --network localhost"
}, },
"devDependencies": { "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-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/chai": "^4.3.11",
"@types/mocha": "^10.0.10", "@types/mocha": "^10.0.10",
"@types/node": "^20.11.30", "@types/node": "^20.11.30",
"chai": "^4.4.1", "chai": "^4.4.1",
"ethers": "^6.16.0",
"hardhat": "^2.22.1", "hardhat": "^2.22.1",
"hardhat-gas-reporter": "^1.0.10",
"prettier": "^3.2.5", "prettier": "^3.2.5",
"solidity-coverage": "^0.8.17",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typechain": "^8.3.2",
"typescript": "^5.9.2" "typescript": "^5.9.2"
}, },
"dependencies": { "dependencies": {

View File

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

View File

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

View File

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

View File

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

View File

@@ -72,7 +72,7 @@ const _abi = [
] as const; ] as const;
const _bytecode = const _bytecode =
"0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c97bba8d553a67561101942b2a9afa3628667de55efed8df898d3aab783793c64736f6c63430008180033"; "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122004223638d8d1e86abf400699f30c266341b4680b04bb0c8679d0cbf532d1c6d664736f6c63430008190033";
type SafeCastConstructorParams = type SafeCastConstructorParams =
| [signer?: Signer] | [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", name: "ECDSA",
signerOrOptions?: ethers.Signer | FactoryOptions signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.ECDSA__factory>; ): Promise<Contracts.ECDSA__factory>;
getContractFactory(
name: "MessageHashUtils",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.MessageHashUtils__factory>;
getContractFactory( getContractFactory(
name: "ERC165", name: "ERC165",
signerOrOptions?: ethers.Signer | FactoryOptions signerOrOptions?: ethers.Signer | FactoryOptions
@@ -119,6 +123,11 @@ declare module "hardhat/types/runtime" {
address: string | ethers.Addressable, address: string | ethers.Addressable,
signer?: ethers.Signer signer?: ethers.Signer
): Promise<Contracts.ECDSA>; ): Promise<Contracts.ECDSA>;
getContractAt(
name: "MessageHashUtils",
address: string | ethers.Addressable,
signer?: ethers.Signer
): Promise<Contracts.MessageHashUtils>;
getContractAt( getContractAt(
name: "ERC165", name: "ERC165",
address: string | ethers.Addressable, address: string | ethers.Addressable,
@@ -186,6 +195,10 @@ declare module "hardhat/types/runtime" {
name: "ECDSA", name: "ECDSA",
signerOrOptions?: ethers.Signer | DeployContractOptions signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.ECDSA>; ): Promise<Contracts.ECDSA>;
deployContract(
name: "MessageHashUtils",
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.MessageHashUtils>;
deployContract( deployContract(
name: "ERC165", name: "ERC165",
signerOrOptions?: ethers.Signer | DeployContractOptions signerOrOptions?: ethers.Signer | DeployContractOptions
@@ -256,6 +269,11 @@ declare module "hardhat/types/runtime" {
args: any[], args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.ECDSA>; ): Promise<Contracts.ECDSA>;
deployContract(
name: "MessageHashUtils",
args: any[],
signerOrOptions?: ethers.Signer | DeployContractOptions
): Promise<Contracts.MessageHashUtils>;
deployContract( deployContract(
name: "ERC165", name: "ERC165",
args: any[], 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 { IERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/IERC20__factory";
export type { ECDSA } from "./@openzeppelin/contracts/utils/cryptography/ECDSA"; export type { ECDSA } from "./@openzeppelin/contracts/utils/cryptography/ECDSA";
export { ECDSA__factory } from "./factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory"; 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 type { ERC165 } from "./@openzeppelin/contracts/utils/introspection/ERC165";
export { ERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/ERC165__factory"; export { ERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/ERC165__factory";
export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC165"; export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC165";

View File

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