What BASKTR is
BASKTR is a public scoreboard for market opinions. You build a basket, a weighted and time-bound market call across crypto and tokenized stocks, and publish it. The price of every asset at that moment is frozen, a fingerprint of those prices is written to Robinhood Chain, and the basket is scored against a fixed benchmark over the horizon you chose.
It records what someone claimed, when they claimed it, and whether it worked. Nothing more.
- Not a trading app. No order is ever placed. Nothing is bought, sold or held.
- Not a prediction market. Nothing is staked and there is no payout.
- Not a portfolio tracker. It records a claim, not a position.
- Not advice. A basket is someone's opinion with a timestamp on it.
Say it before it happens.
Publish a basket
Six steps, a couple of minutes, one signature.
- 1
Pick what you believe in.
Open Build and choose from 694 assets: crypto, memes across Solana, BNB Chain, Ethereum, Base and Robinhood Chain, tokenized stocks, ETFs and commodity funds. Search, or browse by group.
- 2
Weight your conviction.
New assets split the basket evenly. Drag a slider and everything else rebalances. The basket has to add up to 100%.
- 3
Name it. Say why.
A name of up to 40 characters and a one-line thesis of up to 140. Both are published with the basket.
- 4
Preview it and choose a horizon.
7, 30, 90 or 365 days. The preview shows the publication price of every asset and the fingerprint that will be committed. Once published, none of it can change.
- 5
Record it on chain.
Connect a wallet on Robinhood Chain and sign once. No funds move and nothing is held. BASKTR charges no fee; you pay only the network's gas.
- 6
Share it.
Every basket gets its own page and a share link. The link carries the publication snapshot, so anyone who opens it can see the score.
Baskets and horizons
Think of a basket as a ballot, not a purchase. You have 100 points of belief to give out, and giving one asset more means giving another less. That trade-off is the claim. A bigger slice means that asset counts for more, whichever way it moves.
| Part | Rule |
|---|---|
| Assets | Any mix from the 694-asset universe. |
| Weights | Must total 100%. Stored on chain in basis points, so 30% is 3000. |
| Name | Up to 40 characters. |
| Thesis | Up to 140 characters. |
| Horizon | 7, 30, 90 or 365 days. Fixed at publication. |
When a basket resolves
When the horizon passes, the result is frozen. Resolution is observed rather than scheduled: there is no always-on job, so a basket is measured the first time it is opened after its horizon passes. The observation time and the lag are recorded and shown on the basket.
The snapshot and its fingerprint
This is what makes the record checkable rather than merely asserted. At the moment you open the preview, the app takes a snapshot and holds it fixed, so what is committed is exactly what you were shown.
- 1
Capture.
Every holding's price, its source and the source's own timestamp, plus the full benchmark universe and its prices.
- 2
Canonicalise.
Prices become decimal strings at fixed precision, never floats, and the snapshot is serialised to JSON with keys in a fixed order and no whitespace. The bytes are identical on every machine.
- 3
Fingerprint.
keccak256 of those bytes is the snapshot hash.
- 4
Commit.
The hash is written to the registry in the same transaction that records the basket.
snapshot = holdings + benchmark, each price with its source and timestamp
canonical = JSON, fixed key order, no whitespace, prices as fixed-precision strings
snapshotHash = keccak256(canonical) // stored on chain with the basketEvery time a basket is opened, the hash is recomputed from the prices on screen and compared with the chain. If they differ, the prices are not the ones that were published, and the basket is shown as unverified instead of being scored. Snapshot format version 2.
Receipt, or it didn't happen.
How a basket is scored
The headline figure is outperformance, not raw return. Raw return mostly measures when someone published. Measuring against the same window measures whether the weighting was any good. A basket can make money and still be scored as wrong if the market did better.
assetReturn = (currentPrice - publicationPrice) / publicationPrice
basketReturn = sum(weight * assetReturn)
outperformance = basketReturn - benchmarkReturnThe benchmark
basktr-core-10-v1 is an equal weight of 10 liquid assets across crypto, large-cap equity and the broad market, measured over exactly the same window as the basket.
- BTC
- ETH
- SOL
- AAPL
- MSFT
- NVDA
- AMZN
- TSLA
- SPY
- QQQ
It is deliberately a fixed list, not every asset the app offers. If it were the whole universe, adding an asset would quietly change what every score meant. Its prices are frozen into each snapshot, and if the list ever changes it becomes a new version: baskets keep the benchmark they were published under.
Rules that are never bent
- Nothing is estimated. If any price in a basket is unavailable, the basket is shown as unscored. Nothing is interpolated or backfilled to produce a number.
- Corporate actions are applied. Stock Tokens carry a share-per-token multiplier from the issuer. It is read on every pass and applied to every return.
- Sources are traceable. Every price records its source and that source's own timestamp, so a bad one can be found.
Fading a basket
Disagree with a basket? Fade it. Press Fade this basket on any basket page and its weights load into your builder. Change what you disagree with, then publish your version.
Your basket records the id it came from, on chain, so the lineage stays visible. It is judged entirely on its own terms: its own snapshot, its own timestamp, its own expiry. A fade is a disagreement placed on the record, and where both sides can be scored they sit side by side against the same benchmark.
Callers delete. Basktrs don't.
The registry contract
Every published basket lives in one contract on Robinhood Chain. It is small on purpose, and what it cannot do matters more than what it does.
| Network | Robinhood Chain (chain id 4663) |
| Registry | 0xDa750B3E019E5d8166DE8E12025d52e3bEb30053 |
| Source | Verified on the block explorer |
What it cannot do
- It holds nothing. No payable function and no token transfer. There is no balance to take.
- It has no owner. No admin, no roles, no pause. Nobody can alter a published basket, including us.
- It cannot be upgraded. Not a proxy. The deployed bytecode is final.
- It never trades. No execution, custody, pooling or rebalancing.
What it stores for each basket
Id, creator address, name, thesis, asset symbols, token addresses, weights in basis points, the block timestamp of publication, the id it was faded from, the snapshot fingerprint and the horizon in days.
What immutability does not cover
A list of nothing but absences would be marketing, so here is what is still off chain:
- Which registry you are shown. The contract cannot change; the address this site reads is set in its configuration.
- The interface. It is hosted, and hosted code can change. That is why every figure is reproducible from the chain and the API.
- The prices. They come from third parties. The chain holds only their fingerprint.
- The benchmark. Published, frozen into each snapshot and versioned, but chosen by this project.
Verify it yourself
You do not need this site to check a basket. Four steps on the public block explorer:
- 1
Open the registry.
Find the registry contract on the explorer, choose the Contract tab, then Read contract.
- 2
Find getBasket.
Expand it in the list of read functions.
- 3
Enter the id.
Set the multiplier next to the input to ×10⁰ (it defaults to ×10¹⁸, which asks for a different basket), enter the basket id and press Read.
- 4
Compare.
Name, thesis, symbols and weights should match the basket page exactly. createdAt is the block timestamp, in a block nobody can move. snapshotHash is the fingerprint of the prices it started from.
Don't take our word for it. Take the chain's.
Assets and prices
| Group | Count | Price source |
|---|---|---|
| Crypto, including memes | 500 | CoinGecko, with Coinbase spot as a fallback |
| Tokenized stocks | 177 | Robinhood Stock Token API |
| ETFs | 14 | Robinhood Stock Token API |
| Commodity funds | 3 | Robinhood Stock Token API |
- Stock Tokens. Contract addresses come from the issuer's own endpoint, never inferred from a ticker. Quotes are bid and ask; the midpoint is used. No previous close is published, so no 24h change is shown for them.
- What a Stock Token is. A debt instrument issued by Robinhood Assets (Jersey), not a share. It carries no shareholder rights, and its value depends on the issuer. Every equity figure here is the price of that instrument.
- Crypto. The Coinbase fallback is only used for coins where Coinbase's ticker is the same asset, so a coin can never be priced as a stranger with the same symbol.
- Tiny prices. Coins priced below $0.000001 are left out: the snapshot stores prices at eight decimals and such a price would lose its precision.
- Outages. When a source is unreachable the last real quote is reused with its original timestamp. Nothing is invented.
Public API
Open, no key, CORS enabled. It returns only what the chain holds and never a price the server cannot verify. The API names a published basket a call, which is why the routes read that way.
| Endpoint | Returns |
|---|---|
| GET /api/v1/calls?limit=50&offset=0 | Every basket on the record, newest first |
| GET /api/v1/calls/{id} | One basket |
| GET /api/v1/benchmark | The benchmark and the formulas |
| GET /api/v1/assets | What a basket may be built from |
| GET /api/v1/decisions | What the data layer refused on this pass |
| GET /llms-full.txt | The complete plain-text brief, limits included |
curl https://www.basktr.com/api/v1/calls/1{
"id": "1",
"creator": "0xf5DA2c98C2bebc0eF10Da571124EBB49615e42A5",
"name": "The First Record",
"thesis": "Tokenized stocks and crypto grow up together. Put on the record before it happens, scored against the market.",
"holdings": [
{
"symbol": "ETH",
"weightBps": 3000,
"tokenAddress": null
},
{
"symbol": "NVDA",
"weightBps": 3000,
"tokenAddress": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC"
},
{
"symbol": "BTC",
"weightBps": 2000,
"tokenAddress": null
},
{
"symbol": "SPY",
"weightBps": 2000,
"tokenAddress": "0x117cc2133c37B721F49dE2A7a74833232B3B4C0C"
}
],
"publishedAt": "2026-09-14T07:03:12.000Z",
"horizonDays": 90,
"expiresAt": "2026-12-13T07:03:12.000Z",
"snapshotHash": "0x67719420d1621d4cb3c890824688857d05bceb29db2fa571b51ad02d436a7b09",
"remixOf": null,
"url": "https://www.basktr.com/basket/chain-4663-1"
}Publication prices are deliberately absent. They live with the publisher and the server has never seen them, so serving them would be a claim this API cannot back.
Known limits, stated plainly
- Prices live with the publisher. The record is on chain; the publication prices are in the publisher's browser and the share link. Without either, a basket can be displayed but not scored.
- Resolution is observed. A basket is measured when it is next opened after its horizon, and the lag is shown.
- Early days. The registry holds few baskets. Ranked views stay hidden until enough can be scored to mean anything.
- The benchmark is ours. Disclosed in full on every basket, but not an industry index.
- Issuer risk sits under every equity figure. It is disclosed, not priced, because there is no honest way to price it here.
- No identity layer. Creators are wallet addresses.
Questions
Does it cost anything?
No. BASKTR charges no fee and holds no funds. Publishing on chain costs only the network's gas, paid from your own wallet.
Is there a BASKTR token?
The official token is at 0x3E15fa82bE4d2F420ca95C43Cd8f42C991a9e4a2 on Robinhood Chain. It is not needed to use the app and gives no rights in it. A token at any other address is not BASKTR.
Can I edit or delete a basket?
No, and neither can anyone else. That is what makes it a record.
Do I need a wallet?
Not to explore or build. To put a basket on chain, yes: any EVM wallet connected to Robinhood Chain.
What if an asset has no price?
A basket can't be published without a real starting price for every asset. Later, if a price is missing, the basket is shown as unscored rather than estimated.
How do I reach the team?
On X at @basktrhq, or by email at manifest@basktr.com. These are the only official channels. An account or address not listed here is not BASKTR.
Is this investment advice?
No. A basket is one person's opinion with a timestamp. Nothing is bought, sold or held.
Glossary
- Basket
- A weighted, time-bound market call across assets.
- Basis points
- Hundredths of a percent. 30% is 3000 basis points.
- Benchmark
- basktr-core-10-v1, the fixed yardstick every basket is scored against.
- Fade
- A new basket built from an existing one, with your own weights. Also called a remix.
- Fingerprint
- The keccak256 hash of a basket's canonical snapshot, stored on chain.
- Horizon
- How long a basket runs: 7, 30, 90 or 365 days.
- Lineage
- The chain of fades that connects a basket to the one it came from.
- Outperformance
- Basket return minus benchmark return over the same window.
- Registry
- The contract on Robinhood Chain that holds every published basket.
- Snapshot
- The publication prices of a basket and the benchmark, frozen at the moment of publishing.