Lighthouse 01LMPRK
Lat 51.4° N . Lon 03.2° W
Watch 04:18 GMT . Sea state 6
The Lamp Keeper Log . Entry 0001

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.

X channel →GitHub →CA8CnkR3JpPxg2Jpy5ymHnP8cZSDBWGnoZ7Caxdkapump
Scroll. The lamp draws you in. ↓
Chapter 02 . Reading the chain through another man's window

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.

Reading . 01
94%

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

Reading . 02
0

client-side proofs that today's wallet UI actually checks before it shows a balance.

Reading . 03
1 line

of a manipulated JSON response is enough to swap a balance, a mint, or an owner.

Link 1
RPC silently routes
Link 2
Front-end trusts JSON
Link 3
Wallet trusts front-end
Link 4
User trusts wallet

Four links of trust before a single lamport is seen.

Chapter 03 . On the Discipline of the Light

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.

  1. 01
    Gather the watch signatures
    ed25519 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.

  2. 02
    Witness from the manifest
    merkle path . manifest entry
  3. 03
    Press a sealed letter
    groth16 wrap . 1.2 kb
  4. 04
    Read it by lantern light
    wasm verifier . ≤ 40 ms
  5. 05
    Strike the verified mark
    client attest . zero vouching
A brass signature ledger half-closed on the keeper's desk, validator seals stacked beside it under lamplight.A merchant's cargo manifest pinned open, an inspector's brass lamp suspended above its hand-written entries.A sealed letter being pressed with hot red wax, the lamp catching the brass of the press.An opened envelope read by lantern light, a signature held against a register page.A page being struck with a VERIFIED stamp at the margin, ink still fresh from the punch.
The Lamp Room . Plate i
Hooking 01 . Dispatch from the lamp room

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.

Console preview
> 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
Hooking 02 . The lens, ground and shipped

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.

Package
@lmprk/sdk
npm i @lmprk/sdk
Verifier
client-side
node . deno . bun . browser
Verify a proof locally
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);
Or one call over REST
await fetch(
  "https://api.lmprk.fun/verify/balance",
  { method: "POST",
    body: JSON.stringify({ address }) }
);
// -> { verified, balance_lamports, slot, proof }
Hooking 03 / 04 / 05 . Three lanterns, drawn from the cliff

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
The pulse, drawn from any carrier
Verified at slot 312_004_122
4.218 SOL . owner Token.sol
1284
checks
0
fails
97.4%
uptime
Same pulse in the popup, the menu bar, the terminal output.