Portal Community

build

Builds the ABI-encoded Client.EVM2AnyMessage tuple and the tag-prefixed extraArgs bytes a sender contract's ccipSend(...) call needs. Local, pure computation — no HTTP, no RPC call. See CCIP Concepts for what these fields mean.

FieldTypeRequiredDescription
receiverAddresstext✓ YesDestination-chain recipient, 0x + 40 hex characters.
payloadDatatextNoArbitrary application payload, hex-encoded (0x... or bare hex). Omit for a pure token transfer.
tokenAmountsJSON arrayNo[{"token":"0x...","amount":"1000000000000000000"}, ...]. Omit for a pure data message.
feeTokentextNoFee token address. Omit/empty to pay in the native gas token.
extraArgsVersionselectNov1 or genericV2 (default). See CCIP Concepts.
gasLimitnumberNoCallback gas limit. Defaults to Chainlink's documented 200000.
allowOutOfOrderExecutionbooleanNoOnly meaningful for genericV2; ignored for v1.

Example response:

{
  "encodedMessage": "[\"0x...\",\"0x...\",[[\"0xToken\",\"1000000000000000000\"]],\"0x000...000\",\"0x181dcf10...\"]",
  "extraArgsBytes": "0x181dcf10...",
  "estimatedMessageId": ""
}
estimatedMessageId is always empty. The real CCIP messageId is only assigned once ccipSend actually executes on-chain (a separate step, performed by the Ethereum ExecutionNode). This operation cannot predict it in advance.

getStatus

Looks up a previously-sent message's delivery status. HTTP: GET /messages/{messageId} against the CCIP API v2.

FieldTypeRequiredDescription
messageIdtext✓ YesThe CCIP message ID returned once ccipSend executed on-chain.

Example response:

{
  "messageId": "0xabc123...",
  "executionState": "SUCCESS",
  "sourceNetworkInfo": { "name": "ethereum-mainnet", "chainId": "1", "chainSelector": "5009297550715157269" },
  "destNetworkInfo": { "name": "arbitrum-mainnet", "chainId": "42161", "chainSelector": "4949039107694359620" }
}
executionStateMeaning
UNTOUCHEDNot yet picked up on the destination chain.
IN_PROGRESSBeing processed.
SUCCESSDelivered and executed successfully.
FAILUREExecution failed on the destination chain — see checkManualExecutionRequired below.
Exact on-chain vocabulary, not remapped: executionState is kept as the literal on-chain MessageExecutionState enum name rather than translated to a BizFirst-specific term, so it matches exactly what you'd see cross-referencing the CCIP Explorer.

checkManualExecutionRequired

Reports whether a message is eligible for manual re-execution. Derived from a getStatus call internallytrue exactly when executionState == FAILURE.

FieldTypeRequiredDescription
messageIdtext✓ YesSame message ID as getStatus.
{ "manualExecutionRequired": true, "executionState": "FAILURE" }
Check only — does not perform manual execution. This operation tells you whether re-execution is needed; it does not itself submit one. The real authorization/calldata shape for a manual execution write was never confirmed during design review — see Roadmap.

getTokenTransferRateLimit

Prepares a call descriptor for reading a token's cross-chain transfer rate limit — not a resolved value, unlike every other operation on this page.

FieldTypeRequiredDescription
tokenAddresstext✓ YesToken contract address on the source chain.
destinationChainSelectortext✓ YesCCIP chain selector of the destination chain (string — see Networks).
{
  "contractAddress": "0x...",
  "functionName": "currentRateLimiterState",
  "functionArgsJson": "[...]",
  "rateLimitCapacity": null,
  "rateLimitCurrent": null
}
No confirmed on-chain ABI. Unlike router/isChainSupported/getFee, no real TokenPool rate-limiter ABI was confirmed during design review, so this operation returns a prepared contract address/function name/args descriptor rather than a resolved value — rateLimitCapacity/rateLimitCurrent are typically null. Pass the descriptor to the Ethereum ExecutionNode's own read-contract step to actually resolve it once the exact getter is confirmed for your TokenPool version.