Test your setup
Your cell (the verifier and aggregator) is not onboarded yet, so the default executor cannot fetch your
attestation and a message sits at UNTOUCHED. Prove the verifier and aggregator work by sending a message that
requires your CCV, then executing it yourself with
ccip-cli, reading the attestation directly from your own
aggregator. Make a message require your CCV in either of these ways.
Option A: a token transfer that mandates your CCV
Use the CCT Foundry tutorials to deploy a token and pool and wire your CCV as a required verifier for the lane. Point that required verifier at your resolver, not the verifier implementation: a pool that lists the implementation reverts during the fee quote with no revert data. Then transfer the token on that lane. Take the source Router from the CCIP directory:
ccip-cli send -s <sourceChain> -d <destChain> -r <sourceRouter> \
--to <destWallet> -t <yourToken>=<amount>
Option B: a receiver contract that requires your CCV
Deploy a receiver contract that declares your resolver as a required verifier through getCCVsAndFinalityConfig;
the Send arbitrary data tutorial walks the
receiver pattern, and you return your resolver in the receiver's required-CCV list. Your CCV has to be named on
both sides: the receiver declares it on the destination, and the send names the same resolver on the source with
-x ccvs so your verifier attests. Take the source Router from the CCIP directory:
ccip-cli send -s <sourceChain> -d <destChain> -r <sourceRouter> \
--to <yourReceiverContract> --data "hello" -L 200000 -x ccvs='["<resolver>"]'
Execute it yourself
Execute the message with ccip-cli 1.14.0 or later, passing your aggregator's gRPC endpoint:
ccip-cli manual-exec <src-tx> --verifiers grpcs://<your-aggregator-host>:443
--verifiers (alias --verifier) takes one or more endpoints; pass your aggregator's public TLS gRPC endpoint
(grpcs://). For a committee, pass every aggregator, space-separated:
ccip-cli manual-exec <src-tx> \
--verifiers grpcs://agg-1.example.com:443 grpcs://agg-2.example.com:443 grpcs://agg-3.example.com:443
For the mechanism, see manual execution.
Confirm the result two ways. With ccip-cli, a successful execution reports "status": "SUCCESS":
ccip-cli show <messageId> --rpcs <destRpc> --json
With the CCIP REST API, read the status field; a successful execution prints SUCCESS:
curl -s https://api.ccip.chain.link/v2/messages/<messageId> | jq -r '.status'
Checkpoint: the message reached the destination. The cell is ready for onboarding.