Thank you for your interest in contributing to SplitChain. This project is open source and community-driven. Every contribution — whether it's a bug fix, a new feature, a documentation improvement, or a test — makes a real difference.
Please take a few minutes to read this guide before opening an issue or pull request.
- Code of Conduct
- How to Contribute
- Development Setup
- Branch Naming
- Commit Messages
- Pull Request Process
- Reporting Bugs
- Suggesting Features
- Smart Contract Contributions
- Frontend Contributions
- Documentation Contributions
By participating in this project, you agree to uphold a respectful and inclusive environment. We follow the Contributor Covenant. Harassment, discrimination, or hostile behavior of any kind will not be tolerated.
There are many ways to contribute:
- Fix a bug (check the Issues tab for
buglabels) - Implement a feature (check
enhancementorgood first issuelabels) - Improve documentation
- Write or improve tests
- Review open pull requests
- Report a security vulnerability (see docs/SECURITY.md)
git clone https://github.com/<your-username>/splitchain.git
cd splitchain# Install Rust
curl https://sh.rustup.rs -sSf | sh
# Add WASM target
rustup target add wasm32-unknown-unknown
# Install Soroban CLI
cargo install --locked stellar-cli
# Build the contract
cd contract/splitchain-stellar
soroban contract build
# Run tests
cargo testcd frontend/splitchain-ui
cp .env.example .env
npm install
npm run devUse descriptive, prefixed branch names:
| Prefix | Use for |
|---|---|
feat/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation only |
test/ |
Adding or fixing tests |
refactor/ |
Code refactoring without behavior change |
chore/ |
Tooling, config, CI changes |
Examples:
feat/debt-netting-algorithmfix/settle-overflow-checkdocs/improve-api-reference
Follow the Conventional Commits format:
<type>(<scope>): <short description>
[optional body]
[optional footer]
Examples:
feat(contract): add expense description field to add_expense
fix(frontend): correct balance sign display in Balances page
docs(readme): update deployment instructions for testnet
test(contract): add edge case for zero-amount settlement
Types: feat, fix, docs, test, refactor, chore, style, perf
- Make sure your branch is up to date with
main - Run all tests before submitting (
cargo testandnpm test) - Fill out the pull request template completely
- Link any related issues using
Closes #<issue-number> - Request a review from a maintainer
- Address all review comments before merging
PRs that break existing tests or lack a description will not be merged.
Before opening a bug report, please:
- Search existing issues to avoid duplicates
- Confirm the bug is reproducible
When filing a bug, include:
- A clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Your environment (OS, Rust version, Node version, browser)
- Any relevant logs or screenshots
Open a GitHub Issue with the enhancement label. Include:
- A clear description of the problem you're solving
- Your proposed solution
- Any alternatives you considered
- Why this would benefit other users
When modifying contract/splitchain-stellar/contracts/splitchain/src/lib.rs:
- Every new public function must have a corresponding test in
test.rs - All state-mutating functions must call
require_auth()on the relevant signer - Use
i128for all monetary values (amounts are in stroops: 1 XLM = 10,000,000 stroops) - Do not introduce
std— the contract is#![no_std] - Run
cargo testandsoroban contract buildbefore submitting
When modifying frontend/splitchain-ui/src/:
- Follow the existing component structure (pages in
src/pages/, helpers insrc/lib/) - Use TypeScript strictly — no
anytypes - Keep inline styles consistent with the existing dark theme
- Mark any direct contract calls with a
// TODO: wire to contractcomment if not yet implemented - Run
npm run buildto confirm no TypeScript errors before submitting
Documentation lives in:
README.md— project overviewCONTRIBUTING.md— this filedocs/— detailed guides
When updating docs:
- Keep language clear and direct
- Use code blocks for all commands and code snippets
- Update the table of contents if you add new sections
- Check that all internal links still work
Thank you for helping make SplitChain better.