Soroban smart contracts for the StellArts platform, built on Stellar blockchain.
Manages secure payment escrow for artisan bookings:
- Create Escrow: Initialize escrow for a new booking
- Fund Escrow: Client deposits funds into escrow
- Complete Job: Release funds to artisan upon job completion
- Dispute Job: Handle disputes between client and artisan
- Refund Client: Refund funds to client when necessary
Manages on-chain reputation and reviews for artisans:
- Init Reputation: Initialize reputation for new artisans
- Submit Review: Clients can submit reviews and ratings
- Get Reputation: Retrieve artisan reputation scores
- Get Review: Fetch specific review details
- Has Review: Check if a review exists for a booking
- Rust: 1.75.0 or higher
- Stellar CLI: Latest version
- wasm32-unknown-unknown target
# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Add wasm32 target
rustup target add wasm32-unknown-unknown
# Install Stellar CLI
cargo install --locked stellar-cli --features opt# Build all contracts
cargo build --release --target wasm32-unknown-unknown
# Build specific contract
cd escrow
cargo build --release --target wasm32-unknown-unknown
cd ../reputation
cargo build --release --target wasm32-unknown-unknown# Run all tests
cargo test
# Run tests for specific contract
cd escrow
cargo test
cd ../reputation
cargo test
# Run tests with verbose output
cargo test -- --nocapture# Deploy escrow contract
stellar contract deploy \
--wasm target/wasm32-unknown-unknown/release/escrow.wasm \
--network testnet \
--source ACCOUNT_SECRET_KEY
# Deploy reputation contract
stellar contract deploy \
--wasm target/wasm32-unknown-unknown/release/reputation.wasm \
--network testnet \
--source ACCOUNT_SECRET_KEY# Deploy escrow contract
stellar contract deploy \
--wasm target/wasm32-unknown-unknown/release/escrow.wasm \
--network mainnet \
--source ACCOUNT_SECRET_KEY
# Deploy reputation contract
stellar contract deploy \
--wasm target/wasm32-unknown-unknown/release/reputation.wasm \
--network mainnet \
--source ACCOUNT_SECRET_KEY# Build with optimizations
cargo build --release --target wasm32-unknown-unknown
# Use stellar-cli to optimize wasm
stellar contract optimize \
--wasm target/wasm32-unknown-unknown/release/escrow.wasm
stellar contract optimize \
--wasm target/wasm32-unknown-unknown/release/reputation.wasmstellar contract invoke \
--id CONTRACT_ID \
--network testnet \
--source SOURCE_ACCOUNT \
-- \
create_escrow \
--booking_id 1 \
--client CLIENT_ADDRESS \
--artisan ARTISAN_ADDRESS \
--amount 1000stellar contract invoke \
--id CONTRACT_ID \
--network testnet \
--source CLIENT_ACCOUNT \
-- \
fund_escrow \
--booking_id 1stellar contract invoke \
--id CONTRACT_ID \
--network testnet \
--source CLIENT_ACCOUNT \
-- \
complete_job \
--booking_id 1stellar contract invoke \
--id CONTRACT_ID \
--network testnet \
--source ARTISAN_ACCOUNT \
-- \
init_reputation \
--artisan ARTISAN_ADDRESSstellar contract invoke \
--id CONTRACT_ID \
--network testnet \
--source CLIENT_ACCOUNT \
-- \
submit_review \
--reviewer CLIENT_ADDRESS \
--artisan ARTISAN_ADDRESS \
--booking_id 1 \
--rating 5 \
--comment_hash "review_hash"stellar contract invoke \
--id CONTRACT_ID \
--network testnet \
-- \
get_reputation \
--artisan ARTISAN_ADDRESSEach contract includes comprehensive unit tests:
# Run all tests
cargo test
# Run with coverage
cargo tarpaulin --out Html# Run integration tests
cargo test --test integration_tests1. Client creates booking β Create Escrow
2. Client deposits funds β Fund Escrow
3. Artisan completes job β Job marked complete
4. Client confirms β Complete Job (funds released)
OR
4. Dispute raised β Dispute Job (admin resolution)
1. Artisan signs up β Init Reputation
2. Job completed β Client submits review
3. Review stored on-chain β Reputation updated
4. Average rating calculated β Displayed on profile
- All sensitive functions require caller authentication
- Client and artisan addresses are verified for each operation
- Only authorized parties can perform specific actions
- Escrow state is immutable once created
- Status transitions follow strict rules
- Reputation data is tamper-resistant
- Always verify booking IDs match
- Validate rating ranges (1-5)
- Use persistent storage for critical data
- Handle edge cases and errors gracefully
# Clean and rebuild
cargo clean
cargo build --release --target wasm32-unknown-unknown
# Update dependencies
cargo update# Run specific test
cargo test test_name -- --exact
# Show test output
cargo test -- --nocapture# Check contract size
ls -lh target/wasm32-unknown-unknown/release/*.wasm
# Verify wasm validity
stellar contract inspect --wasm path/to/contract.wasm- Fork the repository
- Create a feature branch
- Write tests for new features
- Ensure all tests pass
- Submit a pull request
MIT License - see LICENSE file for details.
Note: These contracts are under active development. Use at your own risk in production environments.