Thanks for your interest. NeoVest is a small project — most contributions
take the form of bug fixes, documentation improvements, or follow-ups from
ROADMAP.md.
- Small, focused changes. Contract changes affect bytecode; even whitespace-only edits change the deployed hash, so reviewers want to see the smallest possible diff for any contract change.
- Tests with every contract change. The test suite in
contract/src/testcovers everyHelper.abort()site. Add coverage for new branches; don't loosen existing tests. - No new dependencies in the contract. The Java side uses only the neow3j devpack. Any new import needs an explicit reason.
- No new privileged role. The contract has exactly one privileged role
(
owner) by design. Adding admin functions, pausability, or upgradeability would compromise the trust model — those changes will be declined.
- Fork and create a branch from
main. Branch naming:fix/...,feat/...,docs/.... - Run the tests locally:
Both must pass before opening a PR.
./gradlew :contract:test cd ui && npx tsc -b && npm run lint - Write a focused commit message. Conventional Commits prefix:
feat,fix,docs,refactor,test,chore. Keep the subject under 72 characters; the body explains why if non-obvious. - Open a PR against
main. Describe what changed, why, and how you verified it. Link any related issue or roadmap item.
PRs need at least one approving review before merge. Maintainers may push small style tweaks to your branch directly to keep the queue moving.
The full local-development walkthrough — including a Docker-based private
Neo3 net for end-to-end testing — is in docs/LOCAL.md.
Quick orientation:
./gradlew :contract:test # contract unit + integration tests
./gradlew :contract:neow3jCompile # produces NEF + manifest under build/
cd ui && npm install && npm run dev
The UI's predev hook auto-bundles the latest compiled NEF into the build,
so the in-browser deploy path always matches what you compiled.
Open an issue with:
- What you expected to happen.
- What actually happened.
- A minimal reproduction (network, contract hash, steps).
- Browser console output if it's a UI bug; relevant
application logexcerpt if it's a contract issue.
Do not open a public issue for security vulnerabilities. See
docs/SECURITY.md for responsible-disclosure
instructions.
- TypeScript: the existing code style (no semicolons in JSX, single
quotes, trailing commas) —
npm run lintenforces it. - Java: the neow3j devpack style; 4-space indent;
Helper.abort("VV: ...")for every revert path so error messages are greppable. - Comments: explain why something is non-obvious. Don't restate what the code already says.
Be respectful. Disagreements about technical direction are expected; personal attacks or hostility are not. Report misconduct to the maintainers privately.