Decision: Option B (conservative) β keep campaign/ (orbitchain-campaign) as the canonical crowdfunding contract for all new development, audits, deployments, and integrations. The campaign/ implementation remains the authoritative contract for milestone flows, refunds, freeze/upgrade controls, reentrancy protection, typed errors, and dashboard analytics.
crates/contracts/core/ (orbitchain-core) is retained only as a legacy compatibility/reference contract. Do not add new campaign features there; use campaign/ for any new logic, analytics endpoints, or deployment work. Any remaining behavior worth preserving from core should be migrated into campaign/ before core is removed in a future breaking release.
Canonical campaign analytics now live on orbitchain-campaign: use get_campaign_report, get_platform_summary, get_dashboard_metrics, get_donation_count, get_donor_count, get_release_count, and get_total_tx_count for dashboard and export workflows.
OrbitChain is an on-chain crowdfunding protocol built on the Stellar Network and Soroban smart contracts. It provides a transparent, trust-minimized platform where campaign creators can raise funds in native XLM or any Stellar-based asset (USDC, NGNT, custom tokens), and donors retain full visibility into how their contributions are deployed.
The protocol is governed by a set of deterministic Soroban contracts β handling campaign lifecycle management, milestone-based fund release, multi-asset donation processing, and cross-chain token bridging β complemented by a comprehensive CLI toolchain for deployment, transaction signing, wallet integration, and network diagnostics.
This project uses a Rust Cargo workspace with the following structure:
orbitChain-contract/
|-- campaign/ # Canonical campaign contract
| |-- Cargo.toml
| `-- src/
| `-- lib.rs
βββ Cargo.toml # Workspace configuration
βββ crates/
β βββ contracts/
β β βββ core/ # Legacy compatibility/reference contract
β β βββ Cargo.toml
β β βββ src/
β β βββ lib.rs # Contract implementation
β βββ tools/ # CLI utilities and deployment tools
β βββ Cargo.toml
β βββ src/
β βββ main.rs # CLI entry point
βββ .gitignore
βββ README.md
orbitchain-campaign: Canonical Soroban crowdfunding contract for milestones, multi-asset donations, refunds, lifecycle controls, and analyticsorbitchain-core: Legacy compatibility/reference contract; do not use for new campaign featuresorbitchain-tools: Advanced CLI utilities for contract deployment, configuration, transaction management, and debugging
The OrbitChain CLI provides comprehensive tools for contract management, transaction handling, and debugging:
deploy- Deploy contracts to Stellar networksinvoke- Call contract methodsbuild-donation-tx- Build donation transactionssubmit-tx- Submit signed transactionsverify-tx- Verify transaction status
- Transaction History: Track and analyze account transactions with filtering and export
- Batch Operations: Execute multiple transactions efficiently with CSV templates
- Debugging Utilities: Comprehensive network and account diagnostics
- Contract Interaction: Query contracts, generate templates, and inspect state
- Account Management: Create, import, and manage Stellar accounts securely
- Signing Requests: Build transaction signing requests for wallet integration
- Response Handler: Process and validate signed transactions from wallets
# Get transaction history with summary
orbitchain-cli tx-history --account GABJ2... --summary --export-csv transactions.csv
# Execute batch payments
orbitchain-cli batch execute --file payments.csv --parallel --continue-on-error
# Debug network issues
orbitchain-cli debug network-status --network testnet --detailed
# Query contract method
orbitchain-cli contract query --contract CA3D... --method get_balance --simulate
# Create and fund new account
orbitchain-cli account create --generate-mnemonic
orbitchain-cli account fund --account GABJ2... --network testnet
# Build transaction signing request
orbitchain-cli signing build-donation GBJCHU... 1 5000000 XLM "Supporting education"
# Process wallet response
orbitchain-cli response process '{"requestId":"req_123","xdr":"AAAA...","signer":"GBJCHU...","signedAt":1234567890}'For detailed documentation, refer to the inline help: run any command with --help for full usage information.
-
Clone the repository
git clone https://github.com/YOUR_USERNAME/orbitchain-contract.git cd orbitchain-contract -
Install Rust toolchain (automatically configured by
rust-toolchain.toml)# Install Rust if not already installed curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # The project will automatically use the correct Rust version and targets rustup show
-
Install Soroban CLI
# Method 1: Install via cargo (recommended for development) cargo install soroban-cli # Method 2: Install via npm (alternative) npm install -g soroban-cli # Verify installation soroban --version
-
Build the project
# Using Make (recommended) make build # Or using cargo directly cargo build -p orbitchain-campaign --target wasm32-unknown-unknown
- Rust stable toolchain (automatically managed by
rust-toolchain.toml) - wasm32-unknown-unknown target (auto-installed by toolchain)
- Soroban CLI for contract deployment and testing
This project uses rust-toolchain.toml to ensure consistent development environments:
[toolchain]
channel = "stable"
targets = ["wasm32-unknown-unknown"]
components = ["rustfmt", "clippy"]This ensures:
- Consistent Rust version across all contributors
- Required targets are automatically installed
- Essential components (rustfmt, clippy) are included
The project includes a Makefile for common development tasks:
# Build WASM contract
make build
# Run all tests
make test
# Format code
make fmt
# Run linter
make lint
# Clean build artifacts
make clean
# Show all available commands
make help# Build the canonical campaign contract for WASM
cargo build -p orbitchain-campaign --target wasm32-unknown-unknown --release
# Build the CLI tools
cargo build -p orbitchain-tools
# Build entire workspace
cargo build --workspace# Run canonical campaign contract tests
cargo test -p orbitchain-campaign
# Run all tests
cargo test --workspace# Check configuration
cargo run -p orbitchain-tools -- config check
# Initialize configuration (creates .env and contract ID files)
cargo run -p orbitchain-tools -- config init
# Show network configuration
cargo run -p orbitchain-tools -- network
# Deploy contract to testnet
cargo run -p orbitchain-tools -- deploy --network testnet
# Deploy contract to sandbox (local)
cargo run -p orbitchain-tools -- deploy --network sandbox
# Invoke the ping method on deployed contract
cargo run -p orbitchain-tools -- invoke ping
# Invoke with custom network
cargo run -p orbitchain-tools -- invoke ping --network testnet
# Show deployed contract ID
cargo run -p orbitchain-tools -- contract-id
cargo run -p orbitchain-tools -- contract-id --network testnet
# Prepare wallet signing flow (freighter/albedo/lobstr)
cargo run -p orbitchain-tools -- prepare-wallet-signing --wallet freighter --xdr "<UNSIGNED_XDR>"
# Complete wallet signing flow with wallet callback/response payload
cargo run -p orbitchain-tools -- complete-wallet-signing --wallet freighter --attempt-id "<ATTEMPT_ID>" --response "<WALLET_RESPONSE>" --started-at-unix 1700000000This guide walks you through deploying the canonical campaign contract to testnet and invoking a health-check method.
-
Install Soroban CLI:
cargo install soroban-cli
-
Generate a keypair (for testnet):
soroban keys generate test_account --network testnet
-
Get testnet XLM (optional but recommended for testing):
- Visit Stellar Testnet Faucet
# Build WASM contract
make wasm
# Or build everything including CLI tools
make build# Copy the example environment file
cp .env.example .env
# Edit .env and set your admin key:
# SOROBAN_ADMIN_KEY=YOUR_PUBLIC_KEYOr generate and configure a new key:
# Generate a new keypair
soroban keys generate my_admin --network testnet
# Get the public key
soroban keys list
# Add to .env
SOROBAN_ADMIN_KEY=GA7...# Deploy the contract
cargo run -p orbitchain-tools -- deploy --network testnetExpected output:
π Deploying to network: testnet
π¦ Using WASM: target/wasm32-unknown-unknown/debug/orbitchain_campaign.wasm
β
Contract deployed successfully!
π Contract ID: CB7...ABC
β
Contract ID stored in .orbitchain_contract_id
# Invoke ping
cargo run -p orbitchain-tools -- invoke pingExpected output:
π Invoking method 'ping' on network: testnet
π Using contract ID: CB7...ABC
β
Invocation successful!
π€ Result: 1
# View all deployed contract IDs
cargo run -p orbitchain-tools -- contract-id
# View network configuration
cargo run -p orbitchain-tools -- networkFor local testing without testnet:
# Start local sandbox
soroban sandbox start
# Deploy to sandbox
cargo run -p orbitchain-tools -- deploy --network sandbox
# Invoke on sandbox
cargo run -p orbitchain-tools -- invoke ping --network sandbox- "WASM file not found": Run
make wasmto build the contract first - "No contract ID found": Deploy a contract first with
deploycommand - "Configuration error": Run
cargo run -p orbitchain-tools -- config checkto diagnose - "soroban: command not found": Install with
cargo install soroban-cli
- Discover global fundraising campaigns
- Donate in XLM or Stellar assets
- Wallet integration (Freighter, Albedo, Lobstr)
- On-chain transparency: verify all transactions
- Create social impact projects
- Accept multi-asset contributions
- Real-time donation tracking
- Withdraw funds directly on-chain
- Campaign approval workflow
- User & KYC management
- Analytics dashboard
OrbitChain Blockchain Layer is built with:
- Stellar Testnet / Mainnet support
- Donation verification
- On-chain withdrawal system
- Assetβagnostic design
OrbitChain includes a comprehensive fee estimation service that provides accurate transaction fee calculations, surge pricing detection, and multi-currency conversion.
- Real-time Fee Estimation: Fetch current base fees from Stellar Horizon
- Surge Pricing Detection: 4-level detection (Normal, Elevated, High, Critical)
- Multi-Currency Display: Convert fees to 10+ supported currencies
- Caching: 5-minute TTL cache to reduce API calls
- Fee History Tracking: 1000+ records for analytics and trend detection
use fee::FeeEstimationService;
#[tokio::main]
async fn main() -> Result<()> {
let service = FeeEstimationService::public_horizon();
// Estimate fee for 2-operation donation
let fee_info = service.estimate_fee(2).await?;
println!("Fee: {:.8} XLM", fee_info.total_fee_xlm);
// Check for surge pricing
if fee_info.is_surge_pricing {
println!("β οΈ Network surging at {}%!", fee_info.surge_percent as i64);
}
Ok(())
}- Base Fee: 100 stroops (0.00001 XLM)
- Conversion: 1 XLM = 10,000,000 stroops
- Cache TTL: 300 seconds (5 minutes)
Click the βForkβ button in the topβright of the GitHub repo and clone your fork:
git clone https://github.com/YOUR_USERNAME/orbitchain-contract.git
cd orbitchain-contractgit checkout -b feature/add-donation-flowUse conventional commits:
feat: add wallet connection modal
fix: resolve donation API error
docs: update project README
refactor: clean up project creation formPush your branch:
git push origin feature/add-donation-flowOpen a Pull Request from your fork back to the main branch.
This project uses cargo-audit and cargo-deny to maintain high security standards and license compliance.
You can run the security scans locally using the following commands:
- Check for vulnerabilities:
make audit
- Check for license and ban policies:
make deny
If a vulnerability is found, you should:
- Update dependencies: Run
cargo updateto see if a newer version of the crate resolves the issue. - Ignore (Temporary): If a fix is not available and you have audited the vulnerability, you can temporarily ignore it by adding it to the
[advisories] -> ignorelist in the deny configuration.
If a license or ban policy violation is found:
- Check Licenses: Ensure all dependencies use approved licenses. If a new license needs to be allowed, update the
allowlist indeny.toml. - Banned Crates: If a crate is banned, you must find an alternative or justify its use and add it to the
skiplist indeny.toml.
Security scans are automatically run on every push and pull request. CI will fail if any known vulnerabilities or policy violations are detected.
MIT License β free to use, modify, and distribute.
This workspace includes a deterministic, strongly-typed Soroban network configuration system.
Add a network (example CLI stub):
soroban config network add <name> \
--rpc-url <url> \
--network-passphrase "<passphrase>"List networks (profiles in soroban.toml):
soroban config network lsSelect a network (this sets the active profile name; loader reads SOROBAN_NETWORK):
soroban config network use <name>Environment variable override behavior
SOROBAN_NETWORKselects a profile (e.g.testnet,mainnet,sandbox).SOROBAN_RPC_URLandSOROBAN_NETWORK_PASSPHRASEoverride profile values when set.
Verify the resolved network with the included CLI tool:
cargo run -p orbitchain-tools -- networkSee .env.example for a safe example of environment variables you can copy to .env.