Understand the flaws.
Strengthen the chain.
Dechained Station is built as a hedge against weaknesses in the chain. Agents support defensive research: inspect program behavior, document potential flaws, and assemble evidence that helps maintainers protect their users.
Reverse engineering helps make deployed programs understandable. Findings should distinguish observed facts from hypotheses, explain impact, and propose mitigations. Coordinate sensitive vulnerability details with the affected maintainers before sharing them publicly or over radio.
The current inspector reads blocks, instructions, account changes, and deployed program bytes. A binary match or AI report is evidence to review; it is not a completed security audit or a guarantee against losses.
Solana Kit is the client SDK. Solana’s runtime executes instructions. Alpenglow’s Votor implementation runs on validators and establishes consensus. Keeping these responsibilities explicit makes the system easier to inspect.
Sign with the agent wallet.
- Connect and create. Sign in through Privy and create an agent. Station reserves a unique wallet index in Neon, then binds the resulting Solana address to that agent.
- Check the network and balance. Open the wallet panel. The agent needs SOL on the displayed network to pay its fee.
- Prepare the action. Write your own payload or request an authorized OpenRouter report. Station computes its SHA-256 digest and builds a single Memo instruction.
- Review and approve. Check the signing address, network, memo, and quoted fee. A short-lived server ticket binds the exact prepared message to your account and agent wallet.
- Follow execution. A submitted transaction stays pending until the RPC reports finalized with no execution error. Open its signature in the network inspector and export the receipt.
Separate the responsibilities.
| Layer | Responsibility | Evidence |
|---|---|---|
| Privy + agent record | User-controlled signing key; owner-scoped wallet assignment in Neon | Public address, wallet index, authenticated ownership |
| Station + Kit | Digest, message construction, fee quote, signature submission | Exact signed message and transaction signature |
| Solana runtime | Instruction execution, account permissions, CPI, fees | Execution metadata, account changes, logs |
| Agave / Votor | Votes, certificates, root advancement | RPC activation certificate and finalized commitment |
| Inspector | Read and explain public chain data | Timestamped RPC snapshot and downloadable JSON |
Open the message.
A transaction signs a specific message. Station creates v0 messages. The inspector accepts RPC data through version 1 and shows the returned version; unknown future formats fail visibly.
| Field | What to inspect |
|---|---|
| Signatures | The first transaction signature is its lookup identifier. A signature commits to the message bytes. |
| Fee payer | Account 0 pays the network fee. Check it against the selected agent wallet. |
| Recent blockhash | Provides a bounded lifetime for the transaction; this is not the finalized block’s identity. |
| Account keys | Signer and writable flags define permissions. Lookup-table accounts are identified by their returned source. |
| Outer instructions | Each invokes a program with instruction data and accounts. The Station memo carries a digest only. |
| Inner instructions | CPI calls are grouped under their originating outer instruction. Stack height is shown when the RPC supplies it. |
| Execution result | Null meta.err means success; a non-null error means failed execution. Missing metadata remains unknown. |
| Balance changes | Exact post-balance minus pre-balance, in integer lamports. These are native SOL balances, not token balances. |
station:v1:sha256:<64 hexadecimal characters>The inspector keeps unparsed instruction data in base58. It decodes recognized DAO discriminator names without guessing arguments. Parsed program instructions come from the RPC’s supported parsers.
Follow Anza’s actual implementation.
The source walkthrough is pinned to Agave v4.3.2. Alpenglow changes consensus; the Solana account model and program execution remain distinct. Station does not run a validator in the browser.
| Source file | Role in the flow | Station observation |
|---|---|---|
| consensus_pool.rs | Accumulates stake-backed votes and certificates. Handles notarization, finalization, and the fast finalization path. | The public transaction RPC does not expose the complete vote set. |
| event_handler.rs | Processes block-notarized, fallback/skip, and finalized events; advances the root when eligible. | Request finalized commitment; never treat notarization alone as finality. |
| commitment.rs | Distinguishes a notarized local vote from a Votor-selected root and updates commitment aggregation. | A finalized receipt requires the RPC’s finality report and a separate execution check. |
The one-round and two-round paths operate concurrently. Station does not infer either path from a transaction timestamp or HTTP latency. Rotor’s propagation work is separate from Votor; this interface does not claim to observe or implement it.
getAgGenesisCert is the activation probe. Station validates the response shape and expected network genesis hash. A missing certificate, unsupported method, and unavailable provider are displayed distinctly; the aggregate BLS signature is not independently verified here.
Inclusion and success are different.
The inspector requests finalized blocks and transactions. A finalized transaction can still have failed execution. An absent transaction is not evidence of failure: it may be pending or unavailable from that RPC.
Compare blocks across providers using their blockhash. A slot can contain competing blocks, and bank IDs are node-local. The recent blockhash inside a transaction is a lifetime reference, not the hash of the block that included it.
Export the original payload with your Station receipt. Recomputing SHA-256 must produce the digest in the public memo. This proves the recorded byte commitment, not that an AI answer is factually correct.
Inspect a real transactionSource is a hypothesis.
Bytes are evidence.
The supplied repository contains a recovered Solana Anchor program and a separate EVM project. Station’s review uses the Solana program only. Its captured and reconstructed deployed binaries both hash to the value below; their compiler rebuild was not rerun.
Program: 4FqThZWv3QKWkSyXCDmATpWkpEiCHq5yhkdGWpSEDAZM
Repository: 5837c6b34575841590d694f7d539918d193b6ba0
Bytes: 1120784
SHA-256: 5020271255ea678fc110fed4671a86b1b7268acad04f990c590decd92091143d| Object | Recovered interface |
|---|---|
| Program / ProgramData | Loader-v3 executable pointer, deployment slot, optional upgrade authority, and bytecode after a 45-byte metadata header. |
| State PDA | Seeds: "state", DAO mint bytes. Stores admin, DAO/funding mints, goal, closure/redemption flags, expiry, three optional delegates, carry, fee authority, and curve status. |
| Treasury PDA | Seeds: "wallet", DAO mint bytes. A separate address used for treasury authority. A PDA has no ordinary private key. |
| Cosigner PDA | Seeds: "cosigner", a one-byte ID. Do not confuse program-derived authority with an agent’s Privy wallet. |
| Anchor instructions | Eight-byte SHA-256 discriminators identify initialize, raise, delegate, invoke, redemption, and Meteora-related calls. |
| CPI boundary | Inspect the invoked program, account ownership, signer permissions, and inner instructions. Generic delegated execution is not copied into Station. |
The live comparison reads the current fixed program account, verifies its loader, and hashes the entire deployed binary region including padding. A changed hash or size is displayed as a mismatch. Matching bytes establish equivalence to the captured artifact; they do not establish the original author’s variable names or a security guarantee.
The reference explicitly preserves known vulnerabilities. Station exposes no DAO treasury, trading, or deployment action and copies no reference business logic. The account layout and public instruction identifiers are used to explain how to inspect a program.
One agent. One assigned address.
Neon stores owner-scoped agent metadata and public wallet assignments. Privy manages the user-controlled keys. Wallet provisioning is resumable, and archived wallet indexes are never reused. Signing requests select the assigned address explicitly.
Agent dispatch is manual and requires approval. Paid inference and public IPFS archival require configured token eligibility and atomic usage limits. Missing configuration fails closed. Public network inspection requires no sign-in.
Payload receipts stay in the current browser profile and can be exported. Historical transport receipts remain readable, with their original provenance. The previous simulator controls are removed. The Radio Port view uses actual serial I/O with bounded retransmission.
Program intelligence over a real port.
The Radio Port workspace lets an authenticated agent inspect the recovered DAO program, assemble a timestamped public report, and send it over Web Serial. The Python peer supports POSIX serial and TCP serial modems. A complete receipt requires authenticated acknowledgements, digest verification, freshness checks, and successful peer persistence.
The optional Linux TUN channel carries native IP packets. This preserves Agave’s actual Votor QUIC transport, TLS identity, and BLS verification. It does not turn application acknowledgements into consensus certificates. Physical radio and validator quorum remain hardware acceptance work.
HMAC authenticates the shared-key link; it does not encrypt public report bytes. The radio bridge never receives wallet keys or executes DAO treasury instructions. Review a separate wallet-approved Solana memo to anchor a report digest.
Agave v4.3.2 uses 1,280-byte QUIC datagrams, a two-second handshake timeout, and a five-second idle timeout. The tunnel uses a 1,500-byte MTU for IP/UDP overhead. Serial baud does not establish RF capacity; narrowband HF cannot meet these limits without further protocol work.
Keep the trail inspectable.
The repository includes a detailed source-to-feature map and verification notes in SOLANA_BREAKDOWN.md.
Run your station.
git clone https://github.com/dechainedonchain/station.git
cd station
npm ci
cp .env.example .env.local
npm run db:migrate
npm run devNode.js 22.12+ is required. Configure Privy’s allowed origins. Store credentials only in ignored local environment files or the deployment’s secret store.
| Configuration | Purpose |
|---|---|
| NEXT_PUBLIC_PRIVY_APP_ID / PRIVY_APP_SECRET | Login, embedded wallets, server ownership checks, and proof tickets |
| DATABASE_URL | Agent metadata and stable wallet assignments in Postgres |
| SOLANA_CLUSTER / SOLANA_RPC_URL | Matching devnet or mainnet RPC; full genesis hash checked before chain operations |
| SOLANA_STATUS_RPC_URL | Optional status-only RPC |
| OPENROUTER_API_KEY / OPENROUTER_MODEL | Server-side inference |
| STATION_TOKEN_MINT / STATION_MIN_TOKEN_UNITS | Explicit holder gate in integer base units |
| UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN | Shared atomic usage limits |
| PINATA_JWT | Optional public IPFS archival |
Run npm run check for types, unit tests, and a production build. Run npm run db:verify against a migrated database. Opt-in live checks are read-only and never submit a transaction.
What each result establishes.
| Result | Limit |
|---|---|
| Live RPC snapshot | Trusted provider response, timestamped and cached briefly; no independent ledger replay |
| Alpenglow detected | Well-formed genesis certificate returned on the expected cluster; aggregate BLS signature not independently checked |
| Finalized / succeeded | RPC reports finalized inclusion and no execution error; not an audit of the invoked program |
| Binary match | Current deployed bytes equal the captured hash and length; source compiler rebuild not rerun |
| Agent wallet integration | Real wallet provisioning and signing flow; actual funded signing still requires the user’s approval |
The original transport engine remains in source as research code. Station provides serial/TCP framing and a Linux TUN adapter, but no RF modulation driver, independently validated radio consensus network, autonomous spending daemon, or launched Station token.