Ingot on Robinhood Chain
Uniswap v4 Hook Contract 0x161559abf6aa9e5046c4ab6dcd09984505a820cc on Robinhood Chain · Custom pricing · Verified contract
- Volume (24h)
- $114
- Value locked (TVL)
- $0
- All-time volume
- $114
- Pools using this hook
- 1
- Swaps (24h)
- 3 (2 traders)
- Total swaps
- 3
What it does
Every swap in the Ingot home pool pays a flat 1% toll on the ETH side, which is booked for the smith, hall and house payees, so buyers and sellers pay the same rate.
This read was written for the hook 0x01f6…e0cc on Robinhood Chain and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.
How it works step by step
- Charges a flat 1% toll (TOLL_BPS = 100) on the ETH side of every swap in its own home pool, where ETH is currency0 and the ingot is currency1
- Holds the toll inside the PoolManager as an ERC-6909 ETH claim minted to the hook itself, so no ETH is transferred during the swap
- Books each toll into three tills: 80% to the smith, 10% to the hall, and the remaining 10% plus rounding to the house
- Lets only the matching till payee call tap() to burn the claim and take the ETH to their wallet
- Refuses any pool other than the single canonical home pool and only allows initialization by the Forge
- Assembles ERC-7572 contract metadata on-chain from name, image, description and links written at construction
- Swap behaviour
- Swaps where ETH is the specified side are tolled before the pool runs: on exact-in ETH sells the toll is carved off the ETH input, and on exact-out ETH buys the pool is asked for grossed-up ETH so the toll is a slice of it. Swaps where the ingot is the specified side are tolled after the swap from the ETH that actually moved, so buyers paying exact-out ingots pay the toll on top of the ETH paid, and sellers receiving exact-in ingots receive the toll deducted from ETH produced. The toll is always 1% of the ETH side in both directions and is charged on every swap in the home pool.
- Liquidity behaviour
- No liquidity callbacks. Liquidity add, remove and donate hooks are present in the interface but revert with NeverCalled, so liquidity actions on this pool are blocked by the hook.
- Fee behaviour
- Uses a fixed 0 pool fee and instead applies a constant 1% toll on the ETH side of each swap through return deltas. The toll is split 80% smith, 10% hall and 10% plus rounding to house, and is not adjustable after construction.
- Owner & admin controls
- The owner is renounced to the zero address in the constructor, so there is no owner after deployment. Immutable addresses for smith, hall, house and forge cannot be changed. Each payee controls only its own till withdrawals. No pause, blocklist, fee change or upgrade path appears in the source.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize restricts pool creation to the Forge with the canonical key. beforeSwap and afterSwap compute and book the toll and return it as a delta to the PoolManager. beforeSwapReturnDelta and afterSwapReturnDelta enable the toll to be taken from the swap amounts.
Security & trust assessment
Risk level: low (verified source, high confidence).
Who controls it: No privileged key can change fees, block trades or move pool funds. The only roles are the three fixed payees, each limited to withdrawing its own till, and the forge address, which is only used for the one-time pool initialization.
Risk to user funds: The hook holds ETH claims in the PoolManager equal to all booked tolls and can release them only through tap() by the matching payee. Trader funds are not custodied by the hook beyond the 1% toll, and no function lets anyone else move the claims.
Security findings
- [info] Hook takes a fixed 1% toll via return deltas: beforeSwap and afterSwap return deltas that move 1% of the ETH side of every home-pool swap into hook-held ERC-6909 claims. This is an intentional and immutable tax on traders in this pool.
- [info] Ownership renounced at construction: The constructor calls renounceOwnership(), leaving owner() as the zero address, so no account can change fees, pause the pool or alter payee addresses.
- [low] Payees withdraw claims through tap(): Each payee calls tap() to burn its till's ETH claim and receive ETH. Balances are tracked in the _till array and checked against the requested amount, and a reentrancy flag guards the unlock path.
- [low] Swaps can revert on unusual amounts: OddAmount and Unfilled reverts can block swaps whose amounts overflow int128 or whose ETH-specified leg is only partially filled, so some trades may fail rather than settle.
Contract details
- Verified source
- Yes (Ingot)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 11,330 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, erc6909-claims, moves-currency, ownable, return-delta, self-unlock, tax
Pools using Ingot
- ETH / FORGE (0.00% fee) — 24h volume $114, TVL $0, 3 swaps today