SplitBot is non-custodial. The bot deploys contracts and monitors on-chain events, but never holds funds. All deposits, payouts, and refunds happen through the escrow contract.
What SplitBot does
Get started
Set up the bot, deploy contracts, and run your first split on Sepolia.
Understand the concepts
Learn how escrow contracts, SIWE wallet binding, fee-on-top math, and refunds work.
Configure the bot
Set environment variables for the bot, contracts, and Mini App.
Common workflows
Walk through creating a split, paying, cancelling, and claiming refunds.
How it works
SplitEscrowFactory contract, which uses CREATE2 to deploy a deterministic SplitEscrow instance. Participants deposit through the Mini App (wallet connect) or by sending ETH directly to the contract. When the last participant pays, the contract executes automatically and the target receives the exact requested amount.
Highlights
- Non-custodial escrow: funds are held by a per-split smart contract, not the bot.
- SIWE wallet binding: users prove wallet ownership by signing a nonce, preventing identity squatting.
- Auto-execution: the contract triggers payout when all participants have deposited.
- Overpay tolerance: deposits at or above the required amount are accepted.
- Pull-pattern refunds: no single participant can block others from claiming refunds.
- Fee-on-top: a configurable fee (default 0.5%) is added to each deposit so the target receives the exact requested amount.
- CREATE2 factory: deterministic contract addresses let participants verify the escrow before depositing.
- Participant DMs: each participant receives a confirmation DM with the target address before paying.
- Background watcher: the bot polls active splits every 30 seconds and notifies the group when a split executes or gets refunded.
- Mini App: a Telegram WebApp for wallet connect, on-chain deposit, and manual transaction verification.
Stack
- Smart contracts: Solidity 0.8.20, Hardhat, OpenZeppelin ReentrancyGuard
- Bot: Python 3.11+, python-telegram-bot 21.x, web3.py, SQLite
- Mini App: ethers.js 6.x, Telegram WebApp SDK, Vercel
- Network: Ethereum Sepolia (testnet)
Current deployment
The bot and contracts are deployed on Sepolia testnet:- Bot: @splitbott_bot
- Factory:
0xa247646Dd0d8a2042aD5Cd440A26358457494aa7 - Mini App: hosted on Vercel