Skip to main content

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.

Read this page as Markdown