76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Script to assign a proposer to a block by polling for it
|
||
"""
|
||
|
||
import httpx
|
||
import json
|
||
|
||
# Configuration
|
||
COORDINATOR_URL = "http://localhost:8001"
|
||
MINER_API_KEY = "${MINER_API_KEY}"
|
||
MINER_ID = "localhost-gpu-miner"
|
||
|
||
def assign_proposer_to_latest_block():
|
||
"""Poll for the latest unassigned job to become the proposer"""
|
||
|
||
# First register the miner
|
||
print("📝 Registering miner...")
|
||
register_response = httpx.post(
|
||
f"{COORDINATOR_URL}/v1/miners/register?miner_id={MINER_ID}",
|
||
headers={
|
||
"Content-Type": "application/json",
|
||
"X-Api-Key": MINER_API_KEY
|
||
},
|
||
json={
|
||
"capabilities": {
|
||
"gpu": {"model": "RTX 4060 Ti", "memory_gb": 16}
|
||
}
|
||
}
|
||
)
|
||
|
||
if register_response.status_code != 200:
|
||
print(f"❌ Registration failed: {register_response.text}")
|
||
return
|
||
|
||
print("✅ Miner registered")
|
||
|
||
# Poll for a job
|
||
print("\n🔍 Polling for jobs...")
|
||
poll_response = httpx.post(
|
||
f"{COORDINATOR_URL}/v1/miners/poll",
|
||
headers={
|
||
"Content-Type": "application/json",
|
||
"X-Api-Key": MINER_API_KEY
|
||
},
|
||
json={"max_wait_seconds": 1}
|
||
)
|
||
|
||
if poll_response.status_code == 200:
|
||
job = poll_response.json()
|
||
print(f"✅ Received job: {job['job_id']}")
|
||
print(f" This job is now assigned to miner: {MINER_ID}")
|
||
|
||
# Check the block
|
||
print("\n📦 Checking block...")
|
||
blocks_response = httpx.get(f"{COORDINATOR_URL}/v1/explorer/blocks")
|
||
|
||
if blocks_response.status_code == 200:
|
||
blocks = blocks_response.json()
|
||
for block in blocks['items']:
|
||
if block['hash'] == job['job_id']:
|
||
print(f"✅ Block updated!")
|
||
print(f" Height: {block['height']}")
|
||
print(f" Hash: {block['hash']}")
|
||
print(f" Proposer: {block['proposer']}")
|
||
break
|
||
elif poll_response.status_code == 204:
|
||
print("ℹ️ No jobs available to poll")
|
||
else:
|
||
print(f"❌ Poll failed: {poll_response.text}")
|
||
|
||
if __name__ == "__main__":
|
||
print("🎯 Assign Proposer to Latest Block")
|
||
print("=" * 40)
|
||
assign_proposer_to_latest_block()
|