变化 UNTOLL 页面+CA监控 2026-11-01 11:36:20
摘要
标题: UNTOLL, the enforcement layer for agent trading → UNTOLL. The launchpad built on the enforcement layer;内容变动 +166 / -197
变化对比 (绿色=新增,红色=删除)
--- 之前
+++ 现在
@@ -1,207 +1,176 @@
-UNTOLL, the enforcement layer for agent trading
+UNTOLL. The launchpad built on the enforcement layer
UNTOLL
.
-ing
+fun
+The board
+Launch
+Standing
+Agents
+Docs
The layer
-The refusal
-On chain
-The proofs
-The chain read
-Run the demo →
-ENFORCEMENT AT SETTLEMENT
-It cannot spend
-past what you allowed.
-UNTOLL is the enforcement layer for agent trading.
-Connect your agent. It trades. It cannot exceed what you allowed, and every refusal is on chain.
-It sits between your agent and your wallet, so the agent trades wherever it already trades, and it can never spend past what you allowed. When it tries, the refusal is mined on chain as a
-ScopeViolation
-event: a published fact you can point at, rather than a log you have to trust.
-Watch it refuse ↓
-Check it yourself →
-the distinction
-· where the check happens
-The rule lives in the contract that moves the funds,
-not in the software that asked.
-deciding before
-Off-chain policy engines, in-wallet spend caps and gateway passports all decide before the transaction is submitted. They are advisory the moment the key leaves the process that was checking it, which is exactly the moment you needed them.
-deciding at settlement
-UNTOLL decides inside the contract that moves the funds. The scope lives in bytecode at the settlement path, where a jailbroken model cannot reach it: which targets, which selectors, how much per transaction, where the output may land, and until when.
-An EIP-7702 authorization tuple signs only chain id, delegate address and nonce.
-All scope therefore has to live in the delegate contract's bytecode
-, which is why the check survives a compromised agent rather than being talked past by one.
-the refusal
-· one command, on your machine
-Same session key.
-One passes, five are stopped.
-The demo starts a local chain in Prague mode, deploys the real
-SessionKeyDelegate
-, delegates an agent EOA to it with a real EIP-7702 authorization, installs one scope, and then runs the allowed action and five forbidden ones. The rows below are the output of a run, not a mockup of one.
-the agent acts through its session key
-scope: swap() on one target, output to the owner only, 1 ETH per tx, before expiry
-#
-attempt
-outcome
-1
-in-scope call, output to the owner
-PASSED
-the one thing the scope grants
-2
-the identical in-scope call, output redirected to the attacker
-REVERTED
-RecipientNotAllowed
-3
-redirect the output to the attacker
-BLOCKED
-ScopeViolation(RECIPIENT)
+A Uniswap v4 hook on Robinhood Chain
+The liquidity lives in the hook.
+There is no
+withdraw
+function.
+A token launchpad, and the first thing built on UNTOLL, the enforcement layer for agent authority. The bonding curve is the pool, graduation is a state check the code runs, and an agent can hold a scoped, revocable key here because the layer underneath enforces that scope at settlement.
+Read the hook →
+How the money stays in
+Test suite green.
+Deployed and source-verified on Robinhood testnet 46630.
+the graduation state-check
+LaunchHook.sol
+// graduation is a state check the code runs, not an admin call
+function
+_afterSwap(...)
+internal
+{
+if
+(reserves >= GRAD_THRESHOLD)
+_graduateInPlace
+(poolId);
+// same PoolId
+}
+// the pool's liquidity is held by the hook. there is no path out:
+function withdraw(...)
+// absent by construction
+function sweep(...)
+// absent
+function rescue(...)
+// absent
+A reading of the graduation state-check and the absent withdraw path. Read the
+verified source →
+Any figure shown on this site is
+illustrative sample data.
+the custody model
+The pool stays in the hook, and an agent can act on it either way.
+The hook holds the liquidity
+The bonding curve is the pool. Graduation is a state check the code runs on the same PoolId, so tokens graduate in place. The pool's share of every fee is held as liquidity, and the contract carries no withdraw, sweep, or rescue path.
+read how the money stays in →
+A key an agent can use and cannot abuse
+An agent holds a scoped, revocable key. The spending limits live in the wallet, not in the signature the agent produces, so a jailbroken model cannot widen its own allowance. A jailbroken agent tries five ways to drain it, and five revert.
+run the containment proof →
+the toll, on-chain
+Every trade pays 1%. The hook splits it and keeps the pool's share.
+1% fee, split on-chain · proposed
+35
+Operations
+runs the machine
+30
+Creator
+the launch's own cut
+25
+Active traders
+contemporaneous, non-wash
+10
+Buyback
+back into the curve
+POL
+The pool
+held in the hook, no withdraw
+The pool is not one of the four. It is held in the hook and compounds, and no function withdraws it. Fee shares are proposed sim inputs the operator signs before launch.
+The board
+the launchpad the hook runs, and its proof of traction
+preview · illustrative
+See all →
+M
+Merry Men
+$MERRY
+climbing
+human launch
+curve
+72%
+pool compounding
+· 214 in
+H
+Hood Rat
+$HOODRAT
+climbing
+human launch
+curve
+88%
+pool compounding
+· 431 in
+V
+Vlad
+$VLAD
+graduated
+human launch
+curve
+100%
+pool deepening
+· 1.2k in
+A
+Arrow
+$ARROW
+climbing
+curated lane · agent
+curve
+54%
+pool compounding
+· 96 in
4
-off-scope selector,
-drain()
-BLOCKED
-ScopeViolation(SELECTOR)
-5
-over the 1 ETH per-transaction cap
-BLOCKED
-ScopeViolation(PER_TX)
-6
-off-scope target, an address the scope never named
-BLOCKED
-ScopeViolation(TARGET)
-Attempts 2 and 3 are the same call one address apart, 100 bytes into the calldata. That single difference is what a coarse wallet allowlist cannot see and this delegate does.
-Measured at the end of the run:
-four
-ScopeViolation
-events mined, reasons RECIPIENT, SELECTOR, PER_TX and TARGET; one hard revert carrying the decoded custom error;
-attacker balance 0 wei
-.
-The keys are generated per run and never funded, so nothing on your machine is at risk. A full run, captured 2026-09-12 on a local fork of testnet 46630:
-the terminal output, line by line
-. Source:
-github.com/hookwright/untoll-agent-demo
-.
-# clone it and watch it refuse. two commands, a few seconds.
-git clone https://github.com/hookwright/untoll-agent-demo
-npm install && npm run demo
-The delegation is real, not simulated.
-The run prints the code at the owner EOA before and after:
-0x
-becomes
-0xef0100
-followed by the delegate address, which is the EIP-7702 delegation designator. It also prints the keccak256 of the deployed delegate runtime, and
-npm run verify:bytecode
-checks that hash against a pinned anchor the build pipeline never writes.
-on chain
-· robinhood chain testnet 46630
-Five contracts,
-deployed and source-verified.
-Open any of them on the explorer and read the code that runs. Every byte count below was read with
-eth_getCode
-against chain 46630, not taken from a deploy log.
-contract
-address
-runtime bytes
-LaunchHook
-0x6793347aE686A80c65BA49204Fe33b5C8bbB6aC8
-22,843
-read it →
-PoolManager
-0x8366a39CC670B4001A1121B8F6A443A643e40951
-24,009
-read it →
-LaunchToken
-0xEdD7231CF1e60974a204CD8421E4C116a4955320
-5,972
-read it →
-TokenFactory
-0x325407204587605AE974a82406F70dD7A1E5A961
-4,839
-read it →
-POLMath
-0x3bc569e059c359a430722f4adaaf37bd64915037
-2,080
-read it →
-ReputationRegistry
-0x0f25a173B280b65326f5fB7ACa85EA45D4B9Ea37
-1,359
-read it →
-The five UNTOLL contracts are
-LaunchHook, LaunchToken, TokenFactory, ReputationRegistry and POLMath
-, all source-verified on Blockscout under solc v0.8.26.
-PoolManager is Uniswap v4's
-, listed here because it is what the hook attaches to, and it is theirs rather than ours.
-The scoped-key delegate is a different question and gets a different answer.
-SessionKeyDelegate
-runs on the local chain the demo starts, with a real EIP-7702 delegation, and it does not yet have an address on 46630.
-the first proof the rail is real
-· the launchpad
-The launchpad is the enforcement layer
-applied to launching.
-The curve is the pool, the liquidity graduates in place and stays, and the rules hold at settlement rather than in a promise. That is the bar serious launches actually require, on Robinhood Chain first.
-The hook has no withdraw function, no sweep and no rescue path, and those are invariants the suite checks rather than lines in a readme. Custody sits behind two distinct wallets welded as immutables at construction.
-●
-130 tests passing, 18 suites
-●
-5 invariant properties
-●
-deployed on testnet 46630
-●
-no pool has traded yet
-The hook, on GitHub →
-The proofs →
-What still needs a human →
-# count the tests yourself, on a cleared cache
-git clone https://github.com/hookwright/untoll-hook
-cd contracts && forge test --summary
-The five invariant suites are
-NoRug, CurveConservation, SplitConservation, AccrueOnly and FlipReentrancy
-. The count above is the public repo.
-No pool on 46630 has ever traded
-, so every figure on this page is a property of the code and of the chain, and none of it is market activity.
-check it
-· no signup, no wallet to connect
-01
-The proofs
-→
-Every claim on this site with the exact command, address or block range that checks it.
-02
-The chain read
-→
-Every Uniswap v4 hook on Robinhood Chain, enumerated from the chain itself, with the method published so it can be reproduced or falsified.
-03
-Stop an agent draining a wallet
-→
-The answer written out: scope the key, not the prompt. Includes the terminal output and the command that reproduces it.
+401k
+$401K
+new
+human launch
+curve
+18%
+pool starting
+· 31 in
+S
+Sheriff
+$SHRF
+climbing
+human launch
+curve
+63%
+pool compounding
+· 148 in
+your standing
+Your
+standing
+is the flex.
+The on-chain record of what you shipped: launches that survived, calls that landed, welded to your handle. It is how you reach the curated lane, the SDK, and the sandbox. Show up and it climbs, go quiet and it decays.
+See the standing sheet →
+worth posting
+When it's good, show it.
+V
+vlad.eth
+@vladonchain · standing 1,240
+I was early on
+$MERRY.
+joined at curve 14% · rank 7 this run
+the agent lane
+A key an agent can use and
+cannot abuse.
+The spending limits live in the wallet, not in the signature the agent produces, so a jailbroken model cannot widen its own allowance. A jailbroken agent tries five ways to drain a scoped key, and five revert, while the one allowed call still goes through. Run it yourself: no key, no funds, on local Prague and a fork of 46630.
+Run the containment proof →
+Scoped keys
UNTOLL
.
-ing
-The enforcement layer for agent trading. The agent trades wherever it already trades, and every refusal is on chain.
-The layer
-The refusal
-On chain
-How it works
-The vision
-Check it
-The proofs
-The chain read
-Every v4 hook on 4663
-What still needs a human
-Code
-The demo
+fun
+The liquidity stays in the pool and compounds. The board is where you watch the money move.
+The board
+All launches
+A token page
+Standing
+A profile
+Build
+Launch a coin
+For agents
+The SDK
+Scoped keys
+Read
+Docs
+The four buckets
+Keep and compound
+Security
+Go untolling
+untoll.ing
↗
-The hook
-↗
-The verified source
-↗
-Follow
@Untolling
↗
-@hookwright
+Node: @hookwright
↗
-Byte counts read with
-eth_getCode
-against Robinhood Chain testnet 46630, last re-read 2026-09-12 at block 117,931,305. Verification status read from the Blockscout API. Test counts from
-forge test
-on the public repo. Demo outcomes from a local run of
-npm run demo:fork
-on 2026-09-12. A wrong number on this page gets corrected:
-@Untolling
-.
+UNTOLL runs on Robinhood testnet 46630, where the contracts are deployed and source-verified. Board figures and names are sample data.