Thank you for your interest in contributing to NotifyChain! This document provides guidelines and instructions for contributing to the project.
Start here instead (recommended): CONTRIBUTOR_DEVELOPMENT_WORKFLOW_GUIDE.md
- Be respectful and inclusive
- Provide constructive feedback
- Focus on what is best for the community
- Show empathy towards other contributors
To contribute to NotifyChain, make sure you have:
- Rust installed with WebAssembly target (
rustup target add wasm32-unknown-unknown) - Stellar CLI installed
- Node.js (for listener and dashboard components)
- Basic understanding of Soroban smart contracts, Git, and GitHub
To set up a local development environment, follow this fork-and-clone workflow:
- Fork the Repository: Visit Notify-Chain and click the Fork button to create a copy of the repository under your GitHub account.
- Clone your Fork:
git clone https://github.com/your-username/Notify-Chain.git cd Notify-Chain - Configure Upstream Remote: Keep your fork updated by pointing to the upstream repository:
git remote add upstream https://github.com/Core-Foundry/Notify-Chain.git
- Verify Remotes: Run
git remote -vto ensure your configuration is correct:origin https://github.com/your-username/Notify-Chain.git (fetch) origin https://github.com/your-username/Notify-Chain.git (push) upstream https://github.com/Core-Foundry/Notify-Chain.git (fetch) upstream https://github.com/Core-Foundry/Notify-Chain.git (push)
Before starting any new work or creating a branch, always pull the latest changes from the upstream main branch to prevent merge conflicts:
git checkout main
git fetch upstream
git merge upstream/main
git push origin mainTo ensure that efforts are not duplicated and contributors can work on tasks they are interested in, we use the following issue claiming process:
- Browse Open Issues: Explore the GitHub Issue Tracker to find tasks. Look for issues labeled
good first issueif you are new to the codebase. - Claim an Issue:
- Comment on the issue stating:
I would like to work on this issue. - Wait for a maintainer to assign the issue to you. Once assigned, your username will appear under "Assignees" on GitHub.
- Do not begin working on an issue or open a Pull Request for it unless it has been formally assigned to you. This prevents two developers from working on the same problem.
- Comment on the issue stating:
- Active Work & SLA:
- Once assigned, you are expected to submit a draft PR or progress update within 5 days.
- If there is no activity or communication on the issue after 5 days, the issue may be unassigned and made available for other contributors.
- If you need more time, simply post an update on the issue so the maintainers know you are still active.
Always start from an up‑to‑date main:
git checkout main
git pull upstream main
git checkout -b <branch-name>Use descriptive branch names following these conventions:
feature/for new featuresfix/for bug fixesdocs/for documentationrefactor/for code refactoringtest/for adding or modifying testschore/for maintenance tasks
Example:
feature/add-slack-notificationsfix/resolve-event-deduplication-bugdocs/update-contributing-guide
- Write clean, readable code
- Follow existing code style in each directory
- Add comments for complex logic
- Update documentation as needed
All new features and bug fixes must include tests.
cd contract/contracts/hello-world
cargo testcd listener
npm install
npm testcd dashboard
npm install
npm testWrite clear, descriptive commit messages following Conventional Commits:
feat:new featurefix:bug fixdocs:documentation changestest:test additions or changesrefactor:code refactoringchore:maintenance tasks
Example:
git commit -m "feat: add retry queue for failed notifications"
git commit -m "fix: resolve event parsing issue in listener"
git commit -m "docs: update README with setup instructions"git push -u origin <branch-name>Then create a Pull Request on GitHub!
Use the same format as commit messages:
feat: add retry queue for notificationsfix: standardize error messages across contracts
Include:
- Overview: What changes does this PR introduce?
- Related Issue: Link to GitHub issue(s) this PR addresses
- Changes: What was added/removed/modified
- Verification Results: What tests passed, coverage, etc.
- How to Test: Instructions for testing your changes
- Code follows project style guidelines
- Tests added/updated and passing
- Documentation updated
- All tests pass locally
- Branch is up to date with
main
Follow existing patterns in contract/contracts/hello-world/:
- Format with
cargo fmt - Add
///documentation comments for public functions/structs - Use
#[contracterror]for custom errors - Test all functionality
Follow the existing style in listener/ and dashboard/:
- Run
npm run lintbefore committing - Use TypeScript for type safety
- Write unit tests for all new logic
- Follow existing naming conventions
- Ensure all tests pass locally
- Address reviewer feedback promptly
- Keep PR scope focused on a single issue or feature
- Be open to suggestions
- Review code thoroughly
- Test locally if needed
- Provide constructive feedback
- Approve when ready
- Open an issue for bugs or feature requests
- Check existing issues and PRs first
- Join discussions on GitHub
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to NotifyChain! 🎉