Skip to main content

ombrachain — Python SDK

Client oficial Python pentru OmbraChain. Python ≥3.10.

Install

pip install ombrachain

Quick start

Check balance

from ombrachain import OmbraClient

client = OmbraClient("https://api.ombra-net.com")
account = client.chain.get_account("5bb5c50f185363cf913f93a18c6837c20d720a69")
print(f"balance: {account['balance']} micro-OMBRA, nonce: {account['nonce']}")

Create wallet + send OMBRA

from ombrachain import OmbraClient, Wallet

client = OmbraClient("https://api.ombra-net.com")

wallet = Wallet.generate() # BIP39 12-word nou
print("address:", wallet.address)
print("mnemonic (BACKUP!):", wallet.mnemonic)

# SAU import
wallet = Wallet.from_mnemonic("twelve word mnemonic ...")

result = client.send(wallet, to="abc...", amount=1_000_000, fee=10_000)
print("tx hash:", result["hash"])

Submit AI task

import time
result = client.submit_task(
wallet,
prompt="Explain Proof of AI Tokens Used in 100 words",
task_type="chat",
fee=500_000,
)
print("task ID:", result["task_id"])

while True:
task = client.tasks.get_detailed(result["task_id"])
if task["status"] in ("completed", "failed", "timeout"):
break
time.sleep(5)
print("result:", task.get("result"))

Subscribe la blocuri noi (async SSE)

import asyncio
from ombrachain import OmbraClient

async def main():
client = OmbraClient("https://api.ombra-net.com")
async with client.subscribe_chain() as sub:
async for evt in sub:
if evt["type"] == "block":
print("new block:", evt["block"]["index"])

asyncio.run(main())

WebSocket subscribe

import asyncio
from ombrachain import OmbraClient

async def main():
client = OmbraClient("https://api.ombra-net.com")
ws = client.websocket()
await ws.connect()
await ws.subscribe({"channel": "mempool"})
async for msg in ws.messages():
print(msg)

asyncio.run(main())

Encrypted wallet storage

from ombrachain import Wallet, EncryptedStorage

storage = EncryptedStorage("wallet.enc")
wallet = Wallet.generate()
storage.save(wallet, "user-password-123")

# Mai târziu
loaded = storage.load("user-password-123")
print(loaded.address)

API publică

OmbraClient

AttributeUse
chainget_height(), get_account(), get_block(), submit_tx(), ...
walletget_balance(addr)
taskssubmit(), get(), get_detailed(), active(), list()
minerslist(), get(nft_id), get_by_address(addr)
mempoolget()
tokenomicsget_supply(), get_holders(limit), get_distribution()
analyticsoverview(range), heatmap()
send(wallet, ...)high-level send OMBRA
submit_task(wallet, ...)high-level submit AI task
subscribe_chain()async SSE context manager
websocket()async WS client

Wallet

MethodUse
Wallet.generate(words=12)BIP39 nou (12 sau 24 cuvinte)
Wallet.from_mnemonic(m, hd_index=0)Import din mnemonic
Wallet.from_private_key(hex)Import raw (fără recovery)
wallet.sign(message)Ed25519 sign → hex
Wallet.verify(msg, sig, pubkey)Verify
wallet.address, wallet.public_key, wallet.private_key, wallet.mnemonicAttribute

Tx builders low-level

from ombrachain import build_transfer_tx, build_burn_tx, verify_tx

tx = build_transfer_tx(from_addr, to, amount, fee, nonce, private_key)
client.chain.submit_tx(tx)

assert verify_tx(tx) == {"ok": True}

Toate 11 builders: build_transfer_tx, build_task_submit_tx, build_task_response_tx, build_task_progress_tx, build_task_validate_tx, build_task_reward_tx, build_miner_register_tx, build_nft_setname_tx, build_nft_transfer_tx, build_burn_tx, build_attestation_reward_tx.

Constants

from ombrachain import MIN_TASK_FEE, MICRO_OMBRA, TOKENS_PER_OMBRA, FEE_SPLIT_V2

MIN_TASK_FEE # 10_000 (0.01 OMBRA)
MICRO_OMBRA # 1_000_000
TOKENS_PER_OMBRA # 1_000_000 (1M tokens AI = 1 OMBRA reward)
FEE_SPLIT_V2 # {"miner": 70, "burn": 25, "validator": 5}

Error handling

from ombrachain import OmbraApiError, OmbraNetworkError

try:
client.chain.get_height()
except OmbraApiError as e:
print(f"HTTP {e.status}: {e.body}")
except OmbraNetworkError as e:
print(f"Network down: {e}")

Cross-language compatibilitate

Tx-uri semnate cu acest SDK sunt bit-exact identice cu cele semnate cu SDK TypeScript. Vector tests sdk-python/tests/test_cross_language.py validează roundtrip.

Exemplu cross-test:

# Standard BIP39 mnemonic produce ACEEAȘI adresa în TS + Python:
from ombrachain import Wallet
w = Wallet.from_mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about")
assert w.address == "94bfbb5fbd2fea4c67be283d36528a3cfd1cfda3"

Vezi și