A read-only Robinhood Chain portfolio — see the reinvested dividend yield your raw token balance hides. By jumpbox.
The name is the mechanic: DRIP = dividend reinvestment, which is exactly what a stock token's uiMultiplier accrues.
Robinhood Chain stock tokens are ERC-8056 total-return tokens:
the raw balanceOf is static, while uiMultiplier() grows as in-kind dividends reinvest and on splits.
A plain ERC-20 balance understates what a holder actually owns. This app surfaces both and the gap —
the on-chain yield a naive read misses.
Read-only by design: no wallet required, no keys, no signing. Enter any address and read its positions.
One backend, thin clients — the foundation for the web app, a Farcaster miniapp, and an iOS app.
- Read core (
src/lib/rhc/) — viem reads: positions (balanceOf×uiMultiplier), v4 Quoter quotes. Shared with the rhc-mcp server. - Read-proxy (
src/app/api/rpc) — the RHC RPC endpoint lives only on the server; the browser talks to this same-origin route (fixes CORS, keeps any private endpoint out of client code). It allowlists read-onlyeth_*methods —eth_sendRawTransactionand any state-changing call are refused. - Read API (
src/app/api/positions,src/app/api/quote) — JSON endpoints all three clients share. - Web UI (
src/app/page.tsx) — watch-only address entry → positions table. - Wallet layer (
src/lib/wallet/,src/components/ConnectBar.tsx) — a context-dependent connection resolver, unified to a single address (read-only; we only ever obtain an address, never sign):- Farcaster miniapp → the host wallet, via the miniapp SDK's EIP-1193 provider (auto, no prompt).
- Standalone web → an injected wallet, or WalletConnect when a project id is set.
- Always → watch-only address entry, which needs no connector at all.
- No private keys, no signing, no custody anywhere.
- Watch-only works with zero wallet connectors — the app is fully functional before any wallet connects.
- The server holds the only secret (the RPC endpoint); clients ship none.
- The RPC proxy is method-allowlisted, so a client cannot push a transaction through it.
- Dependency posture: the wallet stack is pinned to wagmi 3 (patched transitive tree). Privy was evaluated and left out for now — its dependency tree introduced multiple high-severity advisories for no read-only benefit (embedded wallets / signing aren't used here).
cp .env.example .env.local # optional; defaults to the public RHC RPC
npm install
npm run devRPC https://rpc.mainnet.chain.robinhood.com · Explorer robinhoodchain.blockscout.com
MIT © jumpbox — jumpbox.tech