Bouncer docs
Bouncer is one smart contract on Robinhood Chain (chain id 4663) that holds a payment for one recipient until they claim it. The sender can take it back until it is claimed. The site is a static page that talks to the contract from your wallet; there is no server holding anything.
How a send works
- You choose a recipient, a token, an amount and a deadline between 10 minutes and 365 days, plus an optional public note of up to 200 characters.
- For a token you approve exactly the amount, then call
send. For ETH you send the amount with the call. - The contract records the send with an id and holds the funds. It shows up in your Sent tab and in the recipient's Inbox, and has its own page at
/app/?s=ID.
Claiming
Only the recipient address can call claim(id), and only until the deadline. The amount minus the fee goes to the recipient in the same transaction. A send can be claimed once.
Bouncing
Only the sender can call bounce(id). It works at any time while the send is not claimed: before the deadline, to undo a mistake, and after it, when the recipient can no longer claim. The full amount comes back with no fee.
held ──claim (recipient, before deadline)──▶ claimed │ └──bounce (sender, any time)──────────────▶ bounced
Tokens
ETH and any ERC-20 on Robinhood Chain: USDG, the Stock Tokens, pons memes. For tokens that take a tax on transfer the contract measures what actually arrived and holds that amount, so a claim or bounce never asks for more than it has.
Fees
- Claims: 0.1% of the send, to the treasury, in the same token. The fee is fixed into each send when it is made.
- Bounces: free.
- The contract caps the fee at 1% (
MAX_FEE_BPS = 100). - Gas on Robinhood Chain is a fraction of a cent per transaction.
Owner powers
The owner can set the fee for future sends within the 1% cap, change the treasury address and hand over ownership. There is no function that lets the owner, or anyone other than the sender and recipient, move held funds.
Contract
| Bouncer | deploying soon |
| Network | Robinhood Chain, chain id 4663 |
send(token, to, amount, expiry, note) payable → id claim(id) recipient, before expiry bounce(id) sender, while not claimed get(id) · inbox(addr) · outbox(addr) · count()
Risks
- The contract is unaudited. Its tests cover claims, bounces, deadlines, taxed tokens and access, and run against real USDG on a fork of Robinhood Chain.
- Until it is claimed, a send is not the recipient's money. Don't treat a held send as paid.
- Notes are public on chain. Don't put private information in them.
- A token with unusual behaviour (rebasing, blocklists, pausing) can still fail on claim or bounce because of the token itself.
Token
$BNCR is the project's token on pons. It isn't needed to use Bouncer.
