跳到正文
cccskills
免费在 GitHub 公开

warp-verify-onchain-config

The post-change validation contract for warp routes — after any step that changes (or proposes) on-chain state, prove the route's config matches the target via hyperlane warp check. Run a live check when the change already executed (deployer-signed); run a fork-simulate-from-owner check via /warp-route-check when the change is pending multisig/file execution. Referenced by every deploy/update skill that mutates a route.

中文简介正在准备中。当前显示原文说明。

实测评分 未实测

查看安装方法

包含的文件(1)

  • SKILL.md6.1 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Verify On-Chain Warp Config After a Change

Every on-chain-changing step in the deploy/update chain must be followed by a validation that the route's config is exactly the target — never assume warp apply / warp deploy "just worked". A silent misconfiguration (wrong owner, wrong ISM threshold, an enrollment that reverted, a fee on the wrong contract) is far cheaper to catch here than after the route is live. This skill is the single contract for that check so every caller does it the same way.

The rule

After a step mutates route state — a deploy, an ownership transfer, a warp apply, a fee/ISM/hook change, a chain extension — validate config against the target before treating the step as done. How you validate depends on whether the change has actually executed on-chain yet.

Mode A — the change executed now (deployer-signed / jsonRpc)

The txs were signed by the deployer key and are already mined (fresh deploys, ownership transfers to real owners, any deployer-executed warp apply). Validate against live on-chain state:

# Comprehensive: every contract in the route vs the target deploy.yaml
pnpm --silent -C typescript/cli hyperlane warp check \
  --registry <registry> \
  --warp-route-id <WARP_ROUTE_ID>

If any owner is an ICA, additionally run the ICA-aware check (additive):

pnpm --silent -C typescript/cli hyperlane warp check --ica \
  --origin <ICA_ORIGIN_CHAIN> \
  --originOwner <CONTROLLING_OWNER_ON_ORIGIN> \
  --chains <route-chains>

--originOwner is REQUIRED when the ICA's origin chain is NOT one of the route chains (otherwise the CLI errors Origin chain <name> does not have an owner configured); safest to always pass it. No violations = on-chain matches the target. Violations ⇒ the change did not land as intended — stop and investigate; do NOT proceed to the registry PR / monitor / next step.

Mode B — the change is pending multisig / file execution

The warp apply emitted a Safe TX Builder batch / Squads instructions / a file-submitter batch that a human still has to sign + execute. A live warp check would (correctly) report violations because nothing has executed yet — so validate two ways instead:

  1. Up-front, on a fork (simulate execution from the owner): run /warp-route-check — it forks each chain, queries each target's current on-chain owner() and anvil_impersonateAccounts it (multisig / timelock included), replays the batch calldata from those addresses, self-relays any ICA messages, then runs warp check on the fork against the target. This proves the batch we generated yields the expected config, with no signatures required. This is the hard gate before proposing.

    Owner-changing batches — a PASS is NOT sufficient on its own. /warp-route-check tolerates ownership mismatches on the chains it touches (it impersonates the existing owner to replay, and does not fail on the owner field alone), so a batch that is supposed to change an owner can PASS its functional checks without the fork proving the new owner landed. When the batch changes any owner, additionally assert on the fork that the post-replay owner() equals the target owner (cast call <artifact> "owner()(address)" against the fork), and treat a mismatch as a failure. If you cannot make that explicit owner assertion, do NOT report the owner change as fork-verified — rely on the post-execution registry-PR CI in step 2 for it.

  2. Post-execution, on the real chain: the registry PR's check-warp-deploy.yaml CI runs warp check against live state on every push and only goes green after the signers execute the proposals. That is the real-chain confirmation; open the PR immediately (the deploy.yaml already reflects the target) and let CI green once execution lands — sometimes hours/days later.

Mode B's fork check is your suggestion made routine: you get the "config == expected" answer immediately by simulating the multisig, and the CI catches any divergence between the proposed batch and what the signers actually executed.

Current implementation limitation — fail closed, don't over-claim. /warp-route-check today ingests a single flat EVM transactions file (it parses a top-level array of {chainId, to, …} and decodes EVM calldata). It does not yet accept a receipts directory, Safe-TX-Builder object receipts ({version, chainId, transactions: […]}), SVM receipt arrays (base58 tx blobs), or distinguish already-executed jsonRpc batches from pending governance batches. So the Mode-B fork gate is authoritative only for a single-file EVM batch. For a receipts directory, a Safe-object batch, or any SVM batch, the fork gate cannot run — do NOT report those as fork-verified; fail closed (surface the batch for manual verification and rely on the post-execution registry-PR CI in step 2). Reconciling /warp-route-check to the receipts-directory format is tracked as part-2 work.

Picking the mode per batch

A single run can produce BOTH kinds of batch — e.g. a warp apply that deploys a new contract deployer-signed (Mode A) AND emits a Safe batch for an ownership change (Mode B). Verify each batch by how it executes: live-check the deployer-executed parts now, fork-check + CI the multisig parts.

Consumers

/warp-deploy-update-owners (Mode A — live check after the deployer-signed transfer), /warp-update (Mode A for deployer-executed batches, Mode B for multisig batches), /warp-update-extend (Mode B — fork-simulate-from-customer-multisig before shipping tx files). /warp-route-check is the Mode-B fork implementation; /fetch-safe-tx-batch feeds it a pending Safe batch.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Write a changeset file in the `hyperlane-registry` repo for a PR that adds, updates, or modifies warp route config / chain metadata / addresses. Canonical pattern — never run the interactive `pnpm changeset` CLI; write the file directly. Referenced by any skill that opens a registry PR.

中文简介正在准备中。当前显示原文说明。

hyperlane-xyz/hyperlane-monorepo762026年10月23日 更新

Trigger Docker image builds for Hyperlane agent, monorepo, or node service images. Use when the user wants to build new Docker images for a branch, commit, or tag.

中文简介正在准备中。当前显示原文说明。

hyperlane-xyz/hyperlane-monorepo762026年10月23日 更新

The low-level on-chain probes for identifying what an owner address is — cast code → EOA / EIP-7702-delegated EOA / contract, VERSION() → Gnosis Safe, read-only get-owner-ica.ts derive → ICA derivation, getAccountInfo → Sealevel account existence — with how to interpret each result. The primitive layer beneath validate-owners / resolve-artifacts / update-owners, which each apply their own per-chain or per-artifact policy on top.

中文简介正在准备中。当前显示原文说明。

hyperlane-xyz/hyperlane-monorepo762026年10月23日 更新

Review code changes using Hyperlane monorepo coding standards. Use when reviewing PRs, checking your own changes, or doing self-review before committing.

中文简介正在准备中。当前显示原文说明。

hyperlane-xyz/hyperlane-monorepo762026年10月23日 更新

Debug why a Hyperlane message is not being processed. Use when given a message ID or explorer URL to investigate delivery failures, gas estimation errors, validator issues, or other processing problems.

中文简介正在准备中。当前显示原文说明。

hyperlane-xyz/hyperlane-monorepo762026年10月23日 更新

Debug RPC provider health issues for a chain. Use when alerts mention RPC failures, high latency, stale blocks, or provider errors. Diagnoses the issue and recommends fixes.

中文简介正在准备中。当前显示原文说明。

hyperlane-xyz/hyperlane-monorepo762026年10月23日 更新

查看 hyperlane-xyz 的全部技能

报告此技能的问题