A single, end-to-end workflow for local setup, branching, testing, and submitting a Pull Request.
This guide is the canonical “start here” for contributors working on NotifyChain.
- Browse open issues and pick one that matches your interests.
- If the issue has an assigned owner, wait until a maintainer assigns you.
- Do not open a PR for work that hasn’t been claimed/assigned.
- Rust (stable) with WebAssembly target:
rustup target add wasm32-unknown-unknown
- Stellar CLI:
cargo install --locked stellar-cli --features opt
- Node.js:
- Listener uses Node 20
- Dashboard uses Node 18
On Windows, you may need Visual Studio Build Tools with the “C++ build tools” workload for
sqlite3.
- Fork the repo, then clone your fork.
- Add the upstream remote.
- Sync before starting new work:
git checkout main
git fetch upstream
git merge upstream/main
git push origin maincd listener
npm install
cp .env.example .envUpdate listener/.env with at minimum:
STELLAR_RPC_URL=https://soroban-testnet.stellar.org:443
CONTRACT_ADDRESSES=[{"address":"YOUR_CONTRACT_ID","events":["*"]}]Initialize the database:
npm run migrateRun locally:
npm run devVerify:
curl http://localhost:8787/health
curl http://localhost:8787/api/eventscd dashboard
npm install
cp .env.example .envEnsure dashboard/.env points at your listener:
VITE_EVENTS_API_URL=http://localhost:8787/api/events
Run:
npm run devOpen: http://localhost:5173
Build AutoShare (contract workspace):
cd contract
stellar contract buildRun AutoShare contract tests:
cd contract/contracts/hello-world
cargo testRun TaskBounty contract tests (path includes space):
cd Documents/Task\ Bounty
cargo test- Always branch from an up-to-date
main:
git checkout main
git pull upstream main
git checkout -b <branch-name>- Use descriptive branch names:
feature/for new featuresfix/for bug fixesdocs/for documentationrefactor/for refactoringtest/for testschore/for maintenance
Examples:
feature/add-slack-notificationsfix/resolve-event-deduplication-bugdocs/update-contributing-guide
- Follow existing code style in each component directory (
listener/,dashboard/,contract/). - Add/update documentation when behavior changes.
- Add tests for any new logic or bug fix.
AutoShare:
cd contract/contracts/hello-world
cargo testTaskBounty:
cd Documents/Task\ Bounty
cargo testAlso ensure formatting is clean before PR:
cargo fmt --allFrom repo root:
cd listener
npm testRecommended (especially before PR):
npm run typecheck
npm run lintcd dashboard
npm test
npm run lint
npm run buildGitHub Actions typically validates:
- Listener:
npm run typecheck,npm test - Dashboard:
npm run lint,npm run build,npm test - Contracts:
cargo fmt -- --check,cargo test --workspace --all-features --verbose
Use clear, conventional commit messages:
feat:fix:docs:test:refactor:chore:
Example:
git commit -m "fix: resolve event parsing issue in listener"
git commit -m "test: add retry-scheduler unit coverage"
git push -u origin <branch-name>Match your commit-style convention, e.g.:
feat: add retry queue for notificationsfix: standardize error messages across contracts
Include:
- Overview: What does this PR change?
- Related Issue: Link(s) to the GitHub issue(s).
- Changes: What files/areas were modified.
- Verification Results: Exact tests/commands you ran.
- How to Test: Any manual steps beyond unit tests.
- Branch is up to date with
main - Tests added/updated and passing
- Local tests completed (listener/dashboard/contracts as applicable)
- Lint/format expectations satisfied
- Documentation updated if behavior changes
- Keep PR scope focused on the assigned issue.
- Address reviewer feedback promptly.
- Avoid mixing unrelated refactors with functional changes.
- CI runs automatically.
- Maintainers review code and tests.
- You may be asked for additional verification or fixes before merge.
# Listener
cd listener
npm install
npm run migrate
npm run typecheck
npm test
# Dashboard
cd dashboard
npm install
npm run lint
npm run build
npm test
# Contracts
cd contract/contracts/hello-world
cargo test