WHERE IT READS

Endpoints,
checked not assumed

The desk talks to an endpoint and to nothing else. These are offered as a convenience; each one had to answer the right chain id and send a CORS header before it earned a place in the list.

chainchain idendpointfallbacks
Each was called with eth_chainId and had to do two things: answer the right id, and send an access-control-allow-origin header — the second is what decides whether a browser may use it at all.
endpointwhat it answered
eth.llamarpc.comHTTP 525, and no CORS header at all. This was the default until it was checked, and it is why an early run came back with every slot unread.
rpc.ankr.com/eth“Unauthorized: You must authenticate your request with an API key.”
polygon-rpc.com“API key disabled, reason: tenant disabled.”
lb.routeme.sh“public rate limit” on the first anonymous call.
wss:// entriesSockets. This client speaks HTTP JSON-RPC and nothing else, so they are not offered.
Kept rather than quietly removed. An endpoint that stops working is the likeliest reason a reading goes missing, and the sheet is supposed to make the difference between “absent” and “not checked” impossible to miss.

Watch it, don’t just read it once

The desk answers “what does it allow right now”. The command line answers “what changed since yesterday”: content-addressed snapshots, a diff, and exit code 8 while any threshold you set is crossed — which is what makes it useful in cron.

A rug is not a slow drift. The point of watching is to hear the owner key wake up: a fee raised, a cap dropped, ownership transferred, a switch flipped. A balance that merely moved is deliberately not reported as a change, or the alert would fire on every block and you would learn to ignore it.

# install
$ git clone https://github.com/monokernn/REAGENT.git && cd REAGENT
$ pip install -e .

# config.toml — an endpoint for the chain
[rpc]
robinhood = "https://rpc.mainnet.chain.robinhood.com"

# read a contract, then keep watching it
$ assayer add robinhood:0x… --coin --pool 0x…
$ assayer snap <asset> && assayer show <asset>
$ assayer watch