Python SDK for the Zero Network — stablecoin microtransactions for AI agents
Project description
zero-network
Python SDK for the Zero Network — stablecoin microtransactions for AI agents.
1 Z = $0.01 USD | Ed25519 signatures | 100-byte transactions | x402 support
Install
pip install zero-network
For x402 server-side gating (requires Starlette/FastAPI):
pip install zero-network[x402]
Quick Start
from zero_network import Wallet
# Create a new wallet
wallet = Wallet.create()
print(wallet.address) # hex-encoded public key
print(wallet.seed_hex) # save this! needed to restore
# Restore from seed
wallet = Wallet.from_seed("your_64char_hex_seed")
# Or from ZERO_KEY environment variable
wallet = Wallet.from_env()
# Request testnet funds
wallet.faucet()
# Check balance
print(wallet.balance(), "Z")
# Send 0.50 Z to another address
wallet.send("recipient_pubkey_hex_64chars", 0.5)
# Transaction history
for tx in wallet.history(limit=5):
print(tx)
Async Usage
All wallet methods have async variants prefixed with a:
import asyncio
from zero_network import Wallet
async def main():
wallet = Wallet.create()
await wallet.afaucet()
balance = await wallet.abalance()
print(f"{balance} Z")
await wallet.asend("recipient_pubkey_hex", 1.0)
await wallet.aclose()
asyncio.run(main())
x402 Auto-Paying Client
Fetch paywalled resources with automatic micropayment:
from zero_network import Wallet
from zero_network.x402 import x402_fetch
wallet = Wallet.from_env()
response = x402_fetch("https://api.example.com/premium", wallet, max_price_z=0.10)
print(response.json())
If the server returns 402 Payment Required with a JSON body containing {"address": "...", "amount": 0.05}, the SDK pays automatically and retries.
x402 Server-Side Gating
Gate FastAPI/Starlette endpoints behind a paywall:
from fastapi import FastAPI, Request
from zero_network.x402 import x402_gate
app = FastAPI()
@app.get("/premium")
@x402_gate(0.05, recipient_address="your_pubkey_hex")
async def premium(request: Request):
return {"data": "premium content"}
Low-Level Client
from zero_network import ZeroClient
client = ZeroClient()
print(client.status())
print(client.balance("pubkey_hex"))
print(client.account("pubkey_hex"))
API Reference
Wallet
| Method | Description |
|---|---|
Wallet.create() |
Generate new Ed25519 keypair |
Wallet.from_seed(hex) |
Restore from 32-byte hex seed |
Wallet.from_env(var="ZERO_KEY") |
Restore from environment variable |
wallet.address |
Hex-encoded public key |
wallet.seed_hex |
Hex-encoded seed (keep secret!) |
wallet.balance() / abalance() |
Query balance in Z |
wallet.send(to, amount_z) / asend() |
Send Z (auto nonce + sign) |
wallet.account() / aaccount() |
Full account state |
wallet.history(limit) / ahistory() |
Transaction history |
wallet.faucet() / afaucet() |
Request testnet funds |
ZeroClient
| Method | Description |
|---|---|
client.status() / astatus() |
Network status |
client.balance(pubkey) / abalance() |
Account balance |
client.account(pubkey) / aaccount() |
Account state |
client.history(pubkey, limit) / ahistory() |
Transaction history |
client.send(...) / asend() |
Submit signed transaction |
client.faucet(address) / afaucet() |
Request testnet funds |
Transaction Helpers
| Function | Description |
|---|---|
build_transfer(from_pub, to_pub, amount, nonce) |
Build unsigned 72-byte tx |
sign_transfer(unsigned_tx, signing_key) |
Sign and return 100-byte tx |
parse_transfer(tx_bytes) |
Parse 100-byte tx into Transfer |
Constants
| Constant | Value | Description |
|---|---|---|
UNITS_PER_Z |
100 | Internal units per 1 Z |
FEE_UNITS |
1 | Flat fee (0.01 Z) |
MAX_TRANSFER_UNITS |
2500 | Max transfer (25 Z) |
DEFAULT_RPC |
https://rpc.zzero.net |
Default RPC endpoint |
TESTNET_FAUCET |
http://157.180.56.48:8093 |
Testnet faucet |
Network Details
- Denomination: 1 Z = $0.01 USD = 100 internal units
- Fee: 0.01 Z (1 unit) flat per transaction
- Max transfer: 25 Z (2500 units)
- Account creation: 1.00 Z deducted on first receive
- Signatures: Ed25519 (compatible with tweetnacl/dalek)
- Hashing: BLAKE3
- Transaction size: 100 bytes
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zero_network-0.1.0.tar.gz.
File metadata
- Download URL: zero_network-0.1.0.tar.gz
- Upload date:
- Size: 10.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1659166e280ee95875f4a877bf0744138b3e3230beedd496a118bdf34e96193e
|
|
| MD5 |
c1311dc536990973625510ea3f5f9acf
|
|
| BLAKE2b-256 |
fbd09824bf2111d710fa6a0cf0c0856a45a28a7f6947e734d7d31f77712feeff
|
File details
Details for the file zero_network-0.1.0-py3-none-any.whl.
File metadata
- Download URL: zero_network-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74eb7f6cd91c367c403a152ea6f3bfe2bc303e976385c551199c30654bd1d5e9
|
|
| MD5 |
8052efa510587c00350f0ddc41a834f7
|
|
| BLAKE2b-256 |
c0d1edb7c8f0252d843f6ce7752991611d97b6bed3db9f2e5fed0e60bc9c7b16
|