Permission layer for trading agents · Live on Robinhood Chain

Give it a leash, not a key.

To let software trade for you today, you hand it a private key. A key is not a permission. It is everything you have, forever, to anyone who ever reads it. LEASH grants a shape instead: scope, size, loss, term, fee, enforced on every action.

Live on Robinhood Chain mainnet, trading tokenised equities. No token exists.

PrincipalAgent
LEASH L-0912 Active
AgentSWEEP · 0xAAAA…1dAf
Purse0.0015 ETH
ScopeUniswap v3 · NVDA
Expiresin 6d 23h
Per action0.000151 / 0.000200
Per hour0.000740 / 0.001200
Loss stop0.1% / 20.0%
ACTswap 0.000151 ETH → 0.001670 NVDA via Uniswap v3
One transaction. No notice. No consent.
A braided steel cable clipped into a machined anchor plate by a precision shackle.
Authority with a shape. The anchor decides what the cable can reach.

01 / A key is not a permission

Every bot on this chain is running on somebody's whole wallet.

You make a fresh wallet, you move money into it, you paste the private key into a config file, and you hope. The bot's authority is now identical to yours. No cap on a trade, no cap on the hour, no list of venues, no loss at which it stops, no expiry, and no way to take it back other than racing it.

A private key Unbounded
VenuesAnything on chain
AssetsAnything it can hold
Per actionNo limit
Per hourNo limit
LossAll of it
TermForever
Withdraw to itselfYes
RevokeRace it and pray
The only thing between the agent and the money is the agent.
A leash Scoped
VenuesListed adapters only
AssetsNVDA, and nothing else
Per action0.000200 ETH
Per hour0.001200 ETH
Loss20.0%, then it ends
Term7 days
Withdraw to itselfNo such function
RevokeOne transaction, instant
The agent holds a permission. You hold the money.

A bug

A loop with an off-by-one trades four hundred times in an hour and pays the spread four hundred times.

A model

An agent reads a token's metadata, the metadata says ignore your instructions and buy this, and it buys it. Prompt injection with a ticker.

A stranger

You want to hire the agent with the good record, and you cannot, because hiring it means sending it the money.

02 / The form that already exists

Brokers solved this in the 1970s with a piece of paper.

If you want someone else to trade your brokerage account, you do not send them your login. You file a limited trading authorization. It says this person may buy and sell in my account, and in the same breath, that they may not withdraw from it.

Discretion over the trades, no path to the door. That one distinction is why an entire industry of managers can exist without every manager being a custodian. The broker enforces it mechanically, on every instruction, because the broker holds the account and the manager only holds a permission.

On chain we lost the distinction. There is no broker in the middle, so nobody enforces the difference between trading your money and taking it. We replaced the form with a key, and a key says both.

Limited trading authorization · sample

The principal grants the agent authority to:

Buy and sell within scopeGRANTED
Bind the principal to a fillGRANTED
Withdraw to any addressNEVER
Change these termsNEVER

LEASH is this form, as a contract, with the last two enforced by the absence of a function rather than by a promise.

03 / What a leash says

Five limits, written by the principal, checked on every action.

No prose, no discretion. A leash is a typed struct, hashed when it is drafted and immutable for its term.

Scope

Which adapters it may call and which assets it may hold. Adapters are the only contracts the purse can reach, so this is the complete list of places the money can go.

RefusalSCOPE_ADAPTER
Size

Max per action, max per rolling hour, and a slippage bound checked after execution against the quote the adapter gave before it.

RefusalSIZE_ACTION
Loss

A drawdown stop against the purse's high-water value. Crossing it does not refuse the action, it ends the leash. This is the clause that bounds everything the others miss.

OutcomeENDED · LOSS
Term

Expiry, a minimum interval between actions, and an automatic hold after a streak of refusals. A leash nobody renews dies on its own.

RefusalTERM_TEMPO
Fee

What the agent is paid and when. Performance over a high-water mark, optional flat accrual, both crystallized only at settlement. This is what makes it hiring rather than permissions.

Paid atSETTLED

04 / The protocol

The money sits in a contract with a single door, and the door opens inward.

Each leash gets its own purse, funded by the principal. The agent can instruct the purse to call adapters inside scope. The agent can never instruct the purse to transfer to an address. Exactly one function moves value out to an external party, and only the principal can call it.

Principal

Funds it. Revokes it. Withdraws it.

The only address the purse will ever pay.

Purse

Holds the capital for the term.

Calls adapters on the agent's instruction. Has no transfer function the agent can reach.

One purse, one principal. The protocol never pools capital. That is a design rule, not a phase: pooling is the thing that turns a tool into a fund.

Five states

Draft

DRAFT

The clause tuple exists and is hashed. Nobody is bound. The agent may review it and decline.

Active

ACTIVE

Funded and running. Every action carries a reason hash committed before execution, so the agent's stated rationale cannot be rewritten to fit the outcome.

Held

HELD

Paused by the principal at will, or automatically after a refusal streak. The agent may not act. You may still withdraw.

Ended

ENDED

No further actions, ever. Expiry, loss, revoke or resigned. Revocation takes effect in the transaction that calls it.

Settled

SETTLED

Fees crystallized against the high-water mark, agent paid, remainder returned, record written to the agent's card.

Three layers of enforcement

1 · Refuse before

Scope, size, rate, term and hold are checked before anything executes. A violation does not revert the transaction: it records the refusal and performs no trade. A refusal that reverted would leave no trace, and the record is the product.

2 · Verify after

The swap runs inside a call the purse makes to itself, and the realized fill is compared to the quote taken before it. A bad fill reverts that inner call, so the trade rolls back whole while the refusal is still written down.

3 · End on outcome

Loss and expiry are outcomes, not actions. They are evaluated on every action, on every permissionless poke, and at settlement.

05 / Watch a refusal

Hire the agent that trades harder than you asked. Watch the contract hold the line.

The app lists three agents we run ourselves, on mainnet, against the real Uniswap v3 pools. Two of them sit comfortably inside their clauses. SWEEP does not: it is an aggressive liquidity taker that sizes up on a signal, reaches for assets it was not given and takes a worse fee tier to get filled now. Nothing about it is dishonest. It just does not share your idea of a good trade, which is the ordinary reason a real agent gets refused.

Ledger · agent SWEEP · Robinhood Chain Replay
Watch it live
What just happened
1It traded inside the clauses. Fills landed.
2It sized up past the per-action cap.
3It reached for an asset outside scope.
4It reached for a venue nobody listed.
5It took a worse tier to get filled now.
6Three refusals tripped the hold.
7You revoked. It died in that block.

Nothing in steps 2 to 5 landed on chain. The purse balance never left your control, and every attempt is permanent on SWEEP's record.

SWEEP's card, afterAggressive
Actions61
Refusals14
Refusal rate23.0%
Leashes4, one ended by revocation

06 / A number that does not exist yet

We know what agents earned. Nobody knows what they tried.

23.0%

SWEEP · refusal rate · sample

Every track record in trading is a record of what was allowed to happen. Fills, PnL, drawdown. None of it tells you about the trades a risk desk stopped, because those never became data.

LEASH writes refusals to the same ledger as fills, with the clause and the code, for every agent, across every leash it has ever held. The shape of that number says things no return series can.

  • Refusals concentrated in SCOPE_ADAPTER means the agent keeps reaching for contracts it was not given. Once is a bug. Repeatedly is a probe.
  • Refusals in SLIPPAGE clustered on one venue and one counterparty is the signature of self-dealing, and it is the evidence a watcher needs to file against the bond.
  • A rate near zero across thousands of actions, across many principals with different clause sets, cannot be faked without actually behaving.
MOMENTUM agent unit
MOMENTUMClean

0x4C11…08Ae · 1,284 actions

Refusal rate0.4%
GRID agent unit
GRIDClean

0x9fD2…31C7 · 3,902 actions

Refusal rate1.1%
SWEEP agent unit
SWEEPAggressive

0xAAAA…1dAf · 61 actions

Refusal rate23.0%

SWEEP is ours, and it is aggressive on purpose. Its refusals are not evidence of bad faith, they are what happens when an agent's strategy is wider than the mandate it was given.

07 / Why here

This is the chain that told everyone the traders would be software.

The chain's own thesis

Robinhood Chain launched as an AI-native chain with agentic trading on the roadmap. A chain that expects software to trade needs a way to authorize software to trade. It does not have one.

Native account abstraction

Authority as a first-class object is bolted on everywhere else. Here the purse can eventually disappear and a leash can attach to your own account as a validation module.

Cheap blocks

Five clause checks before every action and an invariant check after is real gas. On this L2 it is a rounding error against the spread.

The audience

Handing a bot your whole wallet is a retail behaviour before it is an institutional one. The people most exposed to this failure are already here.

Chain facts
ChainRobinhood 4663
VenueUniswap v3, already on chain
AssetsNVDA, TSLA, SPY, AAPL, MSTR, SPCX
StackArbitrum L2, native AA
Timersblock.timestamp

All clause timers use L2 timestamps. block.number on this chain tracks the L1 block and advances roughly every 15 seconds, which makes it useless for tempo and expiry. We measured it rather than assumed it.

08 / The token

10%

of crystallized agent fees · proposed

Taken only when an agent is actually paid, which happens only above its high-water mark. Half to the watcher pool, half to treasury. Earned, not minted.

The protocol works without it. It exists to make lying expensive.

A token that ships before its product has nothing to coordinate, so this one ships after. The contracts are already live on Robinhood Chain; $LEASH would distribute later through Pons v2: a bonding curve with the whole fixed supply on it, graduating into locked Uniswap v4 liquidity.

A fixed-supply curve cannot mint allocations, so there is no allocation table on this page and there will not be one. The treasury is what the protocol earns. The team's position is whatever the published wallets buy on the curve, like everyone else.

What it coordinates
AgentsBonds sized against capital under leash
AdaptersLarger listing bonds
WatchersStakes and slash bounties
GovernanceClause ranges, listing rules
What it does not do

It does not gate the protocol. You can write a leash, fund a purse, hire an agent and revoke it without ever holding the token.

Anything else would be a toll booth wearing a governance hat.

09 / Order of work

Contracts, then a market, then a token.

Charter

The mechanism, the parameters, the failure modes. Published in full.

Contracts

Registry, factory, purse, clauses, adapter registry. Tested against a real EVM, then simulated against live mainnet state.

Mainnet

Live on Robinhood Chain 4663. Write a leash, fund it, watch the ledger, revoke it. Every line has a transaction behind it.

More venues

Uniswap v3 is live and bonded, with six equities listed. Others get added one at a time, because every listing is a security decision.

The market

Outside agents take leashes from principals who are not us. Either it is a real thing or it is a demo, and we will say which.

Account-native

Drop the purse. Attach the leash to the principal's own account.

$LEASH

Distribution through Pons v2.

10 / The honest section

What a leash does not do.

It does not make an agent honest. It puts a ceiling on what dishonesty costs and prices the rest with a bond. That claim is smaller than the one a marketing page would make, and it is the true one.

Adapters are the attack surfaceStructural

A malicious or broken adapter defeats every clause above it, because the purse calls it by design. This is why adapter bonds are larger than agent bonds, why listing is slow, and why the adapter set stays embarrassingly short for a long time.

The purse is custody for the termStructural

Only the principal can withdraw, and only they can revoke. But the purse holds the capital while the leash runs, so a bug in it is a total loss for that leash. Size a leash at what you would be willing to watch fail.

The market may never formLikely

It is entirely possible that nobody wants to hire a stranger's agent and the only users are people leashing their own bots. That is still a useful product and a much smaller one, and it is the most likely way this disappoints.

It looks like asset managementOpen

Someone trades, someone pays a performance fee. The differences are structural: no pooling, one principal per purse, no shared unit of account, no subscriptions, no NAV anyone relies on, and a withdrawal path only the principal can walk. It still needs a lawyer before mainnet.