If you've ever had to pay 20 contributors, split revenue across wallets, or run payroll in crypto — you know the pain. One chain, one transaction at a time. Multiply that across multiple networks and it becomes a full-time job.
That's why I built Spraay — a batch payment protocol that lets you send tokens to multiple recipients in a single transaction. Today it's live on 11 chains, and in this post I'll walk you through how the multi-chain architecture works, what's deployed where, and how to start using it.
What Spraay Actually Does
At its core, Spraay is a smart contract that accepts:
- A token address (or native currency)
- An array of recipient addresses
- An array of amounts
It loops through and distributes everything in one transaction. One gas fee. One signature. Done.
This is useful for:
- Payroll — pay your whole team in USDC on Base
- Airdrops — distribute tokens to hundreds of wallets
- Revenue splits — automate creator or DAO payouts
- Bounties — pay multiple contributors at once
The 11 Chains
Here's where Spraay is deployed and verified today:
EVM Chains
| Chain | Contract Address |
|---|---|
| Base | 0x1646452F98E36A3c9Cfc3eDD8868221E207B5eEC |
| Ethereum | 0x15E7aEDa45094DD2E9E746FcA1C726cAd7aE58b3 |
| Arbitrum | 0x5be43aA67804aD84fcb890d0AE5F257fb1674302 |
| Polygon | Deployed & verified |
| BNB Chain | Deployed & verified |
| Avalanche | Deployed & verified |
| Unichain | 0x08fA5D1c16CD6E2a16FC0E4839f262429959E073 |
| Plasma | 0x08fA5D1c16CD6E2a16FC0E4839f262429959E073 |
| BOB | 0xEc8599026AE70898391a71c96AA82d4840C2e973 |
| Bittensor | Deployed & verified |
All EVM contracts share the same Solidity codebase. The deployment process is identical across chains — you just switch the RPC endpoint and you're live.
Solana
Solana is a different beast. There's no shared EVM contract here — Spraay uses a dedicated TypeScript SDK that constructs batch transfer instructions natively on Solana.
The Solana integration is open source: plagtech/spraay-solana
It also has its own gateway endpoint at gateway-solana.spraay.app.
How to Deploy Spraay to a New EVM Chain
If you want to understand how a protocol like this expands across chains, here's the general pattern.
Step 1: Verify RPC Access
Before deploying anything, make sure you have a reliable RPC endpoint for the target chain. Services like Alchemy, Infura, or the chain's public RPC all work.
# Quick check — does the RPC respond?
curl -X POST https://your-rpc-url \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
Step 2: Configure Your Deployment Script
Using Hardhat or Foundry, point your config at the new chain:
// hardhat.config.js
module.exports = {
networks: {
newchain: {
url: "https://your-rpc-url",
accounts: [process.env.DEPLOYER_PRIVATE_KEY],
chainId: 12345
}
}
};
Step 3: Deploy
npx hardhat run scripts/deploy.js --network newchain
The batch payment contract is lightweight — it doesn't depend on chain-specific features like oracles or bridges. If the chain is EVM-compatible, it works.
Step 4: Verify
npx hardhat verify --network newchain DEPLOYED_CONTRACT_ADDRESS
Verification lets anyone read the contract source on the block explorer, which builds trust.
Step 5: Register in Your Gateway
If you're running an x402 gateway (like Spraay does at gateway.spraay.app), add the new chain's contract address and RPC to your config. Now every API consumer and AI agent that hits your gateway can use the new chain automatically.
Why Multi-Chain Matters for Batch Payments
Different teams live on different chains. A DAO on Arbitrum shouldn't have to bridge to Base just to run payroll. A Solana-native project shouldn't need an EVM wallet.
By deploying the same contract across 11 chains, Spraay meets users where they already are. And because the x402 gateway abstracts chain selection behind a simple API, agents and apps don't need to care about which chain is under the hood — they just specify it in the request.
# Example: batch payment via x402 gateway
curl -X POST https://gateway.spraay.app/payments/batch \
-H "Content-Type: application/json" \
-d '{
"chain": "base",
"token": "USDC",
"recipients": [
{"address": "0xABC...", "amount": "100"},
{"address": "0xDEF...", "amount": "50"}
]
}'
Switch "chain": "base" to "arbitrum" or "polygon" and the same request works.
What's Next
Spraay is also live as:
- An MCP server on Smithery — 60 capabilities for AI agents (
@plagtech/spraay-x402-mcp) - A Virtuals Protocol ACP agent — registered on agdp.io with 5 Tier 1 job offerings
- An ERC-8004 registered agent — on-chain agent identity (#26346)
If you're building AI agents that need to move money, or you're running a team/DAO that pays people across chains, Spraay is built for exactly that.
Links:
- 🌐 spraay.app
- 💧 Twitter: @Spraay_app
- 🛠️ GitHub: plagtech
- 📡 x402 Gateway: gateway.spraay.app
If this was useful, drop a follow and I'll keep shipping these. Next up: how the x402 gateway routes AI agent payments with zero API keys.
Top comments (0)