Repository navigation
feat(onchain-monitor): watch wallets and contracts on Robinhood Chain - #1244
Conversation
Adds robinhood (chainId 4663) to the chain allowlist, Alchemy slug, chainid map and explorer list. Etherscan v2's free tier refuses chainid 4663, so a keyless robinhood watch gets Path C: ERC-20 Transfer logs from the public RPC in 30,000-block windows (the RPC's cap for unfiltered-address queries). First-run window scaled for ~0.1s blocks. eyebrowlock.json refreshed for the one new egress host.
aaronjmars
left a comment
There was a problem hiding this comment.
Checked live: chain id 4663, the 30k-block cap, the Alchemy getLogs limits, and CoinGecko pricing. I pushed one maintainer commit (aa1e257). Alchemy rejects the internal category on robinhood-mainnet, so Path A now drops it there. It also notes that Path C windows are 0x-hex and fixes the window count. Thanks.
|
checked it again live, holds up. merging. 3 small follow-ups for a next PR:
thanks |
Svector-anu
left a comment
There was a problem hiding this comment.
dogfooded this against our own onchain-monitor (it's installed on my fork) and ran path c live on robinhood mainnet. holds up — chainid 4663, blockscout resolves, the 30k-block cap is real. approving.
two things worth the next-pr list @aaronjmars started:
1. the erc-721 collision is live, not theoretical. ran path c's exact wallet filter (topic0=Transfer, no address) over a 60-block window just now: 318 Transfer logs, 5 of them 4-topic with empty data — real nft moves on rh right this minute. and it's worse than mis-tagging: erc-721 has no decimals(), so a 4-topic log that slips the filter makes the decimals() eth_call revert and the amount math divide by 10^0 — it'd report the raw tokenId as the transfer size. your topic-count skip kills both; just flagging it should land before this hits a real wallet.
2. catch-up window blow-up on ~0.1s blocks. github drops most */5 ticks and the scheduler catches up to 12h late. on robinhood a 12h gap is ~400k blocks = ~14 windows/direction/watch, so one late run across a few rh watches fires 50-100+ sequential rpc calls, every one eligible for the 429 path. worth clamping the first-fetch span to the ~280k first-run default so a delayed run degrades to "last ~8h" instead of walking the whole gap.
minor: path c has no WebFetch fallback the way path a/b do — on a non-429 rpc failure it just marks fail. fine for now, noting for parity.
+1 on the docs line — community-skill-packs.md:288 is the Sentinel Pack row, still says onchain-monitor "does not cover" robinhood. one-liner once this merges.
nice work.
|
Thanks both for the reviews. The follow-ups are ready on my side: bisect on the 10k-log limit for wallets too, ERC-721 vs ERC-20 by topic count, the docs row fix, plus Svector-anu's 280k catch-up clamp and the WebFetch retry. I'll open them as a separate PR once this one is in. |
What
Teaches
onchain-monitorto watch wallets and contracts on Robinhood Chain (chainId 4663), with a keyless path that actually returns data.Why
onchain-monitoronly acceptedethereum | base | arbitrum | optimism | polygon. Replying0x… robinhoodto the add-address force-reply silently saved the watch as ethereum. Robinhood Chain already has 13 live Aeon fleet hooks (univ4-hooks) anddeploy-uni-hook/submit-hooktarget it, so the monitoring side was the gap.Just adding the name is not enough: Etherscan v2's free tier refuses
chainid=4663("Free API access is not supported for this chain", checked fortxlist,getLogs,proxy). A keyless operator would get nothing. Hence a third path.Changes (
skills/onchain-monitor/SKILL.md)robinhoodadded to the allowlist (config example + step-0case), Alchemy slug map (robinhood=robinhood-mainnet), chainid map (robinhood=4663), explorer list (robinhoodchain.blockscout.com).robinhoodonly): ERC-20Transferlogs with the watch as recipient, then as sender, viaeth_getLogsonrpc.mainnet.chain.robinhood.com. That RPC caps queries without anaddressfilter at 30,000 blocks, so the range is walked in 30,000-block windows.symbol()/decimals()viaeth_call. Footer reportspath=rpc (erc20 only).current_block − 280000onrobinhood(~0.103s blocks), the same ≈8h as the existing ETH default.eyebrowlock.json: only theonchain-monitorentry changes — new hashes + the one new egress hostrpc.mainnet.chain.robinhood.com.Verified (live, mainnet)
symbol()/decimals()decode. A 30,001-block window is rejected by the RPC (cap confirmed).robinhood-mainnet:alchemy_getAssetTransfersboth directions → 50 transfers each (ERC-20 + external ETH,withMetadatatimestamps);eth_getLogsby address at 2,000 blocks → 3,507 logs; 10,000 blocks →Log response size exceeded../notify:robinhoodandRobinhoodaccepted, duplicate address → "Already watching", unknown chain still falls back toethereum.eyebrow verify --ci(v0.5.6, same as CI): fails without the lock update (capability expansion), passes with it.scripts/skill-scan.shPASS; lock coverage step OK;validate-skill-packs.mjs,validate-readme-catalog.mjs,validate-config.jsOK;git diff --checkclean.Known limits (stated so nothing surprises a reviewer)
robinhoodasset platform, but the Robinhood memecoins I tested return{}fromsimple/token_price/robinhood. Those events becomeUNPRICEDper the existing step 3 (logged, not notified). Alerts on Robinhood are therefore strongest for priced assets / native ETH (Path A).Type of change
Core fix (dashboard / scripts / workflows / docs)
onchain-monitor), no unrelated refactorcurlfor the public keyless endpoint as in the Network note)eyebrow verify --ci, skill-scan, lock coverage, validators)apps/**? — n/aNeed help on this PR? Tag
@codesmith-botwith what you need.