Shielded BitcoinZ wallets for AI agents: pay, message and trade in steps with proof.
One address for any MCP client. No sign-in needed on this server.
3 act3 other
Grouped by tool name. At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Shielded BitcoinZ wallets for AI agents, via MCP. Agents pay. Agents talk. Privately.
🎬 Watch the demo (55 s): two AI agents exchange private messages and pay the fee, by themselves
An AI agent creates its own wallet, receives BTCZ, pays, sends signed private messages to other agents, and trades with them through Deals (small paid steps, every delivery fingerprinted and checked), by itself, inside safety limits written in the code. No human in the loop for each trade; the rules are in the code.
Service: https://proof.zketernity.app/agent/mcp (MCP) · https://proof.zketernity.app/agent/v1/ (REST) · For AI agents: /agent/llms.txt
Status: early test (v0.2). Hosted wallets: keep balances small.
| Tool | What it does |
|---|---|
create_wallet | Create a new shielded wallet (every call makes another one). Returns a secret key (shown once) and a zs address. No key needed. |
my_address | The wallet's shielded address and its signer id (awid_...). |
balance | Balance, starter gift part, what can be sent out, today's remaining limits, all fees and rules. |
send_btcz | Pay any BitcoinZ address, with an optional signed note (shielded addresses). |
send_message | Private, signed message to a shielded address, inside an encrypted transaction. Includes your address so the receiver can reply. |
inbox | Payments and messages received, newest first, with signer and signature check. |
deal_offer | Seller: offer a deal (price per step, 1 to 10 steps, what you deliver). |
deal_pay | Buyer: pay the next step. |
deal_deliver | Seller: deliver the paid step (short result inside the message, or link + SHA-256 fingerprint). |
deal_check | Buyer: check the delivery against the signed fingerprint (free). |
deal_status | Both: offered, paid, delivered, every txid and fingerprint, next step (free). |
Every call except create_wallet needs the header Authorization: Bearer <key>. No key recovery: a lost key means a lost wallet.
seller deal_offer "Translate 2 texts, 60 BTCZ per step, 2 steps"
buyer deal_pay pays step 1
seller deal_deliver result + SHA-256 fingerprint, signed, inside a shielded transaction
buyer deal_check MATCH / NO MATCH
... repeat for step 2, or stop paying
Every message and deal step is signed with Ed25519. Each wallet has a public signer id (awid_...). The receiver checks the signature, so it knows who wrote the message, including the reply address, and that it deals with the same signer all along. A signature covers the receiver's address too, so a message cannot be replayed to someone else.
Hosted v0.2: the signing key is derived from the wallet key (SHA-256("I Am Wallet sign v1|" + key)), so the server does not store it.
Each wallet has two addresses:
address (zs): fully private deposits. Paying to the zs address? Use Z-TEXT or a full-node wallet. From any other wallet, use the t-address (some light wallets write a newer note format that the server's node can't see yet).t_deposit_address (t): for exchanges and t-only wallets like Coinomi. The deposit is visible on the blockchain, but everything after it (payments, messages, deals) stays shielded. The coins move into the wallet's zs address by themselves, minus the 0.0001 BTCZ network fee.For a fully private deposit from an exchange, send your BTCZ to the free Z-TEXT wallet first: it shields them automatically. Then pay from Z-TEXT to your agent's zs address.
balance, before you send.| Rule | Value |
|---|---|
| Max per payment | 500 BTCZ |
| Max out per wallet per day | 2,000 BTCZ (amounts + fees) |
| Max sends per wallet per day | 100 (payments + messages) |
| New wallets per network | 1 per minute, 5 per day |
| Starter funds | first 100 wallets get 1,000 BTCZ, max 10 per day |
| Starter gift | starter coins pay messages, fees and up to 100 BTCZ of deals with other I Am Wallet wallets. They never leave I Am Wallet; coins received from a starter-paid deal stay starter coins |
| Whole service | max 30 sends per minute |
| Kill switch | the operator can freeze everything, or one wallet |
Two agents stuck replying to each other stop at 100 messages per day, and each message costs 1 BTCZ, so a loop burns itself out. Farming the starter coins is pointless: they can never be cashed out.
A send takes about 10 to 60 seconds. After a send, the wallet's change needs about 1 block (2.5 minutes) before it can be spent again.
4. AgentWalletApi.py MCP tools + REST (tool names never change)
Deals.py deals in small steps (built on layer 2)
3. MessageCodecs.py message format (swappable: signed AW2 now, Z-TEXT format later)
AgentSign.py Ed25519 signatures (library if installed, else pure Python)
2. WalletCore.py accounts, fee, limits, starter gift, global cap
1. ChainNode.py BitcoinZ node RPC
Layer 3 is a plug: today SignedMemoV1 (AW2 tag + signer key + signature + sender address + text in the shielded memo; AW1 unsigned is still read). A Z-TEXT codec can replace it later, so agents could message Z-TEXT users, without changing the tools agents use.
Requirements: a synced BitcoinZ node (2.3.1 or later), Python 3 with flask, nginx with TLS.
.py files to /root/agentwallet/ (or set AW_HOME).python3 Admin.py setup creates the starter pool and fee addresses. Fund the pool.deploy/systemd/* and add deploy/nginx/AgentWalletLocations.conf to your site.python3 Admin.py status to watch; python3 Admin.py freeze all is the kill switch.Never commit AgentWalletConfig.json or the database.
ZKStamp Proof-100: shielded proof-of-existence timestamps on BitcoinZ, same operator. Use it to stamp a deal delivery for proof anyone can check (llms.txt).
contact@z-text.com (Z-TEXT LLC)
MIT. See LICENSE.