Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
1ec12b7
feat: initial project structure
alchemydc Apr 8, 2025
c5e7a21
docs: add detailed product context and user experience goals
alchemydc Apr 8, 2025
f6bc77b
docs: enhance project documentation with context and tooling
alchemydc Apr 9, 2025
642fb76
chore(deps): update zaino and zebra submodules
alchemydc Apr 9, 2025
204aa56
docs: update documentation navigation links
alchemydc Apr 9, 2025
daddc0c
chore(deps): add zcashd reference implementation as submodule
alchemydc Apr 9, 2025
960abad
docs: update RPC method documentation links
alchemydc Apr 9, 2025
aafcaf4
chore(deps): update zebra and zaino submodules
alchemydc Apr 9, 2025
ddb91ad
docs: improve RPC method documentation formatting
alchemydc Apr 9, 2025
63b85a9
chore(deps): update zallet submodule to latest main
alchemydc Apr 9, 2025
a9a069b
docs: minor updates and cleanup
alchemydc Apr 10, 2025
0026b7d
docs: add more context re: block explorer use case
alchemydc Apr 10, 2025
9d4cec3
docs(memory-bank): document Docker orchestration findings
alchemydc Apr 17, 2025
9da0f38
chore(submodules): Update zebra, zaino, and zallet submodules to late…
alchemydc Apr 17, 2025
342b035
chore: update deps.
alchemydc May 6, 2025
af218a1
docs(memory-bank): linted technology context and introduce Z3 interpl…
gustavovalverde May 14, 2025
5b96dd4
feat(workflows): add GitHub Actions workflows for building Z3 Docker …
gustavovalverde May 14, 2025
144369b
fix(workflows): correct file extension in GitHub Actions workflow paths
gustavovalverde May 14, 2025
3f98fd0
chore(workflows): change to a forked zaino repo
gustavovalverde May 14, 2025
062c6f4
chore(workflows): fix permissions issue
gustavovalverde May 14, 2025
c00ea16
chore(workflows): fix permissions and cache
gustavovalverde May 14, 2025
7f5c7cf
test: try to build without a repo
gustavovalverde May 14, 2025
572c210
feat(workflows): add zallet Docker build job
gustavovalverde May 15, 2025
23a023b
fix(workflows): update Dockerfile path in build-z3-images workflow
gustavovalverde May 15, 2025
2f72d8f
docs: rename `memory-bank` to `docs`
gustavovalverde May 15, 2025
47a918a
docs: move some docs to memory-bank
gustavovalverde May 15, 2025
db63c82
feat(docker): establish comprehensive Z3 Docker Compose setup and gui…
gustavovalverde May 20, 2025
d7f1d97
refactor: modernize Z3 stack with upstream repos and Zebra health che…
gustavovalverde Oct 9, 2025
3d828ec
feat(docker): configuration and documentation for ARM64 support (#6)
gustavovalverde Nov 4, 2025
e4f9bd9
fix: `UID` and `GID` are read only variables in bash; use `OWNER_UID`…
alchemydc Nov 4, 2025
5b46076
chore(docker): update Docker images and docs
gustavovalverde Nov 4, 2025
a9f82aa
fix(docker): pin submodules to pre-config-restructure versions for co…
gustavovalverde Nov 28, 2025
417b679
fix(docker): resolve zallet permission error by relocating config mou…
devdotbo Dec 12, 2025
64bb4e0
feat(docker): update to latest zaino and official zallet image (#12)
gustavovalverde Jan 29, 2026
35d1adf
feat(docker): add monitoring stack with Prometheus, Grafana, Jaeger, …
gustavovalverde Feb 12, 2026
65cce4c
Bump zallet to latest main (757876b)
oxarbitrage Mar 6, 2026
0a313ee
Merge pull request #18 from ZcashFoundation/bump-zallet
alchemydc Mar 9, 2026
9d41091
add `rpc-router`
oxarbitrage Mar 6, 2026
4089b0d
feat: security and usabiity improvements
Mar 10, 2026
0164cab
Merge pull request #19 from ZcashFoundation/openrpc-router
alchemydc Mar 10, 2026
0565e55
chore(deps): bump rustls-webpki from 0.103.9 to 0.103.10 in /rpc-router
dependabot[bot] Mar 21, 2026
fac7a05
Merge pull request #23 from ZcashFoundation/dependabot/cargo/rpc-rout…
oxarbitrage Mar 24, 2026
4912e3a
Ignore docker compose override file (#16)
jenkin Mar 25, 2026
83e41d7
refactor(docker): redesign compose, bump applications and add regtest…
oxarbitrage Mar 28, 2026
fc11393
fix(docker): bump submodules and images, fix zaino start command (#29)
gustavovalverde Apr 7, 2026
141ec4f
ci: add PR validation, smoke tests, and workflow security hardening (…
gustavovalverde Apr 7, 2026
95d5968
fix: gitignore mutable zallet configs to prevent git pull conflicts
gustavovalverde Apr 7, 2026
7e8a261
feat: add optional zcashd compose profile
gustavovalverde Apr 23, 2026
b7bdc03
chore: update zebra image default to 4.3.1
gustavovalverde Apr 23, 2026
b0f4f43
fix: align zcashd profile with v6.12.1
gustavovalverde Apr 25, 2026
55eace9
Merge pull request #33 from ZcashFoundation/feat/optional-zcashd-profile
alchemydc Apr 28, 2026
567a9b4
ci: switch push triggers from dev to main
alchemydc May 30, 2026
e9b93e6
ci: pass RUST_VERSION build-arg when building zaino
alchemydc May 30, 2026
eeb5e03
ci: pass inputs as env to silence zizmor template-injection
alchemydc May 30, 2026
ad77d76
Merge pull request #39 from ZcashFoundation/ci/main-default-branch
alchemydc May 30, 2026
5a8f28e
Merge pull request #31 from ZcashFoundation/fix/gitignore-mutable-con…
alchemydc May 30, 2026
6c081fd
ci: add cargo test job for rpc-router
alchemydc May 30, 2026
d308005
Merge pull request #40 from alchemydc/ci/rpc-router-tests
alchemydc May 30, 2026
4b9072a
chore(deps): bump rustls-webpki from 0.103.10 to 0.103.13 in /rpc-rou…
dependabot[bot] May 30, 2026
45ec0c3
chore(deps): bump openssl from 0.10.75 to 0.10.80 in /rpc-router (#38)
dependabot[bot] May 30, 2026
97e7b91
chore: bump default zebra to latest (v5.0.0) (#41)
alchemydc Jun 4, 2026
dd84312
feat: platform contract, per-network Compose projects, and integratio…
gustavovalverde Jun 10, 2026
dfb9d0e
refactor: drop git submodules and the orphaned image-mirror CI (#45)
gustavovalverde Jun 10, 2026
1e7d989
fix: make Zallet config readable by the container uid (1000)
alchemydc Jun 17, 2026
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
95 changes: 95 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Z3 environment variable reference.
#
# Pick a network and start the stack:
# docker compose --env-file .env.mainnet up -d
# docker compose --env-file .env.testnet up -d
# docker compose --env-file .env.regtest up -d
#
# Every line below is a commented-out override with its default value. Copy
# this file to .env (or any file you load with --env-file) and uncomment only
# the lines you want to change. See z3-contract.yaml for the env-var schema.
#
# Naming convention: Z3_* variables configure stack-level settings such as
# host ports, image pins, and volume paths. Native service variables
# (ZEBRA_*, ZAINO_*, GF_*) pass through unchanged.

# Network selection (set by the .env.<network> files; rarely overridden)
# COMPOSE_PROJECT_NAME=z3-mainnet
# Z3_NETWORK=Mainnet
# Z3_CONFIG_DIR=./config/mainnet

# Image pins. Defaults live in docker-compose.yml as ${VAR:-tag} fallbacks;
# override per pin here to test a pre-release or pin a digest.
# Z3_ZEBRA_IMAGE=zfnd/zebra:5.0.0
# Z3_ZAINO_IMAGE=zingodevops/zainod:0.4.0-rc.2
# Z3_ZALLET_IMAGE=electriccoinco/zallet:v0.1.0-alpha.3
# Z3_ZEBRA_BUILD_FEATURES=default-release-binaries

# Platform pin. Zebra is multi-arch and selects the host arch automatically.
# Zaino and Zallet are pinned to amd64 in compose because their upstream
# images publish amd64 only; setting DOCKER_PLATFORM=linux/arm64 with the
# opt-in build overlay (docker-compose.build.yml) builds them native arm64.
# DOCKER_PLATFORM=linux/arm64

# Host ports (mainnet defaults; .env.testnet and .env.regtest override them)
# Z3_ZEBRA_HOST_RPC_PORT=8232
# Z3_ZEBRA_HOST_P2P_PORT=8233
# Z3_ZEBRA_HOST_HEALTH_PORT=8080
# Z3_ZAINO_HOST_GRPC_PORT=8137
# Z3_ZAINO_HOST_JSON_RPC_PORT=8237
# Z3_ZALLET_HOST_RPC_PORT=28232

# Zebra container ports (vary per network)
# Z3_ZEBRA_RPC_PORT=8232
# Z3_ZEBRA_P2P_PORT=8233

# Data paths (default: Docker named volumes; override to a bind-mount path)
# Z3_CHAIN_DATA_PATH=/mnt/ssd/zebra-state
# Z3_ZAINO_DATA_PATH=/mnt/ssd/zaino-data
# Z3_ZALLET_DATA_PATH=/mnt/ssd/zallet-data
# Z3_COOKIE_PATH=cookie

# Log levels.
# Per-service Z3_<SERVICE>_RUST_LOG wins; falls back to global RUST_LOG; falls
# back to a sensible per-service default. Setting `RUST_LOG=debug` in your
# shell or .env flips the whole stack to debug.
# Z3_ZEBRA_RUST_LOG=info
# Z3_ZAINO_RUST_LOG=info,reqwest=warn,hyper_util=warn
# Z3_ZALLET_RUST_LOG=info,hyper_util=warn,reqwest=warn
# RUST_BACKTRACE=full # Zaino reads this directly; default is full

# RPC router (regtest only)
# Z3_REGTEST_RPC_ROUTER_USER=zebra
# Z3_REGTEST_RPC_ROUTER_PASSWORD=zebra
# Z3_REGTEST_RPC_ROUTER_HOST_PORT=8181

# Zebra configuration overrides (native config-rs)
# Advertise a reachable address to peers when behind NAT or a firewall, so
# inbound p2p works (forward the published p2p host port to this host).
# ZEBRA_NETWORK__EXTERNAL_ADDR=203.0.113.10:8233
# ZEBRA_RPC__ENABLE_COOKIE_AUTH=true
# ZEBRA_HEALTH__MIN_CONNECTED_PEERS=1
# ZEBRA_HEALTH__READY_MAX_BLOCKS_BEHIND=2
# ZEBRA_HEALTH__ENFORCE_ON_TEST_NETWORKS=false
# ZEBRA_TRACING__FILTER=info
# Miner address shape depends on the network: tm* for regtest/testnet,
# t1*/t3*/u1* for mainnet. Required for regtest mining.
# ZEBRA_MINING__MINER_ADDRESS=tmSRd1r8gs77Ja67Fw1JcdoXytxsyrLTPJm

# Monitoring (enable with --profile monitoring; Zebra metrics are on by default)
# Z3_PROMETHEUS_PORT=9094
# Z3_GRAFANA_PORT=3000
# GF_SECURITY_ADMIN_PASSWORD=admin
# Z3_JAEGER_UI_PORT=16686
# Z3_ALERTMANAGER_PORT=9093
# Z3_JAEGER_OTLP_GRPC_PORT=4317
# Z3_JAEGER_OTLP_HTTP_PORT=4318
# Z3_JAEGER_SPANMETRICS_PORT=8889
# ZEBRA_METRICS__ENDPOINT_ADDR=0.0.0.0:9999

# OpenTelemetry tracing. The monitoring profile starts Jaeger, but Zebra only
# exports spans when these vars are set. The default Zebra build features include
# opentelemetry; keep that feature if you override Z3_ZEBRA_BUILD_FEATURES.
# ZEBRA_TRACING__OPENTELEMETRY_ENDPOINT=http://jaeger:4318
# ZEBRA_TRACING__OPENTELEMETRY_SERVICE_NAME=zebra
# ZEBRA_TRACING__OPENTELEMETRY_SAMPLE_PERCENT=100
12 changes: 12 additions & 0 deletions .env.mainnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Z3 mainnet environment.
#
# Usage:
# docker compose --env-file .env.mainnet up -d
#
# Sets the Compose project name, network selection, and config directory for
# the mainnet stack. docker-compose.yml defaults are already mainnet-shaped
# (Zebra ports 8232 RPC and 8233 p2p), so no port overrides are needed here.

COMPOSE_PROJECT_NAME=z3-mainnet
Z3_NETWORK=Mainnet
Z3_CONFIG_DIR=./config/mainnet
48 changes: 48 additions & 0 deletions .env.regtest
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Z3 regtest environment.
#
# Usage:
# docker compose --env-file .env.regtest up -d
# ./scripts/regtest-init.sh (first time, to generate keys + mine block 1)
#
# COMPOSE_FILE merges the regtest overlay on top of the base compose. It does
# NOT reference an override file, so a fresh clone boots without running setup.
# Per-host overrides are opt-in: create docker-compose.regtest.override.yml and
# append it to COMPOSE_FILE (or pass it with -f) only if you need one.
# Regtest inherits Zebra's testnet container-port defaults. Host ports are
# explicit and globally unique so all three networks can coexist.
# Cookie auth is disabled; Zaino and Zallet authenticate to Zebra via
# username/password configured in config/regtest/*.toml.

COMPOSE_PROJECT_NAME=z3-regtest
COMPOSE_FILE=docker-compose.yml:docker-compose.regtest.yml

Z3_NETWORK=Regtest
Z3_CONFIG_DIR=./config/regtest

ZEBRA_RPC__ENABLE_COOKIE_AUTH=false
ZEBRA_HEALTH__MIN_CONNECTED_PEERS=0
ZEBRA_MINING__MINER_ADDRESS=tmSRd1r8gs77Ja67Fw1JcdoXytxsyrLTPJm

# Zebra container ports (regtest inherits testnet defaults)
Z3_ZEBRA_RPC_PORT=18232

# Zebra host ports
Z3_ZEBRA_HOST_RPC_PORT=29232
Z3_ZEBRA_HOST_HEALTH_PORT=28080

# Zaino / Zallet host ports
Z3_ZAINO_HOST_GRPC_PORT=28137
Z3_ZAINO_HOST_JSON_RPC_PORT=28237
Z3_ZALLET_HOST_RPC_PORT=50232

# rpc-router host port (regtest-only unified Zebra+Zallet JSON-RPC)
Z3_REGTEST_RPC_ROUTER_HOST_PORT=8181

# Monitoring (only used with --profile monitoring)
Z3_PROMETHEUS_PORT=29094
Z3_GRAFANA_PORT=23000
Z3_JAEGER_UI_PORT=36686
Z3_JAEGER_OTLP_GRPC_PORT=25317
Z3_JAEGER_OTLP_HTTP_PORT=25318
Z3_JAEGER_SPANMETRICS_PORT=28889
Z3_ALERTMANAGER_PORT=29093
45 changes: 45 additions & 0 deletions .env.testnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Z3 testnet environment.
#
# Usage:
# docker compose --env-file .env.testnet up -d
#
# Container ports follow Zebra's testnet defaults (18232 RPC, 18233 p2p).
# Host ports for services without a per-network upstream convention (Zaino,
# Zallet, metrics) use a +10000 offset relative to mainnet so testnet and
# mainnet can run concurrently on the same host without port collisions.
#
# Testnet uses the base compose with the testnet values below; there is no
# testnet overlay. Per-host overrides are opt-in: create
# docker-compose.testnet.override.yml and load it explicitly with
# `-f docker-compose.yml -f docker-compose.testnet.override.yml`, or append it
# to COMPOSE_FILE in your operator-local .env.

COMPOSE_PROJECT_NAME=z3-testnet
COMPOSE_FILE=docker-compose.yml
Z3_NETWORK=Testnet
Z3_CONFIG_DIR=./config/testnet

ZEBRA_HEALTH__ENFORCE_ON_TEST_NETWORKS=true

# Zebra container ports (testnet defaults from zebra-chain/parameters/network.rs)
Z3_ZEBRA_RPC_PORT=18232
Z3_ZEBRA_P2P_PORT=18233

# Zebra host ports (match container; testnet ports do not collide with mainnet's)
Z3_ZEBRA_HOST_RPC_PORT=18232
Z3_ZEBRA_HOST_P2P_PORT=18233
Z3_ZEBRA_HOST_HEALTH_PORT=18080

# Zaino / Zallet host ports
Z3_ZAINO_HOST_GRPC_PORT=18137
Z3_ZAINO_HOST_JSON_RPC_PORT=18237
Z3_ZALLET_HOST_RPC_PORT=40232

# Monitoring (only used with --profile monitoring)
Z3_PROMETHEUS_PORT=19094
Z3_GRAFANA_PORT=13000
Z3_JAEGER_UI_PORT=26686
Z3_JAEGER_OTLP_GRPC_PORT=15317
Z3_JAEGER_OTLP_HTTP_PORT=15318
Z3_JAEGER_SPANMETRICS_PORT=18889
Z3_ALERTMANAGER_PORT=19093
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
groups:
github-actions:
patterns: ["*"]
cooldown:
default-days: 7
Loading
Loading