{"ok":true,"data":{"build":{"cluster":"mainnet-beta","commit":"local","mintingEnabled":false,"audited":false},"capabilities":{"walletConnect":true,"tradeSubmission":false,"tokenCreation":false,"solToZecRouting":false,"zcashRead":false,"shieldedPayout":false,"privateOrders":false,"settlementProofs":false},"adapters":[{"id":"solana-entry","name":"Solana entry adapter","status":"live","summary":"Wallet connection, network verification, and mainnet swap execution.","claim":"Connect any Wallet Standard wallet and trade on mainnet in two clicks.","specs":[{"label":"Standard","value":"Wallet Standard"},{"label":"Cluster check","value":"getGenesisHash"},{"label":"Token programs","value":"SPL + Token-2022"},{"label":"Router","value":"Jupiter aggregator"},{"label":"Signing","value":"Client-side only"}],"signature":"interface SolanaEntry {\n  verifyNetwork(): Promise<NetworkCheck>\n  getSolBalance(addr: string): Promise<number>\n  getTokenBalance(owner, mint): Promise<number>\n}","provides":["Wallet Standard connection (Phantom, Solflare, Backpack and any compliant wallet)","Cluster identity check via getGenesisHash before any signature is requested","Live SOL and SPL balance reads, across both the legacy and Token-2022 programs","Wallet-signed mainnet swaps with on-chain confirmation","Explorer links for every address and signature shown"],"shipping":["Hardware-wallet clear signing, so the device renders the swap rather than a blob","Self-hosted RPC by default, removing the last third party from the read path","Priority-fee tuning driven by live network congestion"],"configuredBy":["NEXT_PUBLIC_SOLANA_CLUSTER","NEXT_PUBLIC_SOLANA_RPC_URL"]},{"id":"conversion-routing","name":"Conversion and routing adapter","status":"building","summary":"Quotes and routes a SOL balance into ZEC so participation can settle in the shielded pool.","claim":"One hop from a Solana balance to the shielded pool, with every venue disclosed.","specs":[{"label":"Quote TTL","value":"45s, enforced"},{"label":"Route disclosure","value":"Per hop"},{"label":"Fee breakdown","value":"Itemised"},{"label":"Custody","value":"Provider, time-boxed"},{"label":"Contract","value":"ConversionQuote"}],"signature":"interface ConversionAdapter {\n  quote(i: { fromAmountSol: number }): Promise<ConversionQuote>\n  execute(quoteId: string): Promise<SettlementRef>\n}","provides":["A typed quote shape the real provider must satisfy","Indicative pricing so the quote surface can be reviewed end to end","Quote expiry and staleness handling, enforced at confirm time"],"shipping":["Provider selection, gated on a published custody and timing-correlation review","Amount bucketing and randomised release, so size and timing stop correlating across chains","Multi-provider routing so no single venue sees the whole flow"],"configuredBy":["CONVERSION_PROVIDER_URL","CONVERSION_PROVIDER_KEY"]},{"id":"zcash-settlement","name":"Zcash shielded settlement adapter","status":"beta","summary":"Validates shielded destinations and pays holder rewards into the Zcash shielded pool.","claim":"Reward destinations verified to the spec, byte for byte, before anything is sent.","specs":[{"label":"Encodings","value":"Bech32 + Bech32m"},{"label":"Test vectors","value":"BIP-173 / BIP-350"},{"label":"Sapling payload","value":"43 bytes, checked"},{"label":"Transparent","value":"Rejected by policy"},{"label":"Key custody","value":"Out of process"}],"signature":"interface ZcashSettlement {\n  checkAddress(raw: string): ShieldedAddressCheck\n  listEpochs(): Promise<DistributionEpoch[]>\n  claim(i: { epoch, toAddress }): Promise<PayoutRef>\n}","provides":["Real Bech32/Bech32m decoding and checksum verification for u1… and zs1… addresses","Explicit rejection of transparent t-addresses, with the reason stated","Network mismatch detection (testnet address on a mainnet deployment)"],"shipping":["Signer service holding payout authority, isolated from this web process entirely","Signed-challenge address ownership, replacing trust-on-paste with proof","lightwalletd-backed accrual reads straight from the chain"],"configuredBy":["ZCASH_LIGHTWALLETD_URL","ZLAB_SETTLEMENT_SIGNER_URL"]},{"id":"private-markets","name":"Private asset and market layer","status":"building","summary":"Confidential balances, private order flow and settlement proofs — the layer that makes the headline literal.","claim":"The hard part, specified in full: commitments, nullifiers, batch proofs.","specs":[{"label":"Balance model","value":"Commitment notes"},{"label":"Spend protection","value":"Nullifier set"},{"label":"Order privacy","value":"Threshold-encrypted"},{"label":"Settlement","value":"Batch auction + proof"},{"label":"Components","value":"5 specified"}],"signature":"interface PrivateMarkets {\n  submitPrivateOrder(o: EncryptedOrder): Promise<Receipt>\n  getConfidentialBalance(vk: ViewingKey): Promise<Note[]>\n  verifySettlement(p: SettlementProof): boolean\n}","provides":["A complete written specification for all five components","A commitment-based note model in the shape Zcash already proves at scale","Standard nullifier construction for exactly-once spends"],"shipping":["Note tree and nullifier set — the two components with settled designs","Batch-auction settlement circuit, with proving cost as the binding constraint","Fixed-cadence order batching with a decoy policy, to break timing analysis"],"configuredBy":[]},{"id":"rewards-engine","name":"Rewards engine","status":"beta","summary":"Applies a token’s published fee split, weights holders by time-held balance, and pays the pot out in shielded ZEC.","claim":"Snapshot-proof accounting that sums to the last zatoshi.","specs":[{"label":"Weighting","value":"Time-weighted balance"},{"label":"Min hold","value":"30 min to qualify"},{"label":"Split precision","value":"Integer zatoshi"},{"label":"Rounding","value":"Carried, never dropped"},{"label":"Fee split","value":"Immutable at launch"}],"signature":"interface RewardsEngine {\n  timeWeightedBalance(i: EligibilityInput): number\n  splitEpoch(i: { potZec, weights }): Payout[]\n  accrualsFor(wallet: string): Promise<RewardAccrual[]>\n}","provides":["Published, immutable-at-launch fee split shown before the creator signs","Time-weighted eligibility with a minimum hold window (implemented and deterministic)","Exact-sum epoch splitting in zatoshi, with the rounding remainder accounted for"],"shipping":["Verifiable proof of total distribution, upgrading epochs from commitment to proof","Shielded payout execution once the signer service lands","Claim batching tuned to shrink the timing signal a claim leaks"],"configuredBy":["INDEXER_URL","ZLAB_SETTLEMENT_SIGNER_URL"]},{"id":"indexer","name":"Indexer and API","status":"beta","claim":"Live market data on every listing, with public and private state never mixed.","specs":[{"label":"Quote sources","value":"DexScreener → Jupiter"},{"label":"Cache","value":"60s, shared in-flight"},{"label":"Timeout","value":"4s, then fallback"},{"label":"Validation","value":"zod, server-side"},{"label":"Cache-Control","value":"no-store"}],"signature":"interface IndexerAdapter {\n  listTokens(q: TokenQuery): Promise<TokenPage>\n  getToken(id: string): Promise<TokenDetail | null>\n  getCandles(id: string, tf: Timeframe): Promise<Candle[]>\n}","summary":"Serves token listings, charts, trades and holder data, keeping public chain facts separate from private user state.","provides":["Typed, zod-validated query contract for listings, charts, trades and holders","Filtering, sorting, search and pagination implemented server-side","Public chain facts and private user state kept as separate methods with separate trust assumptions"],"shipping":["Self-hosted index, removing the last third-party read dependency","Websocket price streaming in place of interval polling","Per-pool depth and slippage curves surfaced on every listing"],"configuredBy":["INDEXER_URL","INDEXER_KEY","NEXT_PUBLIC_USE_INDEXER"]}],"protocolResearch":[{"key":"confidential-balances","title":"Confidential balances","requirement":"A holder position must be readable by its owner and by nobody else, while remaining provably within total supply.","state":"specified","notes":"Commitment-based note model with an append-only note tree, in the shape Zcash already uses for value. The open question is not the primitive but where the tree lives: Zcash mainnet has no native custom shielded asset, so this needs either a ZSA-style protocol change or a separate proving system anchored to Zcash."},{"key":"private-orders","title":"Private order submission","requirement":"Order size and direction must not be inferable before, during, or after execution.","state":"open-problem","notes":"Encrypting an order is easy. Preventing the sequencer, the relayer, or an observer of timing and gas patterns from reconstructing it is not. Any honest design here includes batching with a fixed cadence and a decoy policy, both of which cost latency."},{"key":"settlement-proofs","title":"Settlement proofs","requirement":"Anyone must be able to verify that a batch settled according to published market rules, without learning any participant position.","state":"researching","notes":"Circuit design for a batch-auction settlement proof, including the fee split. Cost and proving time are the binding constraints, not feasibility."},{"key":"nullifier-set","title":"Nullifier set","requirement":"A note must be spendable exactly once, without revealing which note was spent.","state":"specified","notes":"Standard construction. The engineering risk is operational: nullifier-set growth, and the availability requirements on whoever serves it."},{"key":"metadata-resistance","title":"Metadata resistance","requirement":"Network-level observation of ZLAB clients must not deanonymise participants.","state":"open-problem","notes":"The front end is the weakest link. IP addresses, request timing, and RPC provider logs can defeat on-chain privacy entirely. Mitigations exist (self-hosted RPC, Tor, client-side filtering) but none are default-on today."}]}}