Files
aitbc/scripts/examples/client_send_job.py
oib 3b4cc69179 refactor: organize scripts/, remove stale root dirs, clean up structure
scripts/ reorganization:
- Sort 14 loose root scripts into subfolders:
  blockchain/ (genesis, proposer, mock chain, testnet BTC)
  dev/ (CLI wrapper, dev services, OpenAPI gen, systemd setup, domain proxy)
  ops/ (coordinator proxy, remote tunnel)
  gpu/ (miner workflow)
- Merge scripts/testing/ into scripts/test/ (eliminate duplicate folder)
- Create scripts/examples/ for usage demos and simulations

Root-level cleanup:
- Move home/ (12 simulation scripts) → scripts/examples/
- Move dev-utils/ (2 files) → scripts/dev/
- Move protocols/receipts/sample → tests/fixtures/
- Delete stale src/ (duplicate of apps/blockchain-node/src/)
- Remove empty home/, dev-utils/, protocols/ directories

Documentation updates:
- Update docs/6_architecture/8_codebase-structure.md tree and table
- Update root README.md tree to reflect new structure
2026-02-13 23:26:53 +01:00

127 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Client sends a job to GPU provider and pays for it
"""
import subprocess
import json
import time
import sys
import os
# Add paths
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'cli'))
sys.path.append(os.path.join(os.path.dirname(__file__)))
def send_job_to_gpu_provider():
print("🚀 Client: Sending Job to GPU Provider")
print("=" * 60)
# 1. Check client wallet balance
print("\n1. Checking client wallet...")
result = subprocess.run(
'cd client && python3 wallet.py balance',
shell=True,
capture_output=True,
text=True
)
print(result.stdout)
# 2. Submit job to coordinator
print("\n2. Submitting 'hello' job to network...")
job_result = subprocess.run(
'cd ../cli && python3 client.py submit inference --prompt "hello"',
shell=True,
capture_output=True,
text=True
)
print(job_result.stdout)
# Extract job ID
job_id = None
if "Job ID:" in job_result.stdout:
for line in job_result.stdout.split('\n'):
if "Job ID:" in line:
job_id = line.split()[-1]
break
if not job_id:
print("❌ Failed to submit job")
return
print(f"\n✅ Job submitted: {job_id}")
# 3. Wait for miner to process
print("\n3. Waiting for GPU provider to process job...")
print(" (Make sure miner is running: python3 cli/miner.py mine)")
# Check job status
max_wait = 30
for i in range(max_wait):
status_result = subprocess.run(
f'cd ../cli && python3 client.py status {job_id}',
shell=True,
capture_output=True,
text=True
)
if "completed" in status_result.stdout:
print("✅ Job completed by GPU provider!")
print(status_result.stdout)
break
elif "failed" in status_result.stdout:
print("❌ Job failed")
print(status_result.stdout)
break
else:
print(f" Waiting... ({i+1}s)")
time.sleep(1)
# 4. Get cost and pay
print("\n4. Processing payment...")
# For demo, assume cost is 10 AITBC
job_cost = 10.0
# Get miner address
miner_result = subprocess.run(
'cd miner && python3 wallet.py address',
shell=True,
capture_output=True,
text=True
)
miner_address = None
if "Miner Address:" in miner_result.stdout:
for line in miner_result.stdout.split('\n'):
if "Miner Address:" in line:
miner_address = line.split()[-1]
break
if miner_address:
print(f" Paying {job_cost} AITBC to miner...")
# Send payment
pay_result = subprocess.run(
f'cd client && python3 wallet.py send {job_cost} {miner_address} "Payment for job {job_id}"',
shell=True,
capture_output=True,
text=True
)
print(pay_result.stdout)
# 5. Show final balances
print("\n5. Final balances:")
print("\n Client:")
subprocess.run('cd client && python3 wallet.py balance', shell=True)
print("\n Miner:")
subprocess.run('cd miner && python3 wallet.py balance', shell=True)
print("\n✅ Job completed and paid for!")
if __name__ == "__main__":
send_job_to_gpu_provider()