of wallets sit behind a single RPC endpoint they did not audit.

One light.
All ships verified.
A Solana light client cast in brass and proof. No full node to keep. No operator to extend trust to. Only the math, the watch, and the lamp. The keeper never tracks the ships; he turns the lamp. The ships look up and know their position. LMPRK turns the lamp for Solana.
What it costs
to call a stranger's
shipping log your own.
Every wallet, every dashboard, every dApp on Solana reads the chain through one rented window. The window is mounted in someone else's wall. The pane is wiped by someone else's hand. The keeper does not enjoy that arrangement -- and neither, in the end, should you.
client-side proofs that today's wallet UI actually checks before it shows a balance.
of a manipulated JSON response is enough to swap a balance, a mint, or an owner.
Four links of trust before a single lamport is seen.
Nothing on this chain counts as read until a second register, colder and unsupervised, has matched the first.
Five small offices. None ask the operator to extend trust to a stranger; none ask the reader to pretend an unsupervised, unattested feed is the same thing as a witnessed one.
- 01Gather the watch signaturesed25519 fold . brass register
The service stands the night watch on the validator quorum. Their ed25519 signatures, across the last several slots, are folded into one brass commitment -- a single figure to stand for many hands.
- 02Witness from the manifestmerkle path . manifest entry
- 03Press a sealed lettergroth16 wrap . 1.2 kb
- 04Read it by lantern lightwasm verifier . ≤ 40 ms
- 05Strike the verified markclient attest . zero vouching





A balance,
attested by the math,
not by your operator.
Hand the lamp room any mainnet address. The watch folds the signatures, the manifest is drawn from the merkle path, and a twelve-hundred-byte sealed letter is returned. The lamp pulses if the seal holds. No full node kept. No operator vouched for. No detour through anyone's window.
> lmprk verify --address 9wFNqMUaR…q7d [ slot ] 312_004_122 [ rpc ] decoupled (helius, decoded server-side) [ proof ] aggregating 8 slot signatures ........ [ merkle ] depth 24 . path captured [ wrap ] groth16 .... 1.18 kb ✓ verified balance 4.218 SOL owner Token.sol Program proof_size 1.18 kb verify_ms 37
Twelve hundred bytes
of sealed evidence,
pressed inside your client.
The SDK is the light client cast in brass: signature aggregation, merkle inclusion, the portable verifier. One import. One verify call. Your application either has light from the math, or it has nothing -- and refuses to call that nothing a balance.
import { verifyProof } from "@lmprk/sdk";
// Re-derive the root and check the signed
// slot snapshot -- entirely on your side.
const { valid, reason } = verifyProof(proof);
if (!valid) throw new Error("dark light: " + reason);
await fetch(
"https://api.lmprk.fun/verify/balance",
{ method: "POST",
body: JSON.stringify({ address }) }
);
// -> { verified, balance_lamports, slot, proof }
Three lanterns,
one light at the heart of each.
A chrome companion that pulses beside every dApp balance. A desktop lantern that lives in the menu bar. A terminal command you can pipe into any CI. The DEX is not asked to change. The wallet is not asked to change. Only your reading of them is asked to become honest.
- 03Chrome companionin the browserlit
- 04Desktop lanternon the desklit
- 05Terminal lanternin the shellpending



