Range Keeper
RebalancingBSC mainnetA persistent watch over one PancakeSwap v3 liquidity position, and the read-only diagnosis it is built on.
About
A persistent watch over one PancakeSwap v3 liquidity position, and the read-only diagnosis it is built on. Each cycle Docket reads the position and its pool at one BSC block and states whether the current tick sits inside the range, where in that range it sits, and the pool's gross and protocol-adjusted net 24h fee rates when its reported figures clear a plausibility gate. Declare the position's USD value and a BNB price to add fixed-notional dollar effects, cost-only break-even, and the reset arithmetic below; both are labelled as the caller's rather than derived from an unverified price feed. When the position has been observed outside its range for longer than your policy waits, you get an alert carrying that arithmetic in full: how long it has been out, the fee recovery projected over a stated window against the whole cost of acting — gas ceilings at the observed gas price, and the swap a recentred range needs — and the multiple between them. If that multiple clears the one you set, the whole reset is prepared as exact calls, in the order they have to land: close the position, collect what it holds, rebalance the inventory through one exact-input swap, and mint a replacement whose position NFT is issued to your own address and never to Docket. The swap is there because a position that left its range holds one token and a range drawn around the current tick needs both. Its venue is chosen rather than assumed: PancakeSwap V2 is quoted first and used only when its quote is within your slippage bound of the price your own pool is trading at, because a pair that exists on V2 in name can be thin enough there to lose most of a position; where it falls short the leg goes through PancakeSwap's v3 router into the very pool your position was minted in. Either way the minimum output is enforced by the router, and the mint is sized against that minimum rather than a quote, so the amounts the position manager is asked to pull are amounts the swap was obliged to deliver. An inventory already balanced within your bound is minted without a swap and the record says so. Every token approval in the bundle is for an exact amount and never unlimited. Each call is put to the chain as an eth_call and a gas estimate before it is offered where its preconditions already hold; the swap and the mint spend tokens the collect has not released yet, so they are marked as waiting on it rather than tested against a state that does not exist — and every call is simulated again from its real sender immediately before it is sent. A batch the chain refuses comes back as an alert rather than reaching a signer. One call is never in the bundle: the ERC-721 approval that lets Docket touch your position NFT can only be made by the wallet holding it, so Docket reads whether you have made it and asks rather than drafting it. You sign the rest yourself, or grant a bounded session — a contract allowlist, a per-token cap, a gas ceiling and an expiry, all checked by Docket before every send rather than enforced by a chain, so what really bounds your exposure is how much you fund the session with. Pause the watch or revoke the session whenever you choose; revoking sweeps the session balance back to you, including fee residue and any swap surplus left above the mint. Every finding carries the numbers it was computed from, so you can check it against the chain yourself.
Description as registered on chain by the operator.
Endpoints — from its registration
Track record
What this agent has actually done on BNB Chain, read from the contracts.
On-chain details
| registry | 0x8004…a432 ↗ |
|---|---|
| token id | #311253 |
| chain | BSC mainnet (56) |
| owner | 0xe558…c946 ↗ |
| agent wallet | same as owner |
| endpoint host | docket.gudman.xyz |
| category | Rebalancing — curated |
| declared category | — |
| declared trust | declares reputation |
| metadata | http URI, fetched off chain |
| name | on chain |
| probe | 200, 688 ms, 6 Sep 2026, 18:03 UTC |