refactor: default stack is Zebra + Zallet, Zaino behind an indexer profile#51
Merged
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates Z3’s Docker Compose “default topology” to run Zebra + Zallet by default, and moves the standalone Zaino indexer behind an opt-in indexer profile (similar to the existing monitoring profile). It also bumps the platform contract to 2.0.0 to reflect the breaking change in the always-on service set.
Changes:
- Gate Zaino (DNS, volumes, ports, healthcheck, env vars) behind the
indexerCompose profile and bump the platform contract to2.0.0. - Update image pins (Zebra
6.0.0-rc.0; Zallet now multi-arch and pinned by digest) and adjust Compose behavior accordingly. - Refresh contract validation, CI smoke coverage, and operator docs to reflect the new default topology and profile usage.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| z3-contract.yaml | Bumps contract version and marks Zaino identifiers as profile: indexer. |
| z3-contract.schema.json | Adds indexer to the allowed profile enum. |
| scripts/vendor.sh | Updates vendored refs for Zebra and Zaino. |
| scripts/validate-contract.py | Renders Compose with profiles enabled for contract checks; adds assertions that the default topology excludes indexer-gated identifiers. |
| scripts/regtest-init.sh | Ensures teardown stops profile-gated services; adjusts wallet volume initialization behavior. |
| README.md | Updates quickstart, stop/wipe instructions, and adds an indexer profile section and caveats. |
| docs/regtest.md | Updates regtest guide for the new default topology and indexer profile usage. |
| docs/integrations/lightwalletd-client.md | Makes indexer profile requirement explicit for lightwalletd-style consumers. |
| docs/integrations/host-side-pointer.md | Annotates Zaino ports as indexer-profile-only. |
| docs/integrations/compose-peer.md | Updates in-network matrix labeling for indexer-profile-only Zaino. |
| docs/faq.md | Updates operational guidance; adds FAQ on tracking Zebra latest via local env overrides. |
| docs/docker-architecture.md | Updates architecture description and pinning guidance. |
| docs/contract.md | Updates contract version and documents profile-gated DNS behavior. |
| docker-compose.yml | Makes Zaino opt-in via profiles: [indexer]; bumps Zebra pin; pins Zallet by digest and removes its platform pin. |
| docker-compose.regtest.yml | Aligns regtest overlay with the updated Zaino JSON-RPC bind configuration approach. |
| .github/workflows/ci.yaml | Adds --profile indexer config checks; updates regtest smoke to focus on Zallet + rpc-router; ensures teardown stops profiled services. |
| .env.example | Updates documented pins and notes to match the new defaults and profile gating. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
0bb8f29 to
39a8676
Compare
Most operators run a node and a wallet together; a standalone indexer only serves explorers, faucets, and light-client backends. Zaino moves behind the opt-in `indexer` Compose profile, so the default `up -d` starts Zebra and Zallet only. The common deployment stops paying for a component it does not use. Zebra defaults to 6.0.0-rc.0, the newest published image. Zallet's upstream image is now multi-arch, so its amd64 platform pin is dropped and it runs native on arm64. The platform contract bumps to 2.0.0: Zaino's DNS, per-network volumes, gRPC/JSON-RPC ports, healthcheck, and Z3_ZAINO_* vars are gated on the indexer profile, and the contract validator renders with the profile enabled so they still verify. The pinned zainod 0.5.1 cannot yet parse Zebra 6 RPC responses (valuePools gained the ironwood pool). The indexer profile needs Z3_ZEBRA_IMAGE overridden to a 5.2-era Zebra until upstream adds Ironwood support.
39a8676 to
04f86a7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The default
docker compose up -dnow starts Zebra and Zallet only. Zaino moves behind an opt-inindexerCompose profile, alongsidemonitoring.Most operators need a node and a wallet together. A standalone indexer is a narrower case: block explorers, faucets, light-client backends. Gating Zaino on
--profile indexermatches howmonitoringworks and how the earlier zcashd comparator was scoped, so the common deployment stops paying for a component it does not use.Two pins move with it. Zebra defaults to
6.0.0-rc.0, the newest published image. Zallet's upstream image is now multi-arch, so itslinux/amd64pin is dropped and it runs native on arm64.The platform contract bumps to 2.0.0: a service leaves the default topology. Zaino's DNS, per-network volumes, gRPC/JSON-RPC ports, healthcheck, and
Z3_ZAINO_*vars are taggedprofile: indexer, and the contract validator renders with the profile enabled so they still verify.Reviewer scope note: the pinned
zainod 0.5.1cannot yet parse Zebra 6 RPC responses (valuePoolsgained theironwoodpool, and its fetch backend expects a fixed five). The indexer profile needsZ3_ZEBRA_IMAGEoverridden to a 5.2-era Zebra until upstream adds Ironwood support; the README indexer section and the lightwalletd integration guide say so.