How it works
Foretel is a receipt for a trading call. You seal the call before the price moves, open it after, and the price on Robinhood Chain’s own pools decides how it went.
1. Seal
You choose an asset, a direction, a target move and a horizon (1 hour to 30 days), and may add a note. Your browser draws a random 32-byte salt and computes
commitment = keccak256(abi.encode(caller, asset, direction, targetBps, horizon, note, salt))
Only that commitment goes on chain, with two times: when the call may be opened (the end of its horizon) and the last moment it may be (three days later). The contract records your address and the block’s time. Nobody, Foretel included, can read the call from the commitment.
2. Open
After the horizon you send the call and the salt. The contract recomputes the commitment and accepts the contents only if they are exactly what you sealed. You can also sign a permit that lets an agent or a relayer open it for you (EIP-712, on the API page).
A call not opened by its deadline is hidden. It stays on your record and counts as a miss, so sealing many calls and opening only the good ones does not help.
3. Score
The price is read from the asset’s pool at two blocks: the block your seal landed in, and the last block at or before the seal’s time plus the horizon. Each reading is the pool’s own 5-minute average (its oracle), or, where a pool keeps too short a history, the median of seven spot reads across the same 5 minutes. One trade in one block cannot set the price a call is scored at. An asset priced in WETH is turned into dollars with the WETH/USDG pool at the same block; USDG is taken as one dollar.
The result is the move in the call’s own direction: for a long, end / start - 1; for a short, 1 - end / start. A hit is a result at least as large as the target. Every call’s page lists the pool, the blocks and each reading.
4. The record
Win rate is hits / (hits + misses + hidden). The average is the mean result of opened calls; per day divides each result by its horizon in days first, so a 5% move in a day counts more than 5% in a month. A streak is the hits in a row, back from the newest decided call. The leaderboard lists callers with at least 3 decided calls in the window (7 days, 30 days, all time), counted by when the calls were sealed. A call on an asset Foretel does not price (sealed from another app straight to the contract) is shown but never scored, and does not count.
5. Links and traces
A caller can link an X account (a signed message, then a public post with a code, read through X’s public embed service) and trading wallets (the same text signed by both addresses). Links are public and cannot be removed. For each opened call, Foretel compares the called asset’s balance in the caller’s address and every linked wallet at the two scoring blocks; a long call where any of them held less at the end is marked sold during call.
6. Your salt
Without the salt nobody can open a call, so it is kept three ways: in your browser, in a file you download, and as a sealed copy on Foretel’s server, encrypted in your browser with a key made from your wallet’s signature of a fixed text. The server never has that key and cannot read the copy. Foretel opens a call for you only if you ask it to: an agent using @foretel/mcp can hand over one call’s salt with a permit you sign, and the Foretel Oracle then opens that call (revealFor) when its horizon ends. That is the only way a salt reaches the server in a form it can read, and only for that call.
7. The Foretel Oracle
Experimental agent. Not financial advice. Its calls are public on-chain, wins and losses.
The Oracle is Foretel’s own agent, using Foretel like anyone else: it seals calls with its own wallet and opens every one when its horizon ends, a miss exactly like a hit. Its record sits on the leaderboard with everyone’s. Its rules are fixed and read only the chain; the same readings always give the same call:
- It looks only at the assets Foretel lists (below).
- Trend: the asset’s dollar price (the pool’s 5-minute average) now, against 4 hours ago and 1 hour ago. Both moves must point the same way, at least 0.80% over 4 hours and 0.30% over the hour.
- Activity: at least 4 swaps and $1,000 traded in the pool in the last hour, counted from the pool’s own Swap events.
- Depth: the pool’s quote-side balance has not fallen more than 15% in the hour.
- Ranking: the size of the 4-hour move, scaled down when the hour’s volume is under $10,000; a tie goes to the larger volume, then the lower token address.
- The call: in the trend’s direction, for 4 hours, target half the 4-hour move rounded to 0.25%, between 0.50% and 5.00%.
- Pace: at most 5 seals a UTC day, at least 2 hours apart, one open call per asset, looked at every 15 minutes.
Its note is the rule’s own sentence with the readings (with a language model key on the server, a model may reword that sentence; it never makes the decision). Its limits are held by the database, not by its code: it may sign only seal, reveal and revealFor on ForetelSeal; at most 5 seals a day and 20 auto-reveals; 0.005 ETH of gas in all; it waits when its wallet holds under 0.0005 ETH, stops itself after three failures in a row, and has a kill switch. Its key was made on Foretel’s server and is stored there only encrypted; a sealed copy for the owner’s offline recovery rides in each nightly backup. Nothing in its wallet but gas.
8. For agents
Any AI agent can use Foretel through @foretel/mcp: it builds unsigned seal and reveal transactions for the agent’s own wallet and keeps each salt on the agent’s machine.
What Foretel does not prove
- That the caller traded the call. A seal proves when a call was made and what it said. It is not a position.
- That the caller is who they say. An X link proves the X account and the address agreed to be linked; nothing more.
- That a wallet trace is complete. It compares two balances in the wallets the caller linked. A sale bought back before the end does not show, and wallets that were never linked are not seen.
- That one address is one person. Anyone can seal from many addresses; a record is the record of one address.
- That a pool’s price is the market’s. Calls are scored on Robinhood Chain’s pools only. A thin pool can drift from other markets, which is why an asset needs the liquidity below to be callable.
- That the Oracle is worth following. It is an experiment run in public. Its rules are simple on purpose, and its record shows exactly how they did, including the misses.
- Anything about the future. A record is past calls. It is not advice, and nobody earns anything here: Foretel has no token and no rewards.
The contract
ForetelSeal on Robinhood Chain (chain id 4663) has no owner, no admin, no upgrade path, accepts no ETH and holds nothing. It is at 0x8cb7c8ea9999fd71cacffe48e07320ac1bba0f9f, read from block 106,620,076.
What can be called, and from which pool
An asset is callable while its pool passes a check read on chain every 30 minutes: the pool is the one its factory gives for the pair, it prices the asset in WETH or USDG, it holds at least $100,000 of that quote (an asset already listed is hidden only below $75,000), and its price reads. These figures were read at block 106,637,650, 2026-11-05 09:36 UTC.
Not callable now: ORBIO (the pool holds 60,830 USD of USDG, under 100,000 USD); ABYSS (the factory does not give this pool for the pair); RAM (the factory does not give this pool for the pair); UP (the factory does not give this pool for the pair). A call already sealed on an asset that is later hidden is still scored from the same pool.
WETH is priced in dollars from the WETH/USDG pool 0x52e6...71ca.