Development & releases
Source builds need Go 1.26 (toolchain 1.26.7) and a C compiler, because the SDK's transitive go-zenon/secp256k1 dependency requires CGO. macOS is supported for source-based development; prebuilt releases target Linux amd64 and arm64.
make build
make test # Go race detector, local mock RPC servers
make vet
make lint # golangci-lint v2.13.1 or compatible
sh scripts/test-install.sh
The Makefile disables a parent go.work. Tests cover reconciliation, native
znnd wallet compatibility, signed embedded votes and PoW, project/phase paging,
manual same-value overrides, restart recovery, interruption of copy preparation,
waiting for pending copies, phase-payout replacement, participation ranking and
shuffling, unanswered-request filtering, and installer checksum failure. The
installer tests also exercise a piped installation in a pseudo-terminal to verify
automatic menu launch and its opt-out. No operator credentials are used in tests.
Pushing a version tag runs the release workflow: tests and lint on Linux, static CGO builds for amd64 and arm64, smoke tests on both (arm64 via QEMU), archive/checksum creation and a draft GitHub release. Publish that draft only after the build and asset checks pass.
Live mainnet/testnet acceptance remains separate. Before operating with real
votes, run check and review dry-run output on the intended node. On an isolated
testnet, verify project yes→no copying, same-value manual takeover, a manual vote
while copying, phase-payout copying/manual override and a phase revision. No
live voting acceptance is implied by the offline tests.
The copy-delay tests use a controlled clock and mock votes to cover project and phase timing, restart recovery, changed or withdrawn source votes, round resets, closed requests, manual overrides, dry-run behavior, and live setting changes. They never wait real minutes or submit real votes.