01 · open()
Open a leash
Name the agent address and a label. You become the leash owner, the only one who can change it or take money out.
(Demo) Pull the coin: it stops at the cap.
Fund a leash for your agent's address. A contract enforces the daily cap, the allowlist and your stop switch. Every spend leaves a public receipt.
Loading receipts from the chain…
(00) About
An agent with a wallet can spend everything in it. Leashwick moves the limit into a contract, where no prompt, bug or bad tool call can change it.
A vault on Robinhood Chain. You open a leash for one agent address and fund it with ETH. The agent can send ETH only to addresses you allowlisted, only up to the daily cap, and only while you have not hit stop. You can withdraw at any time. The numbers below are read from the contract right now.
Read from LeashVault on Robinhood Chain.
(01) How it works
01 · open()
Name the agent address and a label. You become the leash owner, the only one who can change it or take money out.
02 · dailyCap
The most the agent can spend per UTC day. It resets at 00:00 UTC. Lower or raise it whenever you like.
03 · allowlist
Up to 20 addresses the agent may pay. Anything else reverts. Fund the leash with ETH at open or later.
04 · spend()
The agent calls spend() from its own address. Each spend emits a public Receipt with amount, fee, memo and today's total.
(02) Rules
Each UTC calendar day the agent can send up to the cap; the fee does not count toward it. The counter restarts at 00:00 UTC. A new cap applies at once, against what was already spent today.
revert OverCap(remaining)
Only plain ETH, only to addresses you listed (max 20). No calldata, so the agent cannot call other contracts through the leash.
revert NotAllowed(to)
You can stop a leash in one transaction. Every spend reverts until you resume it.
stop(id) · resume(id)
The leash owner can pull ETH out at any time, also while stopped. It goes to the owner's address only. No admin key touches leash funds.
withdraw(id, amount)
Every spend emits an event anyone can read: leash id, agent, destination, amount, fee, memo, UTC day and today's running total.
event Receipt(…)
Charged on top of each spend from the leash balance, so the destination gets the exact amount. Waived when the leash owner holds the token minimum. Fees go to a burner that buys and burns the token.
FEE_BPS = 25
(03) For your agent
Give the agent its leash id and keep a little ETH on the agent's address for gas. It checks maxSpendNow(id), then calls spend(id, to, amount, memo). A memo is 32 bytes, public.
(04) Receipts
Loading…
(05) Contract
(Agent)
(Owner)
Not audited. The source is public and verified on Blockscout once deployed. Use amounts you can afford to lose.
(06) FAQ and risks
No. It is short and public, has no proxy and no admin over leash funds, but it has not been audited. Treat it as experimental and keep balances small.
At most the daily cap per UTC day, only to allowlisted addresses, only while the leash is running, and never more than the leash balance (fee included).
Whoever holds it can spend within the same limits: up to the daily cap, only to your allowlist. Caps reset at 00:00 UTC per calendar day, so up to 2× the cap can move around midnight. Press Stop as soon as you suspect a leak, then withdraw. The agent key can never withdraw or change the limits. The agent address is fixed per leash, so to rotate a key you open a new leash.
The cap counts per UTC calendar day and resets at 00:00 UTC. So around midnight up to twice the cap can go out within a few minutes (a full cap at 23:59, another at 00:00). Set the cap with that in mind.
Only the leash owner can withdraw, and only to their own address. A leash cannot be transferred to another owner. The contract owner's single power is setting the token address once.
Yes, but be careful. The vault sends plain ETH, so a contract that credits the sender (WETH, deposit or bridge contracts) credits the vault and the ETH is lost. Allow wallets, or contracts you know accept plain ETH for you. The console warns when a destination is a contract. Also avoid allowlisting the agent's own address unless you mean to let it pay itself.
It can send plain ETH to any allowlisted address, contract or not, but with no calldata. It cannot call functions or move tokens through the leash.
Anyone can open a leash for any agent address, so lists by agent and the receipts feed can contain spam leashes with copied labels or phishing memos. Labels and memos are shown as plain text, never as links. Check the owner of each leash; agents should pick their leash by id, not by label.
0.25% of each spend, charged on top, accrues in the vault as pending fees. Anyone can call flushFees() to push them to the burner, and anyone can call buyAndBurn() on the burner, which buys the token and sends it to the dead address.
Robinhood Chain. The console shows which network it is pointed at; the testnet build is for trying things before the mainnet vault is published.
(07) Start
Token CA
Only trust the CA posted on leashwick.pro and @leashwick.