Real-time, per-second money streaming protocol built on Mantle Network.
Real-time, per-second money streaming protocol built on Mantle Network.
MantleStream enables users to create continuous USDT payment streams that distribute funds every second to one or multiple recipients, with support for pausing, cancelling, claim transfers, and recipient redirection — all fully on-chain.
MantleStream is a smart contract protocol that allows a sender to lock USDT and stream it continuously over time, instead of sending lump-sum payments.
Salaries & payroll
Creator subscriptions
Freelance milestone payments
Revenue sharing
DAO contributor compensation
Funds accrue per second
Claimable balances increase in real time
Stream funds to multiple recipients
Custom percentage allocation (basis points)
Percentages must sum to 100% (10,000 bp)
Recipients can:
Withdraw funds to their wallet
Transfer claims to another address
Redirect future claims to a new recipient
Sender can pause and unpause streams
Sender can cancel streams at any time
Fair settlement on cancellation:
Earned funds go to recipients
Unearned funds are refunded to the sender
Uses ReentrancyGuard
Safe ERC-20 transfers
Strict validation and access control
Framework: React js
Language: TypeScript
Styling: Tailwind CSS v4
Animations: Framer Motion
Icons: Lucide React
Smart Contracts: Solidity ^0.8.20
Contract Framework: OpenZeppelin Contracts
Ethereum Library: Ethers.js v6
Package Manager: npm
Linting: ESLint
Type Checking: TypeScript
Node.js 18+
npm or yarn
MetaMask or compatible Web3 wallet
Mantle Sepolia testnet configured
Clone the repository
git clone https://github.com/OdionOseiwe/MantleHackathon.git
cd MantleHackathonInstall dependencies
Start development server
npm run devOpen your browser
http://localhost:5173/Deploy MockUSDT contract
forge create src/MockUSDT.sol:MockUSDT --rpc-url <YOUR_RPC_URL> --private-key <YOUR_PRIVATE_KEY> --broadcastDeploy GiftVoucher contract
forge create src/MantleStream.sol:MantleStream --rpc-url <YOUR_RPC_URL> --private-key <YOUR_PRIVATE_KEY> --constructor-args [MockUSDT] --broadcastUpdate contract addresses in src/constants/Address.ts
Connect Wallet: Click "Connect Wallet" and authorize your Web3 wallet (MetaMask / WalletConnect).
Enter Recipient: Input the recipient's Ethereum address.
Enter Amount: Specify the USDT amount to stream.
Select Duration: Choose the duration for your stream (seconds, minutes, hours, or days).
Add Message: Include a message to the recipient.
Create Stream: Approve the transaction in your wallet and create the stream.
Enable Batch Mode: Toggle the multi-recipient option
Add Recipients: Enter multiple recipient addresses
Set Percentages / Amounts:: Allocate the stream amount across recipients (percentages must sum to 100%).
Add Messages: Personalize each recipient with a message.
Send Stream: Approve the transaction to create all streams in one batch.
📝 Smart Contracts (Mantle Sepolia):
• Service Ledger (MantleStream): 0x82dFd16fF8C407F4AF32F01204D98bbb068D9927
• Mock USDT Token (ERC20): 0xDCBbde31e98A9a190C3932e562Dc723Bf56b87f8
🔗 Live Demo: https://mantlestream.netlify.app/
During the hackathon, MantleStream evolved from an initial idea into a fully functional on-chain streaming protocol. The development process included researching Mantle’s architecture, designing a per-second streaming model, and implementing a secure Solidity smart contract supporting single and multi-recipient streams. Core features such as percentage-based fund allocation, real-time claimable balances, stream pausing and cancellation, claim transfers, and recipient redirection were progressively added. The contract was secured using OpenZeppelin standards and tested against common edge cases, resulting in a complete MVP that demonstrates real-world payment streaming use cases on the Mantle Network.