sheaf

Predict

A market on every listed basket.

Every Sheaf basket carries one question: will it beat SPY this week? A basket's recipe is on chain, so the answer can be recomputed by anyone from public accounts and two public price sources, between two week-ending US closes. Panta runs the market: a USDC bonding curve on Solana, opened, traded and claimed through its API.

Powered by Panta
Baskets with a question
—
Opening one on Panta
—
Ahead of SPY, trailing week
—
Panta
—

The questions

Value per share is read live from each basket's recipe at mainnet prices and dividend multipliers. The trailing week compares the same recipe with SPY over the last five closes. A market resolves from neither of these live figures: it reads navPerShare.listed at two week-ending closes, as set out below.

How a market resolves.

The week runs between two NYSE closes, each the last close of its week: normally Friday 16:00 New York time, Thursday's close when Friday is a holiday, 13:00 on an early-close day. The first is the first such close after trading opens, and trading stops at the second. So nobody trades a week that has started or one that is decided. Stock tokens trade around the clock, but SPY only has a close at the close, so both sides are read there.

  1. Read navPerShare.listed and spy.adjClose from /api/nav/<basket>?at=<close> at both closes.
  2. Divide the later value by the earlier one, for the basket and for SPY.
  3. YES if the basket's ratio is greater. NO otherwise, including a tie.
  4. Read both at or after the market's resolution time, two hours after the second close, so both use the same data.

Every input is public, and the JSON lists a command to fetch each one. The only off-chain inputs are Jupiter's prices and the daily closes:

  • • The recipe, units of each stock per share: the basket account on Solana.
  • • Shares outstanding and what each vault holds: the share mint and vault token accounts.
  • • Each stock's dividend multiplier: the Token-2022 config on its mainnet mint.
  • • Daily closes and adjusted closes for every holding and SPY: Yahoo Finance's chart API.
  • • Live prices for the “now” figures: Jupiter's price API.

What /api/nav answers for a basket, live, trimmed

Reading…

Last week, resolved the way a market would be

Panta's catalog, as this key sees it.

Read live from GET /markets/ and GET /categories/ through Sheaf's server, read-only.

Every part of Panta's API, used.

Each write is a session: quote, build an unsigned transaction, the wallet signs, then Panta is told the signature. Sheaf drives all of them and shows Panta's answer at every step.

DiscoveryGET /markets/, GET /categories/“Panta's catalog” on this page, and every basket page
DataGET /markets/{id}/, GET /markets/{id}/trades/Positions on /portfolio
CreationPOST /markets/create/quote/ → /markets/create/build/ → wallet signs → POST /markets/register/Basket page, “Open it on Panta”
TradingPOST /primaryorderquote/ → /primaryorderbuild/ → wallet signs → /primaryordersubmit/ → /primaryorderverify/ → POST /trades/Basket page, “Take a side”
PositionsGET /positions/?wallet=/portfolio, Predictions
ClaimsPOST /claim/build/ → wallet signs → POST /trades//portfolio, Predictions
Creator feesPOST /claim/creator-fees/build/Basket page, “Creator fees”

Why the sandbox.

Opening a market on Panta costs about 50 USDC plus SOL, and Sheaf spends no real money. A pk_test_ key runs the identical flow against Panta's fixtures: same endpoints, same request bodies, canned answers, nothing on mainnet. Those answers are labeled wherever they appear, so a fixed sandbox quote is never passed off as this basket's price.

One thing in the sandbox flow is not Panta's: its builds return no real transaction, so the wallet signs a stand-in Sheaf compiles (a memo on a fresh devnet blockhash). That signed stand-in is never broadcast to any cluster, and the signature reported back to Panta's sandbox proves the flow, not a trade.

What changes for live.

One environment variable: a pk_live_ key in PANTA_API_KEY. Discovery, data, positions and quotes then read Panta's mainnet catalog. Building, signing and reporting stay locked to the sandbox in Sheaf's server code until a market is sponsored, so the live demo cannot move USDC by accident.

Powered by Panta