Docs
How Baskr works
Written before the product, because the product exists to hold one rule and a rule you cannot look up is a slogan.
Overview
Baskr is an on-chain pack layer for Solana. A pack is a list of token mints with fixed percentage weights; buying one splits your input across every constituent at target weight, in a single approval.
The name is the rule. Baskr is “basket” with a letter missing, and you read it as whole anyway — your eye patches the hole without telling you it patched anything. The figures here are not given that chance.
That is not decoration. This project exists because a live basket product prints “Healthcare −0.01%” from 39% of Healthcare, and every reader patches the hole the same way.
What is a pack?
A curated group of Solana tokens with fixed percentage weights — for example 50% NVDAx, 30% MSFTx, 20% AAPLx. Weights sum to exactly 100. Nothing else is a pack.
A list whose weights sum to 99.4 is refused before anything is priced, and so is a list naming the same mint twice. Both are checked by a script that runs on every build, not by anyone remembering.
8 packs: weights sum to 100, no duplicate mint, all base58How it works
- 01A curator picks mints and weights. The builder refuses anything that does not sum to 100.
- 02An investor deposits — the input is split by weight and routed into each constituent.
- 03Position and composition are readable at any time, or explicitly not readable, with the reason.
- 04Redemption returns the underlying tokens to the wallet that holds them.
Steps 2 to 4 are not built. There is no backend, no wallet path and no swap route in this build, and every surface that would use one says so rather than implying otherwise.
Why Baskr
Because the arithmetic behind a basket page is where the mistakes live, and they are invisible by design: both of the faults this project was built against produce numbers that look exactly like measurements.
One clamps a broken input into a tidy +999.00%. The other divides by the weight it found instead of by 100, so a pack priced from a third of itself prints a figure that looks like the whole. Neither shows up as an error. Both show up as a percentage with two decimal places.
A figure is read, or it is not
A figure is read from 100% of its weight, or it is not read at all. There is no third state — no “partial”, no “estimated”, no “provisional”.
This is enforced by the shape of the type rather than by discipline:
type Figure =
| { read: number; coverage: 100; at: string }
| { unreadable: string };There is no bare number in that union, so a clamp has nothing to reach: the numeric field does not exist until read has already been granted. And coverage is the literal 100, so { read: x, coverage: 52 } is a compile error rather than a code-review comment somebody loses an argument about.
The palette carries exactly two state colours for the same reason. If “partially read” had a colour it would become a state someone could paint, and the rule would leak out through the stylesheet.
Coverage
Coverage is how much of a pack's own weight carries a price. It is reported; it is never used as a divisor.
The shortcut this refuses looks like this, and it ships on a live product today:
if (!hn) continue; // no dexscreener pair -> skip the asset
bs += weight; ss += chg * weight;
chg24 = ss / bs // divided by the weight FOUND, not by 100On that product, 34 of 60 active packs have at least one constituent with no pair, and eight print a change derived from under 60% of their own weight with nothing on the card saying so. Energy & Industrials shows +0.06% from 27% of itself. Baskr divides by 100 or does not divide.
Outliers
A constituent reporting 195,257% over 24 hours has not moved 195,257%. It listed the day before from about zero, and the number is an artefact of the listing rather than a measurement of anything.
Clamping it to +999.00% does not fix that. It disguises it — two decimal places is what a measurement looks like, and six packs on that board print the identical +999.00%, which is the tell: a measurement does not land on the same two decimals six times.
Past 300%, Baskr refuses the whole figure and names the strand responsible.
Publishing a pack
Anyone with a Solana wallet can publish. Pick from the verified mints, set weights that sum to exactly 100, and the wallet signs a readable sentence naming the pack, its assets and its creator.
Baskr — publish a pack
Name: Silicon & Cloud
About: The three that rent out compute.
Assets: NVDAx 50.00%, MSFTx 30.00%, AAPLx 20.00%
Creator: 6Z1zxkcz…MifZY6
At: 2026-09-19T04:12:08.441ZIt is a message, not a transaction: nothing is spent and no fee is paid. What it buys is that the creator on a pack is read rather than claimed — without it, anyone could publish a pack under anybody's address, and the byline would be a lie the store then repeated forever.
The server rebuilds that exact sentence from fields it has already checked, and verifies the signature against what it rebuilt. A signature over text the browser supplied would prove only that the browser can type.
Every rule is enforced again on the server: weights summing to 100, no duplicate mint, no zero-weight constituent, and only mints verified against their own on-chain metadata. A store that accepts a pack the renderer will then refuse to read is a store full of things nobody can use.
A published pack cannot be edited or deleted. What was signed stays as it was signed.
Weights
Weights sum to exactly 100, to two decimal places, with a tolerance of 0.005. The remainder of an even split lands on the first strand rather than being dropped — seven times 14.28 is 99.96, and 99.96 is not a pack.
The builder enforces this live, calling the same function the rest of the site reads figures with. Not a copy of the rule for the editor and the real rule for the renderer: one function, so a pack the builder accepts is a pack the site can carry.
Verified mints
Every mint on this site is read from its own Token-2022 metadata extension and refused if the chain calls the token something other than expected. The address is never trusted because it was typed.
Two projects in this workspace once disagreed about which mint was NVIDIA and which was Meta, so at least one was wrong and copying either was a coin flip. A mint address is 44 characters of base58 with no checksum a human can see: a wrong character is not a typo, it is a phishing rail.
Seven mints are verified today. Adding a dozen Solana majors would fill the grid nicely and would mean shipping addresses nothing has checked, so the grid stays small.
Baskr is not the issuer of any of them and is not their custodian.
Swaps and one approval
A pack of ten tokens is not one transaction. A Solana transaction caps at 1232 serialised bytes, and a routed swap usually fills one on its own.
So “one signature” means one approval over a batch: the wallet is asked once, and several transactions go out together. Anything that calls it a single transaction is describing something else.
Partial fills
If transaction four of ten fails, the buyer holds 60% of a pack. This is the failure mode a basket product most needs a rule for and most often does not have one.
Baskr's answer is the same rule arriving again: a pack filled in part is not a pack, it is a set of positions, and it is named as one. It is never rounded up into “you own the pack”.
Not built. There is no swap route in this build to fail.
What the issuer can still do
Baskr is not the issuer of these tokens and is not their custodian. That is true, and it is not the whole story — so here is the rest of it.
A tokenized stock is a Token-2022 mint, and Token-2022 lets an issuer keep powers over tokens after they reach you. Every one of the seven mints listed here carries a permanent delegate: an address that can move or burn that token out of your own wallet, without your signature and without asking. The same mints can be paused, frozen, minted, and rescaled.
This was not found in a document. It surfaced during a real mainnet buy, when a leg failed and the account turned out to carry a transferHook and a pausable flag — so the mints were read properly, and this section exists because of what came back.
49 live authorities over 7 mints, held by 4 addresses
Every one of them a plain wallet: a single keypair, no program, no multisig, no published code. Read from the chain at slot 448,132,062, not from anyone’s documentation.
7pt9tkctJPK7PPNQJ77GKg8ZffSF6QxoMiCFYHxrtaCj
plain wallet
Holds 14 authorities across 7 mints: Create more of it · Make every new account start frozen
JDq14BWvqCRFNu1krb12bcRpbGtJZ1FLEakMw6FdxJNs
plain wallet
Holds 14 authorities across 7 mints: Freeze your account, so your balance cannot move · Halt every transfer of this token at once
5aMNNLQJwAEeoemTEMkv5NVjqKwvvefRYCQ5Z67HFvEq
plain wallet
Holds 14 authorities across 7 mints: Move or burn this token out of your wallet, without asking you · Point every transfer at a program that may reject it
S7vYFFWH6BjJyEsdrPQpqpYTqLTrPRK6KW3VwsJuRaS
plain wallet
Holds 7 authorities across 7 mints: Rescale what your balance means — a split applied to your holding
Baskr holds none of these and cannot remove them. They belong to the issuer of the tokenized stock, not to this site — and they exist whether or not a product mentions them.
Nothing here is an accusation. A regulated issuer of a real-world asset has reasons to hold a freeze and a delegate — a court order, a sanctions list, a recovery. The point is that the powers exist, that they are held by single keypairs rather than by programs or multisigs, and that a page selling you the token should say so before you buy rather than after.
Baskr cannot exercise any of them and cannot remove them. What it can do is read them and print them, at a named slot, next to the buy button.
Custody
A pack buy will be a batch of swaps signed by your own wallet. No pool wallet, no stored key, nothing of yours in a database.
The dissection that started this project found a public table carrying a column literally named encrypted_private_key beside pool_wallet_address, under a headline reading “Non-custodial from the first click.”
The claim held — 0 of 66 rows were populated and every pool wallet was empty. The column was a leftover from a staking product the table used to serve. But a private-key column has no business in a non-custodial product even empty, and this one will not have one to leave behind.
The price feed
Prices, 24h changes and pool liquidity come from Jupiter's price/v3 endpoint, server-side, refreshed every 30 seconds. One source for every figure on the site, so no card mixes a price from one feed with a liquidity from another.
Jupiter was chosen over the alternative for one reason: it returns blockId, the Solana slot the price was read at. A figure carries its reading or it is not a figure, and a slot is a better reading than the wall clock of whichever machine rendered the page.
The cost is that it returns no 24h volume, so the card slot that would hold one holds the slot number instead. Filling a box with a figure from a second source, purely because the box exists, is how a page ends up with numbers nobody can trace.
GET /api/prices -> { ok, slot, priced, requested, missing[], quotes[] }That endpoint exists so the feed is checkable from outside. It returns 503, not a 200 with an error inside, when the feed is down — a caller that only reads the status code must not be told this worked.
Buying a pack
This is live on mainnet. Connect a Solana wallet, enter an amount, and the input is split by weight into one Jupiter swap per constituent.
Those swaps are separate transactions — a Solana transaction caps at 1232 serialised bytes and a routed swap fills one on its own. A seven-asset pack builds seven transactions totalling about 4.9 KB. They are signed together, so the wallet asks once, and then sent individually.
So “one signature” here means one approval over a batch, not one transaction. Anything describing it as a single transaction is describing something else.
The transactions are built by /api/quote, which holds no key and cannot sign: what comes back has an all-zero signature slot and names your wallet as the fee payer. scripts/buy-path.mjs asserts exactly that on every leg, because it is the claim the whole product rests on.
Only mints this project has verified against their own on-chain metadata can be routed. A swap builder that will route to any mint a caller names is a phishing rail with a Buy button on it.
Every constituent you do not already hold needs a token account, rent-exempt at 0.00203928 SOL. Seven of them is about 0.0143 SOL on top of what you spend. That is not a fee — it comes back when an account is closed — but nobody expects it, so the panel states it before you sign.
What is not built
Stated here in one list rather than discovered one dead button at a time:
- 01No selling or redeeming. You can buy a pack; getting out means selling each constituent yourself.
- 02No position tracking. The panel shows what landed in that session and nothing after a reload.
- 03No price history, so there is no chart. The feed returns a current price and a 24h change, not a series.
- 04No editing or deleting a published pack. What is signed and stored stays as it was signed.
- 05Mirror cannot scan a wallet. It decodes the address in your browser and stops there.
Each line here comes out in the same commit that makes it untrue.