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.

What's next

Get the latest Chainlink content straight to your inbox.