Bouncer

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

  1. 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.
  2. For a token you approve exactly the amount, then call send. For ETH you send the amount with the call.
  3. 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

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

Bouncerdeploying soon
NetworkRobinhood 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

Token

$BNCR is the project's token on pons. It isn't needed to use Bouncer.