Vero Core Contracts is a Soroban smart contract that brings verifiable, on-chain GitHub PR tracking to the Stellar ecosystem. The Wave Program structures community contributions into focused sprint cycles. Maintainers open scoped issues; contributors pick them up, deliver, and earn recognition on-chain.
Each wave is a two-week sprint. At the start of a wave, maintainers triage the backlog and label issues with one of four priority tiers:
- P0 — Critical: security vulnerabilities, broken builds, data-loss bugs.
- P1 — High: correctness bugs, failing tests, missing auth checks.
- P2 — Medium: new features, storage optimisations, API improvements.
- P3 — Low: documentation, examples, developer-experience polish.
Contributors self-assign an issue by commenting /claim. Maintainers confirm within 24 hours. Work is submitted as a pull request referencing the issue number. The PR is then registered as a Task in the Vero contract itself — closing the loop between off-chain code review and on-chain verification.
- Auth bypass edge cases — ensure
require_authis called on every state-mutating entry point and that no code path can skip it. - Duplicate-key collisions — verify that
DataKeyvariants never alias across different storage namespaces. - TTL drift — confirm that
extend_ttlis called consistently so no guardian or task entry expires unexpectedly during a long-running sprint. - Integer overflow guards — audit
votes: u32increment paths for overflow on high-traffic tasks.
- Configurable vote threshold — replace the hardcoded
3with an admin-settable parameter stored underDataKey::Threshold. - Task expiry — add a
deadline: u64ledger field toTask; votes cast after the deadline are rejected. - Guardian removal — implement
remove_guardian(admin, guardian)with the same TTL-extension pattern asadd_guardian. - Batch registration — allow an admin to register multiple task IDs in a single transaction to reduce fee overhead.
- Event emission — fill
events.rswith structuredvote_castandtask_completedevents so indexers can track state transitions without reading storage directly.
- Inline rustdoc — add
///doc comments to every public function explaining parameters, errors, and side-effects. - Architecture diagram — extend the ASCII diagram in
README.mdto show the full lifecycle from PR open → guardian vote →is_doneflip. - Deployment guide — write a step-by-step
DEPLOY.mdcoveringsoroban contract deploy, environment variable setup, and testnet faucet usage. - Error reference — expand the error-codes table with recovery steps for each
ContractErrorvariant.
- Property-based tests — use
proptestor manual fuzz loops to verify thatvotesnever exceedsu32::MAXand thatis_doneis monotonically set (never unset once true). - Negative-path coverage — add tests for: unregistered task vote, re-registration of an existing task ID, and
get_taskon a missing ID. - Multi-contract integration — write an integration test that deploys two contract instances and verifies that guardian state does not leak between them.
- Gas benchmarks — measure ledger-entry reads/writes per call and document them so contributors can spot regressions.
- CI pipeline — extend
.github/workflows/ci.ymlto runcargo test,cargo clippy -- -D warnings, andcargo fmt --checkon every PR. - Devcontainer — update
.devcontainer/devcontainer.jsonto pre-installsoroban-cliand thewasm32-unknown-unknowntarget so contributors can start coding immediately. - Makefile — add
make build,make test, andmake deploy-testnettargets as convenience wrappers.
- Fork the repository and create a branch named
wave-N/<short-description>. - Keep PRs small and focused — one issue per PR.
- All new code must be covered by at least one test.
- Run
cargo fmtandcargo clippybefore opening a PR. - Reference the issue number in the PR title:
fix: prevent duplicate guardian keys (#12).
| Metric | Target per Wave |
|---|---|
| Issues closed | ≥ 5 |
| Test coverage delta | +5 % |
| Open P0/P1 issues at wave end | 0 |
| New contributors onboarded | ≥ 2 |
Apache-2.0 — contributions welcome.