Files
aitbc/apps/blockchain-node/scripts/assign_proposer.py
oib 15427c96c0 chore: update file permissions to executable across repository
- Change file mode from 644 to 755 for all project files
- Add chain_id parameter to get_balance RPC endpoint with default "ait-devnet"
- Rename Miner.extra_meta_data to extra_metadata for consistency
2026-03-06 22:17:54 +01:00

76 lines
2.3 KiB
Python
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()