Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,36 @@ standalone JSON-RPC client.
- File-based logging so output does not corrupt the terminal display, written to the
platform log directory by default (overridable with `--log-file`).
- Fluent-based localization.
- Ironwood pool support (Zallet v0.1.0-beta.2 / NU6.3): an Ironwood column in the
Balances view, and a notice flagging at-risk funds remaining in the sealed Orchard
pool.
- Sending via `z_sendfromaccount`: spends from the account UUID with an explicit fund
source selector (Orchard + Ironwood / Sapling / Transparent) and reports the broadcast
txids directly. `z_sendmany` remains only for ZIP 320 (TEX) recipients.
- A hint appended to privacy-policy send rejections, explaining that spending sealed
Orchard funds crosses into Ironwood and needs `AllowRevealedAmounts` or weaker.
- Cookie-file authentication (`--cookie-file` / `cookie_file`), using the `.cookie`
credential Zallet writes into its data directory on startup.
- `check` subcommand that queries the server's `rpc.discover` schema and reports any RPC
method the TUI needs that the server does not expose.
- Block datetimes (RFC 3339) in the transaction detail pane, falling back to the raw
Unix timestamp for older servers.

### Changed

- The TUI now targets Zallet v0.1.0-beta.2: the `z_getbalances` response models the
regular/coinbase transparent split (previously any account with transparent funds
failed to deserialize and broke the Balances view) and the `ironwood` pool.
- Zallet's global sync lock errors (`-10` catching up, `-2` reorg recovery) are treated
as the existing "still syncing" state instead of surfacing as error toasts, and the
new `getwalletstatus.locked` field is checked before submitting a send.
- `z_listtransactions` failures are shown in the Transactions view instead of being
silently swallowed as an empty list.
- Connection flags are global, so they may be given after a subcommand.

### Fixed

- Send operations are collected with `z_getoperationresult` once finished, so they no
longer accumulate in (and eventually overflow) Zallet's bounded operation queue; an
opid the wallet no longer tracks stops the polling loop instead of spinning forever.
- The README's example RPC port and username now match the built-in defaults.
33 changes: 29 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ wallet in the TUI. It assumes you have both `zallet` and `zallet-tui` installed.

```toml
[rpc]
bind = ["127.0.0.1:28232"]
bind = ["127.0.0.1:8232"]

[[rpc.auth]]
user = "zallet-tui"
Expand All @@ -35,15 +35,20 @@ wallet in the TUI. It assumes you have both `zallet` and `zallet-tui` installed.
Note the username and the password you chose (NOT the pwhash); `zallet-tui`
needs the plaintext to authenticate.

Alternatively, skip creating an RPC user: Zallet writes a fresh `.cookie` credential
file into its data directory on every startup, and `zallet-tui --cookie-file
<datadir>/.cookie` (or `cookie_file` in `zallet-tui.toml`) authenticates with it
directly.

2. **Give `zallet-tui` matching credentials and the RPC URL.** Generate a starter config
with `zallet-tui generate-config`, then edit it so `rpc_url` matches the `[rpc] bind`
address above and the `[[auth]]` user/password match what you configured in step 1:

```toml
rpc_url = "http://127.0.0.1:28232"
rpc_url = "http://127.0.0.1:8232"

[[auth]]
user = "zallet"
user = "zallet-tui"
password = "the-password-you-used-in-step-1"
```

Expand Down Expand Up @@ -74,7 +79,27 @@ wallet in the TUI. It assumes you have both `zallet` and `zallet-tui` installed.
transactions, and sending become available.

If the wallet is still syncing when you launch, the dashboard shows the sync progress;
balances and history populate once it catches up.
balances and history populate once it catches up. (Newer Zallet releases refuse balance
and spend calls entirely while far behind the chain tip; the TUI shows this as the same
syncing state.)

## Compatibility

`zallet-tui` targets Zallet v0.1.0-beta.2 or later. Zallet's JSON-RPC surface is still
pre-1.0 and changes between releases; after upgrading Zallet, run

```sh
zallet-tui check
```

to verify that the server still exposes every RPC method the TUI uses.

Since the NU6.3 network upgrade ("Ironwood", July 2026), the Orchard shielded pool is
sealed and a new Ironwood pool receives funds sent to Orchard receivers. The TUI shows
Ironwood as its own balance column, flags remaining (at-risk) Orchard funds, and sends
with an explicit fund source — note that moving sealed Orchard funds crosses into
Ironwood, which publicly reveals the crossing amount and therefore requires the
`AllowRevealedAmounts` privacy policy or weaker.

## Usage

Expand Down
16 changes: 16 additions & 0 deletions i18n/en-US/zallet_tui.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ tui-toast-account-created = Created account '{$name}'
tui-toast-send-completed = Send completed
tui-toast-send-cancelled = Send cancelled
tui-err-send-failed = Send failed: {$error}
tui-err-send-op-lost = Operation {$opid} is no longer tracked by the wallet; check the Transactions view for the outcome.
tui-err-unknown = unknown error

# Logs view (toasts / placeholders)
Expand Down Expand Up @@ -163,15 +164,18 @@ tui-bal-header-account = Account
tui-bal-header-transparent = Transparent
tui-bal-header-sapling = Sapling
tui-bal-header-orchard = Orchard
tui-bal-header-ironwood = Ironwood
tui-bal-header-pending = Pending
tui-bal-header-total = Total
tui-bal-title = Balances (minconf = {$minconf} [+/-] to change)
tui-bal-orchard-sealed = ⚠ The Orchard pool is sealed (NU6.3): these funds can only move to your own Ironwood pool, and the crossing amount is public (needs the AllowRevealedAmounts policy).
tui-bal-syncing = Balances are not available yet — the wallet is still syncing.
tui-bal-empty = No balances to display.

# Transactions view
tui-tx-title = Transactions (page {$page}, [ / ] to page · experimental)
tui-tx-empty = No transactions to display.
tui-tx-error = Could not load transactions (z_listtransactions is experimental): {$error}
tui-tx-unmined = unmined
tui-tx-detail-title = Detail
tui-tx-field-txid = txid
Expand All @@ -186,14 +190,24 @@ tui-tx-select = Select a transaction.
# Send view
tui-send-cancelled = Send cancelled
tui-send-err-no-accounts = No accounts available to send from
tui-send-err-syncing = Wallet is still catching up to the chain tip; sending is unavailable until it is synced
tui-send-err-no-source = Select a source account
tui-send-err-no-spendable = Selected account has no spendable address
tui-send-err-recipient-required = Recipient address is required
tui-send-err-amount-required = Amount is required
tui-send-err-amount-nan = Amount must be a number
tui-send-err-no-source-selected = No source account selected
tui-send-submitted = Submitted (op {$opid})
tui-send-err-in-flight = A send is already in progress; wait for it to finish
tui-toast-send-started = Send submitted; building and proving the transaction…
tui-err-send-task-failed = The send task ended unexpectedly; check the Transactions view for the outcome.
tui-send-sending = Sending…
tui-send-sending-hint = Building, proving, and broadcasting can take a while; the wallet confirms when done.
tui-send-from = From
tui-send-fund-source = Funds
tui-send-fund-orchard = Shielded (Orchard + Ironwood)
tui-send-fund-sapling = Shielded (Sapling)
tui-send-fund-transparent = Transparent
tui-send-to = To
tui-send-amount = Amount (ZEC)
tui-send-memo = Memo
Expand All @@ -202,6 +216,7 @@ tui-send-review = [ Review & send ]
tui-send-no-spendable-suffix = (no spendable address)
tui-send-fees-note = Fees are computed automatically (ZIP-317).
tui-send-privacy-warning = ⚠ This policy reduces privacy. Only proceed if you understand the implications.
tui-send-policy-hint = Tip: since NU6.3, spending sealed Orchard funds crosses into Ironwood and reveals the amount — select AllowRevealedAmounts (or weaker) in the Privacy policy field to allow it.
tui-send-hint-editing = EDITING — type to enter text · Enter/Esc to finish
tui-send-hint-text = ↑↓ move · Enter to edit this field · Esc to tabs
tui-send-hint-submit = ↑↓ move · Enter to review & send · Esc to tabs
Expand All @@ -210,6 +225,7 @@ tui-send-title = Send
tui-send-operation-title = Operation
tui-send-confirm = Confirm send?
tui-send-confirm-summary = {$amount} ZEC from {$from} → {$to}
tui-send-confirm-tex = TEX recipient (ZIP 320): sent from the account's address via z_sendmany; the Funds selection does not apply.
tui-send-confirm-hint = [y] yes [n] no
tui-send-queued = queued
tui-send-operation = Operation {$opid}
Expand Down
Loading
Loading