Paystreamer
Web3 billing infrastructure enabling digital platforms to accept and automate recurring stablecoin subscriptions on Sui.
Problem
Digital platforms in Africa and emerging markets face fragmented payment systems, high transaction fees, and limited access to stablecoin infrastructure. For subscription-based businesses, recurring billing typically requires either payment providers with high fees or manual invoice chasing — both unreliable at scale. On-chain payment solutions exist but require users to sign every transaction, creating friction that kills conversion.
Solution
Paystreamer is a permissionless on-chain subscription scheduler built on Sui that enables platforms to accept recurring stablecoin payments with a one-time wallet approval. Users approve the contract once; subsequent payments are automated on-chain without further user interaction.
The system consists of 10 Move modules with full test coverage (73/73 tests passing), an on-chain scheduler that triggers payments at defined intervals, and a React frontend for subscription management.
Architecture
On-chain scheduler contract (Sui Move) → Platform subscription manager (React) → Wallet provider integration (@mysten/dapp-kit)
Technical Decisions
Move for smart contracts
Sui's object model and Move's resource-oriented design map naturally to subscription state — each subscription is an owned object that the scheduler can reference directly, eliminating the need for external indexers.
One-time approval pattern
Instead of requiring users to sign every payment, the contract uses an allowance pattern. Users approve a spending limit once; the scheduler draws from that allowance on each cycle. Revocable at any time.
Permissionless scheduler
The payment scheduler is itself a Move module — not a centralized cron job. Anyone can trigger the scheduler, making it censorship-resistant and removing a single point of failure.
73/73 test coverage
Full test coverage across all 10 modules. Every edge case (failed payments, revoked allowances, duplicate scheduler calls) is handled in Move unit tests before deployment.