Soroban smart contracts for StreamPay — continuous payment streaming on the Stellar network.
This repo contains the on-chain logic for creating, starting, stopping, and settling payment streams. Contracts are written in Rust using the Soroban SDK.
create_stream(payer, recipient, rate_per_second, initial_balance)— Create a new stream (payer must auth).start_stream(stream_id)— Start an existing stream.stop_stream(stream_id)— Stop an active stream.settle_stream(stream_id)— Compute and deduct streamed amount since last settlement; returns amount.get_stream_info(stream_id)— Read stream metadata (payer, recipient, rate, balance, timestamps, active).version()— Returns the contract version as au32(no auth required).
The on-chain version uses a packed u32 scheme: major * 1_000_000 + minor * 1_000 + patch.
| Semver | u32 |
|---|---|
| 0.1.0 | 1 000 |
| 1.0.0 | 1 000 000 |
| 1.2.3 | 1 002 003 |
When releasing, update both Cargo.toml version and the VERSION const in src/lib.rs.
- Rust (stable, with
rustfmt) - Optional: Stellar CLI for deployment
-
Clone and enter the repo
git clone <repo-url> cd streampay-contracts
-
Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh rustup component add rustfmt
-
Verify setup
cargo fmt --all -- --check cargo build cargo test
| Command | Description |
|---|---|
cargo build |
Build the contract |
cargo test |
Run unit tests |
cargo fmt |
Format code |
cargo fmt --all -- --check |
Check formatting (CI) |
On every push/PR to main, GitHub Actions runs:
- Format check:
cargo fmt --all -- --check - Build:
cargo build - Tests:
cargo test
Ensure all three pass before merging.
streampay-contracts/
├── src/
│ └── lib.rs # Contract and tests
├── Cargo.toml
├── .github/workflows/ci.yml
└── README.md
MIT