Thank you for your interest in contributing to bc-forge! This guide will help you get started as a contributor, whether you're fixing bugs, adding features, or improving documentation.
bc-forge is maintained on drips.network. As a contributor, you can:
- Browse posted issues — The maintainer posts issues with bounties on drips.network
- Claim an issue — Comment on the GitHub issue to claim it
- Submit your work — Open a PR referencing the issue
- Receive rewards — Upon merge, rewards are distributed through drips.network
- Create a profile at drips.network
- Link your GitHub account
- Browse the bc-forge project for available issues
- Claim and work on issues that match your skills
- Rust 1.74+ with
wasm32-unknown-unknowntarget - Stellar CLI 22.0+
- Node.js 18+
- Git
# Clone your fork
git clone https://github.com/YOUR_USERNAME/bc-forge.git
cd bc-forge
# Add upstream remote
git remote add upstream https://github.com/p3ris0n/bc-forge.git
# Install Rust dependencies
rustup target add wasm32-unknown-unknown
# Build & test contracts
cargo build
cargo test --tests
# Setup SDK
cd sdk
npm install
npm run build- Check the Issues tab
- Look for labels:
good-first-issue— Perfect for newcomerssmart-contract— Rust/Soroban contract worksdk— TypeScript SDK improvementsdocumentation— Docs and guidesbug— Bug fixesenhancement— New features
Always create a branch from main using this convention:
# Features
git checkout -b feature/<issue-number>-<short-description>
# Bug fixes
git checkout -b fix/<issue-number>-<short-description>
# Documentation
git checkout -b docs/<issue-number>-<short-description>
# Tests
git checkout -b test/<issue-number>-<short-description>Examples:
git checkout -b feature/12-batch-mint
git checkout -b fix/7-transfer-overflow
git checkout -b docs/15-sdk-api-reference- Follow standard Rust formatting:
cargo fmt --all - Pass all clippy lints:
cargo clippy --all-targets -- -D warnings - Add NatSpec-style doc comments to all public functions:
/// Burns `amount` tokens from the `from` address.
///
/// # Arguments
/// * `from` - The address whose tokens will be burned.
/// * `amount` - The quantity of tokens to burn (must be positive).
///
/// # Panics
/// Panics if `from` has insufficient balance or the contract is paused.
///
/// # Events
/// Emits a `burn` event with `(from, amount, new_balance, new_supply)`.
pub fn burn(env: Env, from: Address, amount: i128) { ... }- Use JSDoc comments for all exported functions and classes
- Use strict TypeScript (
strict: truein tsconfig) - Follow the existing patterns in
client.tsandutils.ts
Every PR must include tests for the changes made:
| Change Type | Required Tests |
|---|---|
| New contract function | Unit test + edge cases + panic tests |
| Bug fix | Regression test reproducing the bug |
| SDK method | Integration test (if RPC available) or type check |
| Refactor | Existing tests must still pass |
Run all tests before submitting:
# Contract tests
cargo test --tests
# SDK build check
cd sdk && npm run build- Push your branch to your fork
- Open a PR against
mainusing the PR template - Fill in all sections — summary, type of change, testing, checklist
- Link the issue — Use
Closes #<number>in the PR description - Wait for review — The maintainer will review within 48 hours
- Address feedback — Push additional commits if changes are requested
- Merge — The maintainer merges after approval
- Branch follows naming convention
- Code passes
cargo fmtandcargo clippy - All tests pass (
cargo test --tests) - SDK compiles (
npm run buildinsdk/) - New functions have doc comments
- README updated if applicable
- No unrelated changes included
- Modular design — Each feature gets its own crate or module
- Admin module — Shared access control in
contracts/admin/ - Lifecycle module — Shared pause/unpause in
contracts/lifecycle/ - Token contract — Core logic in
contracts/token/ - Storage strategy:
instance()— Contract-wide state (admin, supply, metadata)persistent()— Per-address state (balances, allowances)
- bcForgeClient — The single entry point for all operations
- Read-only methods — Use simulation (no transaction needed)
- Write methods — Build, simulate, sign, submit, poll
- Open a Discussion
- Check Soroban docs
- Review existing closed issues for solutions
Thank you for contributing to bc-forge! Every contribution, no matter how small, makes a difference. 🚀