ZooBC Wallet manual

Rewritten from the V0.36 manual for wallet V0.51. Terminology updated: the chain renamed game/games to app/apps, so endpoints are /api/v1/apps and keys are app_type.

ZooBC Wallet — User Manual

Version V0.36 · July 2026

This manual documents every screen, tab, field and transaction type in the ZooBC Wallet. The wallet is a single HTML file that runs entirely in your browser: your keys never leave your device, all transactions are built and signed locally, and only the finished signed bytes are sent to the network.


Table of contents

  1. Core concepts
  2. Getting started
  3. The main interface
  4. HOME — Dashboard, To-do, Active, Activity
  5. WALLET — Send, Receive, Deposit, Withdraw, Scheduled, Multi-sig, Policy
  6. ASSETS — Tokens, Files, Exchange, Marketplace
  7. SOCIAL — Contacts, Online, Chat, Calls
  8. BUSINESS — Invoices, Forms, Notary
  9. APPS — the Arcade
  10. ADVANCED — Keys & seeds, Paper wallet, Submit
  11. SYSTEM — Settings, Node, Network, Gateways, Relays, Governance
  12. Transaction reference
  13. Troubleshooting
  14. Glossary

1. Core concepts

1.1 The coin and its units

The native coin is ZBC. On-chain, every amount is stored in atomic units: 1 ZBC = 100,000,000 atomic (10⁸). The wallet always shows human amounts and converts at the edges. Issued tokens have their own decimals (0–8) and are likewise stored in base units.

1.2 Accounts and address formats

One wallet can hold accounts on many key schemes. Every account is stored on-chain as a typed account: a 4-byte type prefix + the key material. Supported formats:

FormatTypeKey schemeAddress looks like
ZooBC0ed25519ZBC_XXXX_… (base32 + checksum)
Ethereum / BNB4secp256k1 + keccak0x… (same bytes, different label)
Bitcoin legacy (P2PKH)5secp256k11…
Bitcoin P2SH6— (receive only)3…
Bitcoin SegWit (P2WPKH)7secp256k1bc1q…
Bitcoin P2WSH8— (receive only)bc1q… (long)
Bitcoin Taproot9BIP-340 schnorrbc1p…
Dataset deposit10— (object rent account)ZBS_…
Solana11ed25519base58 pubkey
Polkadot12sr25519 (Schnorrkel)SS58
Cardano13ed25519addr1…
Ripple14secp256k1r…
Tron15secp256k1 + keccakT…
Tezos16ed25519tz1…

Any format can send and receive on the ZooBC chain — a Bitcoin-format account signs ZooBC transactions with its Bitcoin key. The address is derived exactly as on the original chain, so a bridged deposit from that chain credits the mirrored account automatically (see Deposit).

Derivation paths (from a BIP-39 phrase): ZooBC m/44'/883'/account' (SLIP-0010 ed25519); ETH/BNB BIP-44 coin 60; BTC BIP-44/84/86 for legacy/SegWit/Taproot; Solana m/44'/501'/account'; Cardano coin 1815; Tezos coin 1729; Polkadot uses substrate mini-secret derivation.

1.3 Transactions, fees, escrow

Every action on the chain is a signed transaction with a type number, a fee in ZBC, an optional message, and an optional escrow wrapper (approver + deadline + commission + instruction). The default network fee is 0.05 ZBC (base 0.025 + headroom for data-carrying transactions); the wallet pre-fills it and raises it automatically for large messages. The full type list is in section 12.

1.4 Gateways, nodes, relays

If the configured gateway dies, the wallet fails over automatically: current node → built-in fallbacks → your extra nodes (Settings → Node) → gateways learned from the on-chain registry.

1.5 Storage rent and survival objects

Data written on-chain (datasets, stored files, tokens) pays storage rent. Each object has a fundable ZBS_ deposit address derived from the transaction that created it; when the deposit runs out the object can be pruned. You can top up any object's longevity (see Files → Objects).

1.6 Security model


2. Getting started

2.1 Before you open it — check the file is genuine

This wallet is a single file you open in a browser and then type your recovery phrase into. A fake

copy looks identical and behaves normally, right up to the moment it sends your phrase somewhere

else. Nothing on screen can warn you, because by then the fake page is the thing doing the warning.

So check the file before you open it. It takes about ten seconds.

The easy way. Open /verify on the gateway you downloaded from, and drag the file onto the box.

The check runs inside your own browser — the file is never uploaded anywhere.

The way that needs nothing but a terminal. A hash is a fingerprint of a file: change one byte

and it changes completely, and nobody can work backwards to build a different file with the same

fingerprint.


sha256sum "ZooBC Wallet.html"

Compare what that prints, character for character, with the hash published for that file.

Then ask who told you the fingerprint. This is the part that matters, and the /verify page is

explicit about it:

what it sayswhat it means
on-chainThe hash was signed into a block by the release authority — one key, fixed in the chain's genesis, that is the only thing allowed to register a file hash. Every node holds that record. A website cannot change it, fake it, or remove it.
this gateway says soThe hash came from the website you are looking at. That catches a corrupted download or a careless fake. It does not help if that website is itself the attacker, because then the file and its fingerprint are both fake and agree perfectly.
REVOKED on-chainThe authority published this file and then withdrew it — usually because it turned out to be compromised or faulty. This is worse than an unrecognised file, not better: the chain has something specific to say about this one. Delete it and fetch a current file. A website still offering it is a reason for more suspicion, not less.

For anything involving money, an on-chain match is the one to insist on. A gateway vouching for its

own downloads is not proof.

How to check without trusting any website at all. Everything above still runs on a page someone

serves you. If you want a check that does not, ask a node directly — any node, including one you run

yourself. Two commands:


sha256sum "ZooBC Wallet.html"
curl -s http://NODE:8080/api/v1/release/list

If your file's hash appears in that list, it is a file the release authority published. If it does

not appear, no amount of reassurance from any website makes it safe to type a recovery phrase into.

You can also ask which key is allowed to publish at all:


curl -s http://NODE:8080/api/v1/release/authority

Every node answers the same thing, because it is written into the chain. Ask two nodes run by

different people and compare — that is the whole point of the design, and it costs you one extra

command.

If /verify warns that a change of release authority is pending, stop and find out why before

trusting anything you downloaded from that site. The authority is the one key behind every claim on

that page, and proposing to move it is precisely what someone who had just stolen it would do. It

may well be a planned rotation — but confirm that through a channel that does not run through the

website in question, because a compromised site will happily reassure you about its own handover.

This matters more as ZooBC grows into other wallets and other languages. You should never have to take anyone's word for which file is genuine — the chain exists so that you do not have to.

2.2 First launch — risk notice

On the very first launch a Software Interface Notice & User Risk Acknowledgment is shown. You must accept it (or exit); the full Terms of Service stay available from the footer at any time.

2.3 Welcome screen

The onboarding card offers:

2.4 Creating a new wallet

  1. Pick a phrase length (12–24 words). Words are shown as numbered pills; Copy phrase, Copy numbered list, New phrase buttons.
  2. A warning reminds you the phrase is the only backup. Tick "I've written down my recovery phrase".
  3. Verify — pick the right word for a few random positions.
  4. Set a PIN — choose and confirm a 6-digit PIN. It encrypts the vault on this device so the wallet survives refreshes.

2.5 Returning — Unlock

Enter your PIN (or use the passkey button if set up). Links below: Restore from a backup file and Reset wallet on this device (wipes local data; the phrase is your restore).

2.6 Watch-only

Watch an address shows balance & activity for any address without a key. The hero shows a watch-only badge and all signing pages are hidden.


3. The main interface

3.1 Top bar

3.2 Balance hero (left column)

3.3 Left menu

Collapsible groups (your open/closed state is remembered; whole sections can be hidden under Settings → Menu):

GroupItems
HOMEDashboard · To-do · Active · Activity
WALLETSend · Receive · Deposit · Withdraw · Scheduled · Multi-sig · Policy
ASSETSTokens · Files · Exchange · Marketplace
SOCIALContacts · Online · Chat · Calls
BUSINESSInvoices · Forms · Notary
APPSLobby · Single Player · 1 vs 1 · 3+ Players
ADVANCEDKeys & seeds · Paper wallet · Submit
SYSTEMSettings · Node · Network · Gateways · Relays · Governance

On narrow screens the menu collapses to a top navbar / burger menu.

Legal & info pages: Terms & Conditions, Privacy Policy, Help & Manual, Participate in the Project.


4. HOME

4.1 Dashboard (Overview)

The landing page after unlock:

4.2 To-do

"Everything waiting on you — approve, settle, or reply." One list that aggregates:

A counter badge on the menu item shows how many. Refresh re-pulls everything. The page auto-refreshes every 60 s while open.

4.3 Active (Active transactions)

Transactions that are live right now, in four tabs:

4.4 Activity

Your transaction history.


5. WALLET

5.1 Send

The main transfer page. Fields top to bottom:

What it broadcasts: SendZBC (type 1) — or TransferToken (11) when a token is selected in the hero, or LiquidPayment (6) when the liquid box is ticked. Escrow rides in the envelope of any of them.

5.2 Receive

Your address as a large QR code, the address in text, and a Copy address button.

5.3 Deposit

Bridge into ZooBC: bring BTC, ETH, USDC or USDT onto the chain as wrapper coins (e.g. BTC → ZBTC), minted 1:1 after confirmation. Two tabs:

5.4 Withdraw

Bridge out of ZooBC (wrapper coins back to their origin chains). This screen is a mock-up — the outbound bridge is not functional yet; it shows the planned coin list and flow.

5.5 Scheduled

Value that moves on a timer. Five tabs:

5.6 Multi-sig

An account that needs several signatures for each spend. Two tabs:

5.7 Policy — "What I transact with"

Per-account, on-chain category opt-out, enforced by every node. Turning a category off is bidirectional: you can neither send nor receive it; anyone who tries is bounced (no funds move; they pay only the network fee). Nine toggles:

BitCategoryCovers
0PaymentsSend ZBC, liquid / scheduled / trigger transfers
1AppsCreate, join, move, resign, timeout, settle
2TokensIssue, transfer, mint, burn, finance colored coins
3ExchangeSwap offers and order-book markets
4Data & StorageDatasets, prepaid storage, files (DFS), storage proofs
5Escrow & MultisigEscrow approval / request, multisignature
6Node & InfrastructureNode registration, gateway / archival / relay registry
7BridgeCross-chain attestation / mint
8GovernanceFee votes, signed-release governance

A summary chip shows "Transacting with everything" or "Refusing: …". Switching off Payments or Node & Infrastructure asks for an extra confirmation (they can lock you out of everyday use). Save policy broadcasts SetTransactPolicy (type 50, mask u16 LE, ~0.05 ZBC fee); it applies once the block settles.


6. ASSETS

6.1 Tokens

Registry of every coin on the chain (genesis + user-issued "colored coins"). Two modes:

6.2 Files

Decentralized file storage (DFS) plus all data-lifecycle tools. Six tabs:

6.3 Exchange

An on-chain order-book exchange (CLOB). Header badge shows CONNECTING… / LIVE / OFFLINE honestly; nothing is simulated when the endpoints are down.

6.4 Marketplace

A peer-to-peer swap-offer board (OTC): "post what you give and what you want; anyone can accept." Fully atomic — the node swaps both sides in one block or not at all. LIVE-only, with an honest OFFLINE state.


7. SOCIAL

7.1 Contacts

Your address book. Add contact — name, optional photo and note, and any number of addresses across chains (each labeled with a chain badge). Contact names replace raw addresses throughout the wallet (Send, Activity, Chat, Marketplace…) — the raw address is always one tap away to copy. Contacts live in the encrypted vault and travel with backups.

7.2 Online

Live presence of your contacts. Each row shows status (online / away / offline), with quick actions to chat or call. Presence is push-based: wallets beacon every ~60 s through the relay, and the list repaints on a timer — two wallets see each other without any navigation. How you appear is controlled under Calls → Appearance.

7.3 Chat

On-chain messaging. Two layers:

Messages can be deleted via Files → Datasets (removal must match the entry exactly).

7.4 Calls

Voice, video and screen-share, peer-to-peer. Direct calls are free; when a firewall blocks a direct link, a relay gateway carries the traffic for credit you top up. Five tabs:

During a call: mute, camera toggle, screen-share, and a live data meter. The top-bar relay indicator shows remaining data during relayed calls.


8. BUSINESS

8.1 Invoices

Send a payable invoice by link — in ZBC or any registered coin/token (ZUSD, ZBTC…). Payment is a normal transfer in that currency; status reconciles itself from the chain.

8.2 Forms

Publish a form, share a link, collect signed & encrypted submissions only you can read — with proof of who signed what. Define fields, publish (a dataset on your account), share the link; submissions are encrypted to your key and listed with the signer's address and timestamp.

8.3 Notary (Proof of Existence)

Timestamp any file on-chain — the document never leaves your device.

Links to invoices, forms, polls and pay pages adapt to how the wallet is served: from a real https:// origin they're full URLs; from a local file they're #fragment links — the recipient pastes the fragment after …wallet.html in their own wallet (no file:// path is ever baked in).


9. APPS

The Arcade: on-chain, stake-based turn apps. The lobby gates honestly — when the chain is unreachable an overlay blocks play until it's back.

9.1 Views

9.2 Starting a match

The new-match form: app, stake (amount + coin — ZBC or any token from the pool list; 0 = friendly), seats, opponent (1 v 1) and, where supported, fast mode (state channel). Creating broadcasts CreateApp (24), locking your stake; a joiner locks theirs with JoinApp (25).

9.3 Playing

The board view shows the status bar (whose turn, countdown), the board, players rail and move history. Move legality is enforced client-side; the node's app VM re-validates every move.


10. ADVANCED

10.1 Keys & seeds

Manage every identity in the vault:

10.2 Paper wallet

Printable cold storage. Controls: SourceMy wallet (an account you hold) or New empty wallet (fresh phrase generated on the spot, never stored); layout options; Print. The sheet contains the address QR + the phrase/key with a strong handling warning.

10.3 Submit

Broadcast a transaction that was signed elsewhere (air-gapped device, multisig co-signer, "create only" from Send). Paste the signed JSON or Scan QR with the camera. No key is needed. Reports the resulting transaction ID or the node's error verbatim.


11. SYSTEM

11.1 Settings

Grouped into sub-tabs:

11.2 Node

Everything for running a validator node (ZooBC accounts only):

11.3 Network

Your on-chain infrastructure records, with a live overview of the three registries:

Re-registering with the same key updates domain/URL; only the owner's re-announce/unregister has effect.

11.4 Gateways

11.5 Relays

Register a relay (operator flow, no transaction, no fee): choose the gateway whose ZBG_ key signs, set certificate validity (days), Generate relay key & certificate. The wallet produces the relay's ZBR_ key and a certificate signed by your gateway key; paste the output into the relay server's /etc/zoobc/relay.env and restart — its log shows [fed] ON and it links to peer gateways. Re-run any time to rotate the key.

11.6 Governance

  1. Commit — your vote is broadcast as a hash (FeeVoteCommit, type 7); the wallet remembers the underlying vote on this device.
  2. Reveal — in the reveal window, broadcast the vote + your raw signature (FeeVoteReveal, 263).

12. Transaction reference

All integers little-endian; amounts in atomic units (×10⁸ for ZBC, ×10^decimals for tokens). Every transaction shares the same envelope: type(u32) · version(1) · timestamp(u64) · sender(typed acct) · recipient(typed acct; 02000000 = none) · fee(u64) · body_len(u32) · body · escrow-or-marker · message_len(u32) · message. The escrow block (any escrowable type) is approver(typed) · commission(u64) · timeout(u64) · instruction(lp4) · multi_party(1); without escrow a 4-byte marker (=2) is written. ZBC accounts sign ed25519 over the chain-bound digest SHA3-256("ZBC-TX" ‖ genesis_hash ‖ tx bytes); other formats sign with their native scheme over that same digest. Binding the genesis hash in is what makes a signature valid on exactly one network. Signing the bare SHA3-256 of the tx bytes is signing version 1 and is refused.

Payments & escrow

TypeNameBodyNotes
1SendZBCamount(8)Recipient in envelope. Escrow + on-chain message (optionally encrypted ZBC→ZBC) supported.
6LiquidPaymentamount(8) · complete_minutes(8) · [token_id(8)] · [fee_in_token(1)]Vests linearly to the recipient over the period; recipient claims as it vests. Token streams append token_id last.
262LiquidPaymentStoptx_id(8)Sender stops the stream; unvested remainder returns.
4ApprovalEscrowaction(u32: 0=approve, 1=reject) · escrow_tx_id(8)Signed by the named approver; approve releases to the recipient, reject returns to the sender. On timeout the chain auto-resolves.
260EscrowRequesttoken_id(8) · amount(8) · approver(typed) · timeout(8) · commission(8) · instruction(lp4)Envelope recipient = the payer. Receiver-side escrow: the payer funds it from To-do.
15CreateTriggerfire_height(8) · amount(8)Envelope recipient = beneficiary. Locks now, pays at the block height.
16CancelTriggertrigger_id(8)Refunds the locked amount to the owner.

Scheduler

TypeNameBodyNotes
29ScheduledTransfertoken_id(8) · per_fire(8) · interval_s(8) · fires(u32) · cliff_s(8) · funding_mode(1) · cancel_policy(1) · end_time(8) · reserved(1)funding_mode 0 = Vesting (total pre-locked), 1 = Recurring (pull at fire). cancel_policy 0 = revocable. 1–520 tranches.
30CancelScheduleschedule_id(8)Sender revoke (if revocable) or recipient decline; unfired remainder returns.
31ReassignScheduleschedule_id(8) · new_recipient(typed)Current recipient only.

Messages & data

TypeNameBodyNotes
3SetupAccountDatasetprop_len(u32) · prop · val_len(u32) · valChat messages, invoices, forms, polls, notary anchors, profile fields. Max 4,096 bytes per entry; storage rent applies.
259RemoveAccountDatasetsame layoutMust match account + property + value exactly.
9FundStorageamount(8)Prepays your account's dataset rent.
40StoreFilefile_root(32) · total_size(8) · piece_size(u32) · deposit(8) · piece_count(u32) · piece_ids(32×n)Anchors a DFS upload; deposit ≥ 0.01 ZBC; root must match the pieces.
42TransferDatasetobject_id(32) · new_owner(typed 36)Two-step ownership transfer (offer).
43SetDatasetPolicyobject_id(32) · mode(1) · n_add(1)+adds · n_remove(1)+removesAccess-control lists (max 255 per change).
44AcceptDatasetobject_id(32)Recipient accepts a transfer offer.
45DeleteDatasetobject_id(32)Owner deletes the object.

object_id = the creating transaction's hash (ZTX_/64-hex). Longevity top-ups are plain SendZBC to the object's ZBS_ deposit address (account type 10) and can be escrowed.

Tokens (colored coins)

TypeNameBodyNotes
10IssueTokendecimals(1) · flags(1) · supply(8) · backing(8) · sym(lp2) · name(lp2)Flags: redeemable, mintable. SVG icon + description ride in the message (≤ 6,144 B).
11TransferTokentoken_id(8) · amount(8) · fee_in_token(1)Escrowable; under escrow the fee must be ZBC (fee_in_token forced 0).
12MintTokentoken_id(8) · add_supply(8) · add_backing(8)Issuer only; keeps unit value constant.
13BurnTokentoken_id(8) · amount(8)Redeemable tokens return your share of backing.
14FinanceTokentoken_id(8) · amount(8)Tops up the token's survival rent.

Trading

TypeNameBodyNotes
18CreateSwapOffergive_token(8) · give_amt(8) · want_token(8) · want_amt(8) · expiry(8; 0=GTC) · [counterparty(36)]Locks the give-side. Counterparty makes it a reserved offer.
19AcceptSwapOfferoffer_id(8)Atomic swap: want-side taker→maker, held give-side→taker.
20CancelSwapOfferoffer_id(8)Maker only; refunds the hold.
21CreateMarketbase_token(8) · quote_token(8) · deposit(8)Order-book market; deposit is ZBC rent.
22PlaceOrdermarket_id(8) · side(1) · price(8, ×1e8) · amount(8, base) · flags(1: bit0 market, bit1 post-only) · expiry(8)side 0 = buy base, 1 = sell.
23CancelOrderorder_id(8)Owner only; refunds unfilled remainder.

Apps

TypeNameBodyNotes
24CreateAppapp_type(1) · stake_token(8) · stake_amount(8) · seats(1) · params(lp2) · [opponent(36)] · [channel(1)]Stake in base units. Seats: 1 solo, 2 duel, 3+ party. Opponent addresses the envelope so the invite shows in their stream. channel=1 = fast mode (2 seats only).
25JoinAppapp_id(8)Locks the joiner's stake.
26AppMoveapp_id(8) · move(lp2)One move = one tx; the node's app VM re-validates.
27ResignAppapp_id(8)Stake to the opponent.
28ClaimTimeoutapp_id(8)Win if the opponent abandoned past the per-move deadline.
39SettleAppapp_id(8) · final_seq(u32) · move_count(u32) · [seat(1)·move(lp2)·sig(64)]*Fast-mode settlement: the chain replays the signed vouchers and adjudicates.

Node & infrastructure

TypeNameBodyNotes
2NodeRegistrationnode_pub(32) · owner(36) · locked(8) · POOWN(136)Min 1 ZBC locked. POOWN = owner‖blockhash‖height(72) + node ed25519 sig(64) over it, from a fresh block.
514RemoveNodenode_pub(32)Releases the locked balance.
258UpdateNodenode_pub(32) · locked(8) · POOWN(136)Stake may only stay or increase.
770ClaimNodenode_pub(32) · POOWN(136)Re-assigns ownership to the signer.
36RegisterGatewaygw_key(32) · domain(lp4) · url(lp4)Locks a protocol-fixed 10 ZBC stake.
37GatewayHeartbeatgw_key(32)Liveness beat; keeps the record from pruning.
38UnregisterGatewaygw_key(32)Refunds the 10 ZBC stake.
46 / 47Register / UnregisterArchivalnode_pub(32) [· domain(lp4) · url(lp4)]No stake, fee only. Owner-signed.
48 / 49Register / UnregisterRelayrelay_key(32) [· gw_key(32) · domain(lp4) · url(lp4)]Discovery record; the off-chain certificate still authenticates.

Governance & policy

TypeNameBodyNotes
7FeeVoteCommitvote_hash(32)SHA3-256 of FeeVoteInfo (blockhash‖height‖feeVote); vote kept locally for reveal. 1.0× ↔ feeVote 10000.
263FeeVoteRevealFeeVoteInfo(44) · sig_len(u32=64) · voter_sig(64)Raw ed25519 over the info. Median applied, clamped 0.5×–2.0×/period.
5MultisigRegistrationver(u32) · min_sigs(u32) · nonce(u64) · n(u32) · sorted participants · 0 · 0Address = ZBC encoding of SHA3-256 over the canonical participant set.
50SetTransactPolicymask(u16)Bit i set = account opts out of category i (bits 0–8, see §5.7). Self-signed only; enforced bidirectionally by every node.

13. Troubleshooting


14. Glossary