$NOCK is live.
LP positions that know when the market opens, closes, and reports. Set a schedule once, the range moves itself around it.
ca: 0x6563f371dd5e669a9627bf9c10c89e121512df7f
https://t.co/thrtulD8Qa
Trading halts are only calendar event nobody can schedule.
Regulator stops trading on underlying, sometimes for minutes, sometimes for a session.
Token keeps trading anyway, and every range sitting in that pool becomes a guess.
halt is a trigger like any other in our list. Most people will attach pause() to it and let liquidity sit out until real market comes back.
Usual failure mode in automated LP is a bot deciding your rebalance was worth executing at any price.
@Nockdaq guarantees that slippage bound lives in your vault, and a keeper that cannot meet it goes home empty.
We call it a soft limit and put that phrase in interface at moment you place order, not in docs where nobody reads it.
Reason is simple. First person who gets partially filled and writes a thread about it will be right, and only question is whether we said it first.
One-sided Uniswap range is a limit order that most people never recognize as one.
Put liquidity entirely in USDG just below current price and you have said: convert my dollars into this stock if price comes down here.
Price arrives, swappers trade against your position, and you end up holding stock. Exact same outcome as a limit buy.
Difference is that while it waits, it earns fees off every swap crossing your tick. Order that pays you for patience instead of just sitting in a book.
Analogy breaks in three places, and every one of them matters at moment you place order.
Fills are partial. Price has to physically move through your range, not just touch it, so a wick that clips edge fills a fraction and leaves rest waiting.
Fills reverse. Price crossing back up through your range sells stock you just bought, back into USDG. Exchange limit order stays filled. This one un-fills.
And nothing guarantees execution. Price can sit one tick above your range for a month while you collect nothing at all.
No candles anywhere in this product. No green line pointing up and to right, no bulls, no robots, none of visual vocabulary every trading interface reaches for by default.
Bowstring is price line. Tension is wait before a fill. Depth gets drawn along string instead of as mountains stacked on either side of it.
Palette is ink, forest, one signal green for live range, brass for string itself, red reserved strictly for warnings.
Half of that is aesthetic preference and we will admit it. Other half is functional.
A candle chart trains your eye toward last five minutes, and every decision this product asks you to make lives weeks ahead of that: which earnings date to sit out, what happens on a half day in November, whether your range should be awake on a Sunday.
Interface that screams at you about a five minute wick teaches wrong instinct for an asset that stops trading at four o'clock. So we drew a different one.
Session hours are not scraped from anywhere. They are derived: 09:30 to 16:00 ET, minus holiday list, minus early closes.
Sounds pedantic until you look at what scraping would mean. Issuer calendars are a licensed product.
Nasdaq Data Link and Refinitiv sell that data, and reselling it through a contract is a lawsuit waiting to happen.
So we compute what can be computed and take dates from SEC EDGAR and IR pages. Slower, less complete, and it does not put protocol in licensing territory.
We support v3 and v4 pools, canonical Uniswap Labs deployments both, and we deploy neither.
Ceiling on what we can build is set by somebody else's contracts. In exchange you are not first person testing a rewritten AMM with your own money.
collect() sweeps accrued fees into your vault without touching range itself.
Most people leave fees sitting inside position for weeks because claiming them manually costs gas and attention.
Meanwhile those fees are exposed to same price movement as rest of position, so a good week of earnings can quietly get eaten by Thursday.
Attach collect() to session close and fees land in vault every single day, separated from range and no longer riding market. It is smallest action in product and probably one most people will use daily.
Ex-dividend dates move price by a known amount on a known morning, and almost nobody providing liquidity treats them as an event.
Mechanic is simple. Stock opens lower by roughly dividend amount because buyers past that morning no longer receive it.
Not news, not a surprise, pure accounting, and it happens four times a year on most large caps.
A tight range sitting across that open takes a mechanical hit it could have stepped around entirely. Worse, it fills you asymmetrically on wrong side while doing it.
Same trigger list that handles earnings covers this: exit to USDG the night before, recenter after open, or widen and collect fees off volume it brings. Choice is yours, but ignoring it because nobody flagged it is not a choice.
Everything settles in $USDG, and that was a decision rather than a default.
Multi-collateral sounds generous until you are holding four wrapped stablecoins with four different depeg histories and a rebalance that has to route through whichever one is deepest that morning.
Every extra quote asset multiplies pool combinations, thins liquidity across them, and adds another thing that can break at 09:30 while your range is trying to move.
One quote asset means one set of pools, one thing to price, one thing to audit.
Half days are where scheduling quietly breaks for everyone else.
Day after Thanksgiving, Christmas Eve, July 3rd. Market closes at 13:00 instead of 16:00, and any rule written against a fixed hour fires three hours into a book that already went home.
Widening at 16:00 on a half day means you spent an entire afternoon in wrong regime, and tightening at 09:30 on a holiday means tightening into nothing at all.
There are roughly a dozen of these a year, they are published months ahead, and no LP interface anywhere accounts for them.
Our oracle derives them from same rule as every other session, converts them to block windows, and posts them in advance under bond.
Nothing unusual happens to your position on those days, which is entire point of building it this way.
pause() does not sell anything. It pulls your liquidity out of pool, holds both tokens inside your vault, and mints nothing until next trigger fires.
Difference matters more than it sounds. Flattening to USDG means two swaps, slippage on both, and a realized position every time weekend comes around.
Pausing means your exposure stops moving without a single trade happening.
Friday 16:00 your liquidity goes to sleep, Monday 09:30 it wakes up in a range built around whatever price is by then. Weekend risk drops to nothing and you never touched a swap router.
A keeper is a bot that watches your trigger and calls an action already sitting in your vault.
Sometimes it fails: network drops, gas spikes at a busy open, a reorg eats transaction. Window closes, range stays put.
What happens then:
- keeper posts bond in $NOCK before serving any vault
- bond size caps how much TVL it can cover
- missed window slashes part of that bond
- compensation routes straight to affected vault
Failure is not eliminated, it is priced. Missing your window costs a keeper more than executing it, and that sits in a contract rather than a support policy.
Universal Router is contract that handles your swap when you trade on Uniswap. Every app that connects to Uniswap needs its address.
Most chains have version 2.0.
We only has 2.1.1. So if you copy setup from an Arbitrum guide, your code points at an empty address and nothing works until you spot it.
Small thing worth knowing if you build here: there is no Universal Router 2.0 deployment on Robinhood Chain. Only 2.1.1.
Half of every integration guide written for Arbitrum quietly assumes otherwise.
Vault holds position NFT, stores your rules as an array, and enforces them against every keeper that comes knocking. Owner is you.
By end of sequence your range is wide, flat to USDG, or paused for weekend, depending on what you wrote weeks ago.
Human involvement between bell ringing and range moving is zero. Withdrawals need permission from nobody, including us.
Job of this one is to know what trading day looks like before it happens.
Night before, it derives session windows from a fixed rule: 09:30 to 16:00 ET, minus holiday list, minus early closes.
Each instant converts into a block range and posts to chain under a 5,000 NOCK bond.
It cannot touch a single position. All it produces is public data with money behind it, challengeable by anyone for 24 hours, and a wrong date costs it that bond.
Keeper reads your vault, finds a rule matching fired trigger, and calls that action.
Its authority ends at list you wrote. It cannot add an action you never approved, execute before a trigger fires, or exceed slippage limit you set.
It cannot withdraw funds, edit rules, or reassign ownership either. Each of those reverts rather than failing quietly.
What it can do is be late, which is why its bond exists.