protocol · version 1
How a call works.
Everything here can be checked without us. A call is a Solana transaction and a drand round. The server only indexes, opens and grades what anyone else could open and grade the same way.
The transaction
A call is one transaction signed by the caller's wallet, with four instructions:
| 1–2 | Compute budget: a 360,000-unit limit and a small priority fee. The memo program checks and logs every byte, about 350 units a byte. |
| 3 | A System transfer of at least 0.001 SOL from the caller to the ledger …. The fee is the pot, and it is also the index: the ledger's history lists every call. |
| 4 | A memo: foresaw:1: followed by the base64 of an age file. |
The fee payer who signs the transfer is the author. The transaction's block time is the moment of the seal, and nobody can choose it.
The ciphertext
The age file has one recipient stanza, -> tlock <round> <chain hash>, made by tlock-js. The chain must be drand quicknet, 52db9ba7…c84e971: a round every 3 seconds, and round r is published at 1692803367 + (r − 1)·3 unix seconds. That time is when the call opens.
Encryption needs only quicknet's public key. Decryption needs the round's signature, which the League of Entropy's nodes produce together, by threshold, when the round comes. Until then it does not exist.
What is inside
JSON, at most 240 bytes, with short keys because every byte is on-chain:
{"v":1,"a":"<author wallet>","k":"p","s":"SOL","d":"up","x":150,"n":"optional note"}
{"v":1,"a":"<author wallet>","k":"p","m":"<token mint>","d":"down","x":5000000}
{"v":1,"a":"<author wallet>","k":"w","t":"anything, up to 160 characters"}
a | The author. It must equal the wallet that paid the fee, or the call opens void. This is what stops anyone copying a good caller's ciphertexts: they can resubmit the bytes but cannot change the name inside. |
k | p a price call, w words, which open and are shown but not graded. |
s / m | A major (SOL, BTC, ETH, ZEC, BONK, WIF, PENGU, TRUMP, FARTCOIN, POPCAT, PUMP, JTO, RAY, HYPE, XRP, DOGE, SUI) or any Solana token by mint. |
d, x | up: the asset trades at or above x between the seal and the open. down: at or below. x is a USD price for majors and a USD market cap for tokens. |
When a call is void
- It opens less than 10 minutes or more than 90 days after its block time.
- The ciphertext is not a tlock age file for quicknet, or does not decrypt.
- The plaintext is malformed, or its author is not the fee payer.
Grading
At the open the call is decrypted and, two minutes later, graded against one-minute candles: Coinbase's SYMBOL-USD for majors, the deepest GeckoTerminal pool for tokens. The window runs from the first full minute after the seal to the last full minute before the open; windows longer than six hours use hourly candles in the middle.
| price at the seal | p₀, from the minute containing the block time |
| boldness | b = 100·ln(x / p₀) for up, 100·ln(p₀ / x) for down, capped at 300. A target already behind the price is a safe call: b = 0. |
| score | +b if the target was reached, −b if not. |
Right, you win the move you called; wrong, you lose it. Hedging both ways scores nothing, and a wallet's misses open as surely as its hits.
The board
Net score per wallet, this week (from Monday 00:00 UTC) and all time. Every wallet ranks.
Check it yourself
Every call page has an open it yourself button: your browser fetches the round from drand and decrypts the memo on its own, without our server. Or take the memo from any explorer, decode the base64 after foresaw:1: to a file and run drand's tle on it once the round is out:
echo '<base64>' | base64 -d > call.age tle --decrypt call.age
Grades can be rechecked from the same public candles: Coinbase's /products/SYMBOL-USD/candles and GeckoTerminal's pool ohlcv.
What you trust
- drand. If a threshold of League of Entropy nodes colluded, they could compute a round early and read calls before they open. They cannot change a call.
- The price sources. Coinbase and GeckoTerminal candles decide hits. Both are public and anyone can recheck a grade.
- Nothing else. The server cannot read a call early, cannot change one, and cannot hide one: every call is in the ledger's history on Solana.