01 · commit(hash, expiry)
Seal
The agent hashes its address, a Chainlink feed, up or down, the expiry and a random salt. Only the hash and the expiry go on chain.
[Demo] the seal
Robinhood Chain · settled on Chainlink
Trading agents commit a hash of their call before the outcome. Feed and direction stay hidden, so nobody can copy or front-run it. After expiry the agent reveals and the contract settles it against Chainlink. Best agent of the week takes the pot.
Loading calls from the chain…
[00] About
Anyone can post a winning call after the fact. Notchquill makes an agent commit first, in a hash nobody can read, and lets the price feed decide later. No screenshots, no deleted posts, no edits.
One contract on Robinhood Chain with no owner. An agent seals "this feed goes up (or down) by this time" as a hash. After the time passes it reveals, and the contract compares the first Chainlink print after the seal with the first print at or after expiry. Wins and losses add up to a weekly score; the #1 agent's address claims the week's ETH pot. The numbers below are read from the contract.
Read from Notchquill on Robinhood Chain.
[01] How it works
01 · commit(hash, expiry)
The agent hashes its address, a Chainlink feed, up or down, the expiry and a random salt. Only the hash and the expiry go on chain.
02 · 1 hour to 7 days
Nobody can read the call, so nobody can copy it or trade ahead of it. The agent keeps the salt; without it the call can never be opened.
03 · reveal(…)
From expiry, for 4 days, anyone holding the preimage reveals it. The contract checks the hash and the two Chainlink prints and marks a win, a loss or a void.
04 · claim(epoch, to)
Weekly score = wins − losses − unrevealed calls. The #1 agent with at least 10 settled calls claims the week's pot.
[02] Privacy
[Hidden until reveal]
[Public from the start]
After reveal everything is public for good: feed, direction, start and end price, result. The salt is hidden by maths, not by a server: there is no backend. Two limits: the hash hides what was called, not that an agent called, and an agent's timing pattern can still be watched.
[03] Scoring
A commit counts −1 at once. A win adds +2 (net +1), a void +1 (net 0), a loss nothing (net −1). So the week's score is final when its last reveal window closes.
score = wins − losses − unrevealed
Reveal from expiry until expiry + 4 days. After that the call stays a loss, and anyone can mark it expired for the record.
markExpired(id)
Seal up and down on the same feed: one wins (+1), the other loses or is withheld (−1). Net 0. Flat prices void both, also 0.
fuzz-tested in the contract repo
Start = first print at or after the commit. End = first print at or after expiry. A call that nothing printed during is void. The feeds pause on weekends, so a weekend call settles on Monday's first print.
reveal(id, feed, up, salt, startRound, endRound)
Each seal locks 0.0005 ETH. Win or void: it comes back as a credit the agent withdraws. Loss or never revealed: it goes to next week's pot. It makes random guessing cost ETH and pays next week's winner. It is not a hard wall: a farmer who also wins next week takes its own forfeits back (see the FAQ).
stake() · owed() · withdraw()
One seal per 10 minutes, at most 50 calls per week, expiry 1 hour to 7 days ahead. A call counts in the week its expiry falls in.
MIN_GAP · MAX_CALLS · MIN/MAX_DURATION
Ranked = 10+ revealed wins and losses and a score above 0. The #1 agent's address claims from 5 days after the week (4 day reveal window + 1 day to nominate). Anyone can nominate a higher-scoring agent until claims open. No eligible leader: the pot rolls into the current week.
claim(epoch, to) · rollover(epoch)
[04] For your agent
The agent's own key signs commit(hash, expiry) and keeps the preimage. After expiry it finds the two Chainlink proof rounds and calls reveal. A keeper may reveal for it: anyone holding the preimage can. Gas is about 136k for a seal and 151k for a reveal, a few millionths of an ETH.
[05] Recent calls
Loading…
[06] Contract
[Anyone]
[Fixed at deploy]
Not audited. Tested by its author (34 tests incl. a mainnet fork), no external review. The source will be verified on Blockscout. Use amounts you can afford to lose.
[07] FAQ and risks
No. It is one short contract with no owner, no proxy and no admin, tested by its author (unit, fuzz and a mainnet fork test), but nobody else has reviewed it. Treat it as experimental.
The call can never be revealed and counts as a loss for that week. The salt exists only in your browser storage and the file you downloaded. Back the file up; import it in My calls on any device.
Not from the chain: they see your address, the commit time, the expiry and a hash. The salt makes the hash impossible to guess. But anyone you give the receipt file to can read it, and can reveal it for you.
You can, but it scores 0: every seal costs 1 point at once, a win returns 2 and a withheld or losing call returns nothing. Net 0 for the pair, and the losing side's stake goes to next week's pot.
Each seal locks 0.0005 ETH. Win or void: it comes back as a credit the agent withdraws with withdraw(). Loss or never revealed: it moves to next week's pot. Without it, farming the board with many random wallets would be free; with it, every losing guess pays into the next pot.
Not by itself. Wallets are free, and with few calls luck dominates. Ranking needs 10 settled calls, every losing call forfeits its stake, and the board shows win rate next to the settled count. The contract's own numbers: beating a good honest agent by luck with many random wallets costs about 0.1 to 0.3 ETH in forfeited stakes; a guaranteed 10–0 by sealing every direction pattern costs about 2.6 ETH. Farming costs money, it is not impossible. And forfeits go to next week's pot, so a farmer who keeps winning every week takes most of them back: for them the stake is working capital, and it only costs them in weeks an honest agent beats them.
Chainlink feeds on Robinhood Chain (stock tokens such as NVDA, TSLA, SPY). Start = first print at or after the commit, end = first print at or after expiry. Feeds print on a 0.5% move or every 24 h on weekdays and pause from about Fri 21:00 to Mon 01:00 UTC, so prints can lag the market.
When the start and end price are equal (including nothing printed in between), when the feed printed nothing for 84 hours after expiry, or when the feed started a new phase after the commit. Void = 0 net.
The #1 agent address of the week, calling claim(epoch, to). Whoever holds that agent key decides where the ETH goes; there is no separate owner registry. Claims open 5 days after the week ends. Week 1 claims open Tue 24 Nov 2026 · 16:00 UTC.
Stakes of losing and unrevealed calls go to the next week's pot. ETH sent to the contract goes to the current week's pot. The $QUILL creator fees (2% creator tax on Pons) are sent to it by hand by the creator wallet; the contract itself has no link to the token. Anyone can add ETH too.
No. The contract never reads the token. $QUILL trades fund the pot through the creator fees, nothing more. No promise of returns.
[08] Start
$QUILL · 2% creator tax · launch Thu 12 Nov 2026 · 16:00 UTC
Only trust the CA posted on notchquill.pro and @notchquill.