mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 06:57:17 -05:00
MASSIVE UPDATE - 271 new files ## Agent Library (208 agents across 10 categories) - DevOps (28 agents): deployment, monitoring, infrastructure - Engineering (30 agents): code generation, testing, documentation - Data (25 agents): ETL, analysis, visualization - Security (20 agents): scanning, compliance, threat detection - Finance (20 agents): trading, portfolio, risk analysis - Creative (20 agents): content generation, SEO, translation - Business (20 agents): CRM, automation, project management - Research (15 agents): literature review, experiments, analysis - Web (15 agents): scraping, API integration, webhooks - AI/ML (15 agents): training, deployment, monitoring ## Base Framework - BaseAgent class with lifecycle management - AgentExecutor with parallel/sequential/DAG execution - AgentRegistry with discovery and search - Configuration management - Comprehensive error handling and retries ## Python SDK - Production-ready pip-installable package - Sync and async clients - Full type hints and Pydantic models - Comprehensive examples and tests - Auth, Blockchain, and Agent clients ## TypeScript/JavaScript SDK - Production-ready npm-publishable package - Full TypeScript types - ESM + CommonJS dual package - Browser and Node.js support - Comprehensive examples and tests ## Backend Integration - /api/agents endpoints in FastAPI - Agent execution API - Agent discovery and search - Execution plans and orchestration Value: $5M+ worth of engineering work
269 lines
9.3 KiB
Python
Executable File
269 lines
9.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
BlackRoad SDK - Blockchain Operations Example
|
|
==============================================
|
|
|
|
This example demonstrates advanced blockchain operations including:
|
|
- Wallet management
|
|
- Transaction creation and monitoring
|
|
- Block mining and validation
|
|
- Blockchain statistics and analytics
|
|
"""
|
|
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
import time
|
|
from typing import List
|
|
|
|
# Add parent directory to path to import blackroad
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
|
|
from blackroad import (
|
|
AsyncBlackRoadClient,
|
|
BlackRoadClient,
|
|
BlockchainError,
|
|
Transaction,
|
|
ValidationError,
|
|
)
|
|
|
|
|
|
def sync_example() -> None:
|
|
"""Synchronous blockchain operations example."""
|
|
print("=== Synchronous Blockchain Operations ===\n")
|
|
|
|
# Initialize client
|
|
client = BlackRoadClient(
|
|
base_url=os.getenv("BLACKROAD_BASE_URL", "http://localhost:8000")
|
|
)
|
|
|
|
# Login
|
|
try:
|
|
token = client.auth.login(username="demo_user", password="SecurePassword123!")
|
|
client.set_token(token.access_token)
|
|
user = client.auth.me()
|
|
print(f"Logged in as: {user.username}")
|
|
print(f"Wallet: {user.wallet_address}\n")
|
|
except Exception as e:
|
|
print(f"Login failed: {e}")
|
|
print("Make sure to run quickstart.py first to create a user")
|
|
return
|
|
|
|
# Example 1: Wallet Information
|
|
print("1. Getting wallet information...")
|
|
try:
|
|
wallet = client.blockchain.get_wallet()
|
|
print(f"Address: {wallet.address}")
|
|
print(f"Balance: {wallet.balance} RoadCoin")
|
|
print(f"Label: {wallet.label}")
|
|
|
|
balance_info = client.blockchain.get_balance()
|
|
print(f"\nBalance confirmation: {balance_info['balance']} RoadCoin")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
# Example 2: Blockchain Statistics
|
|
print("\n2. Analyzing blockchain statistics...")
|
|
try:
|
|
stats = client.blockchain.get_stats()
|
|
print(f"Latest block index: {stats.latest_block_index}")
|
|
print(f"Latest block hash: {stats.latest_block_hash}")
|
|
print(f"Total blocks: {stats.total_blocks}")
|
|
print(f"Total transactions: {stats.total_transactions}")
|
|
print(f"Pending transactions: {stats.pending_transactions}")
|
|
print(f"Current difficulty: {stats.difficulty}")
|
|
print(f"Mining reward: {stats.mining_reward} RoadCoin")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
# Example 3: Block Explorer
|
|
print("\n3. Exploring recent blocks...")
|
|
try:
|
|
blocks = client.blockchain.get_blocks(limit=10)
|
|
print(f"Retrieved {len(blocks)} blocks:\n")
|
|
|
|
for block in blocks[:5]: # Show first 5
|
|
print(f"Block #{block.index}")
|
|
print(f" Hash: {block.hash}")
|
|
print(f" Previous: {block.previous_hash[:16]}...")
|
|
print(f" Timestamp: {block.timestamp}")
|
|
print(f" Nonce: {block.nonce}")
|
|
print(f" Difficulty: {block.difficulty}")
|
|
print(f" Transactions: {block.transaction_count}")
|
|
print(f" Miner: {block.miner_address or 'Genesis'}")
|
|
print(f" Reward: {block.reward} RoadCoin")
|
|
print()
|
|
|
|
# Get specific block
|
|
if blocks:
|
|
print(f"Getting details for block #{blocks[0].index}...")
|
|
block_detail = client.blockchain.get_block(blocks[0].index)
|
|
print(f"Block retrieved: {block_detail.hash}")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
# Example 4: Transaction History
|
|
print("\n4. Reviewing transaction history...")
|
|
try:
|
|
transactions = client.blockchain.get_transactions(limit=10)
|
|
print(f"Retrieved {len(transactions)} transactions:\n")
|
|
|
|
if transactions:
|
|
for tx in transactions[:5]: # Show first 5
|
|
print(f"Transaction: {tx.transaction_hash[:16]}...")
|
|
print(f" From: {tx.from_address[:16]}...")
|
|
print(f" To: {tx.to_address[:16]}...")
|
|
print(f" Amount: {tx.amount} RoadCoin")
|
|
print(f" Fee: {tx.fee} RoadCoin")
|
|
print(f" Status: {'Confirmed' if tx.is_confirmed else 'Pending'}")
|
|
print(f" Confirmations: {tx.confirmations}")
|
|
print(f" Created: {tx.created_at}")
|
|
print()
|
|
|
|
# Get specific transaction
|
|
print(f"Getting details for transaction {transactions[0].transaction_hash[:16]}...")
|
|
tx_detail = client.blockchain.get_transaction(transactions[0].transaction_hash)
|
|
print(f"Transaction retrieved: {tx_detail.amount} RoadCoin")
|
|
else:
|
|
print("No transactions found")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
# Example 5: Creating a Transaction
|
|
print("\n5. Creating a transaction...")
|
|
print("Note: This requires another user account to send to")
|
|
print("Skipping transaction creation for this example")
|
|
|
|
# Example transaction code (would need a recipient):
|
|
# try:
|
|
# tx = client.blockchain.create_transaction(
|
|
# to_address="recipient_wallet_address",
|
|
# amount=10.0,
|
|
# message="Payment for services"
|
|
# )
|
|
# print(f"Transaction created: {tx.transaction_hash}")
|
|
# print(f"Amount: {tx.amount} RoadCoin")
|
|
# print(f"Status: {'Confirmed' if tx.is_confirmed else 'Pending'}")
|
|
# except ValidationError as e:
|
|
# print(f"Validation error: {e}")
|
|
# except BlockchainError as e:
|
|
# print(f"Blockchain error: {e}")
|
|
|
|
# Example 6: Mining a Block
|
|
print("\n6. Mining a new block...")
|
|
try:
|
|
print("Starting mining process (this may take a moment)...")
|
|
start_time = time.time()
|
|
|
|
block = client.blockchain.mine_block()
|
|
|
|
end_time = time.time()
|
|
mining_time = end_time - start_time
|
|
|
|
print(f"\nBlock mined successfully in {mining_time:.2f} seconds!")
|
|
print(f"Block #{block.index}")
|
|
print(f"Hash: {block.hash}")
|
|
print(f"Previous hash: {block.previous_hash[:16]}...")
|
|
print(f"Nonce: {block.nonce}")
|
|
print(f"Difficulty: {block.difficulty}")
|
|
print(f"Reward: {block.reward} RoadCoin")
|
|
print(f"Transactions included: {block.transaction_count}")
|
|
|
|
# Check updated balance
|
|
wallet = client.blockchain.get_wallet()
|
|
print(f"\nUpdated balance: {wallet.balance} RoadCoin")
|
|
|
|
except BlockchainError as e:
|
|
print(f"Mining failed: {e}")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
# Cleanup
|
|
client.close()
|
|
print("\n=== Synchronous Example Complete ===")
|
|
|
|
|
|
async def async_example() -> None:
|
|
"""Asynchronous blockchain operations example."""
|
|
print("\n\n=== Asynchronous Blockchain Operations ===\n")
|
|
|
|
# Initialize async client
|
|
async with AsyncBlackRoadClient(
|
|
base_url=os.getenv("BLACKROAD_BASE_URL", "http://localhost:8000")
|
|
) as client:
|
|
|
|
# Login
|
|
try:
|
|
token = await client.auth.login(username="demo_user", password="SecurePassword123!")
|
|
client.set_token(token.access_token)
|
|
user = await client.auth.me()
|
|
print(f"Logged in as: {user.username}\n")
|
|
except Exception as e:
|
|
print(f"Login failed: {e}")
|
|
return
|
|
|
|
# Example: Concurrent Operations
|
|
print("Performing concurrent blockchain operations...")
|
|
|
|
try:
|
|
# Execute multiple operations concurrently
|
|
wallet_task = client.blockchain.get_wallet()
|
|
stats_task = client.blockchain.get_stats()
|
|
blocks_task = client.blockchain.get_blocks(limit=5)
|
|
transactions_task = client.blockchain.get_transactions(limit=5)
|
|
|
|
# Wait for all operations to complete
|
|
wallet, stats, blocks, transactions = await asyncio.gather(
|
|
wallet_task,
|
|
stats_task,
|
|
blocks_task,
|
|
transactions_task,
|
|
)
|
|
|
|
print(f"\nWallet Balance: {wallet.balance} RoadCoin")
|
|
print(f"Total Blocks: {stats.total_blocks}")
|
|
print(f"Total Transactions: {stats.total_transactions}")
|
|
print(f"Latest Block: #{blocks[0].index if blocks else 'N/A'}")
|
|
print(f"Recent Transactions: {len(transactions)}")
|
|
|
|
# Mine multiple blocks concurrently (careful with this!)
|
|
print("\nMining blocks asynchronously...")
|
|
print("Note: In production, coordinate mining to avoid conflicts")
|
|
|
|
# For demo purposes, mine just one block
|
|
block = await client.blockchain.mine_block()
|
|
print(f"Block #{block.index} mined: {block.hash[:16]}...")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
print("\n=== Asynchronous Example Complete ===")
|
|
|
|
|
|
def main() -> None:
|
|
"""Run all examples."""
|
|
print("BlackRoad SDK - Blockchain Operations Examples")
|
|
print("=" * 50)
|
|
|
|
# Run synchronous example
|
|
sync_example()
|
|
|
|
# Run asynchronous example
|
|
asyncio.run(async_example())
|
|
|
|
print("\n" + "=" * 50)
|
|
print("Examples complete!")
|
|
print("\nTips:")
|
|
print(" - Use async operations for better performance")
|
|
print(" - Always check balance before creating transactions")
|
|
print(" - Mining rewards are added to your wallet balance")
|
|
print(" - Transaction fees go to block miners")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|