submit-hook
${var} - a hook address (
0x...) to submit. Empty means the most recent live mainnet deploy inmemory/state/hook-deploys.json.
Today is ${today}. This skill takes a hook this instance already deployed and lists it on the public registry aeonfun/univ4-hooks (the source behind the aeon hook marketplace). It does the formatting the registry expects, then opens a PR. The flags and callbacks are decoded from the address by the registry, so this skill only supplies the address, the chain, and the human-readable listing.
The mechanics (clone, write the entry, regenerate the registry, open the PR, fall back to an issue when there is no push access) live in skills/submit-hook/submit-univ4.py, so all GitHub egress stays inside that helper.
What lists, and what does not
- Only live mainnet deploys. A dry-run or a testnet deploy is never submitted (the registry lists real, verifiable hooks). Skip with
SUBMIT_HOOK_SKIP. - Only registry-supported chains. The registry's
chains.jsoncoversethereum base robinhood monad bnb arbitrum unichain. A deploy on any other chain is skipped (SUBMIT_HOOK_UNSUPPORTED_CHAIN); note it and stop. - Idempotent. The helper skips if the address (any chain) or the slug is already listed, so re-running is safe.
Steps
-
Pick the deploy. Read
memory/state/hook-deploys.json(a list of deploy records). If${var}is a0x...address, select the record whosehookAddressmatches it; else select the most recent record withnetwork: "mainnet". No matching record means notify and exitSUBMIT_HOOK_NONE. -
Gate it. If the record's
networkis notmainnet, exitSUBMIT_HOOK_SKIP. If itschainis not one ofethereum base robinhood monad bnb arbitrum unichain, exitSUBMIT_HOOK_UNSUPPORTED_CHAIN(the registry cannot list it yet). Confirmint(hookAddress,16) & 0x3FFF == int(flags,16); if not, the record is inconsistent, so notify and exitSUBMIT_HOOK_BAD_RECORD. -
Name it. Derive a PascalCase contract-style
namefrom the record'sbrief/feature (a market-hours gate becomesMarketHoursGate). This is the marketplace title and thehooks/<slug>.jsonfilename.