Draft Operations

A draft operation is an Operation created without a signature. CRE Connect stores it in pending_signature until your application finalizes it with a digest and signature, cancels it, or lets its deadline expire.

Drafts support workflows where the system that builds an Operation cannot sign it immediately. Common examples include MPC approval queues, human review, KMS-based approval, preview-before-sign interfaces, and cancellation before execution.

Signed operations vs drafts

CapabilitySigned operationDraft operation
Created with signatureYesNo
Initial statusacceptedpending_signature
Relayed to the DON immediatelyYesNo. CRE Connect waits for finalization.
Can include transaction previewsNoYes
Can be cancelled before executionNoYes, while still pending_signature.
Uses the EIP-712 digestYes, during signing.Yes, during finalization.

Use a signed Operation when your signer is available synchronously. Use a draft when another system or person must approve the Operation before CRE Connect relays it.

Draft lifecycle

A draft starts in pending_signature. From there, only three outcomes matter:

StatusHow it happensMeaning
acceptedPATCH /channels/{channel_id}/operations/{operation_id} with status: "accepted", signature, and digest.The draft has been finalized and can now follow the normal operation lifecycle.
cancelledPATCH /channels/{channel_id}/operations/{operation_id} with status: "cancelled".The draft was cancelled before finalization. Terminal.
expiredThe operation deadline elapsed before finalization.The draft can no longer be finalized. Terminal.

See Lifecycles for the complete OperationStatus reference.

Digest and finalization

CRE Connect computes the EIP-712 digest when you create the Operation. This is the same 32-byte digest that the SDK computes with client.Transact.HashOperation(op, chainSelector).

When you finalize a draft, you send both values:

  • digest: the EIP-712 operation hash.
  • signature: a 65-byte signature over that digest.

The digest acts as an integrity check. It binds the signature to the exact Operation that CRE Connect stored as the draft: same wallet operation ID, Smart Account, deadline, chain, and transactions.

Deadlines

Operation.Deadline is part of the EIP-712 payload. You choose it before draft creation, and you cannot change it later without creating and signing a different operation.

  • deadline = 0: no expiration.
  • deadline > 0: Unix timestamp after which the operation can no longer execute.

For drafts, the deadline controls how long the operation can wait for signature. If the deadline passes before finalization, the operation moves to expired. A finalize attempt near or after the deadline fails with OPERATION_DEADLINE_ELAPSED.

Transaction previews

Drafts can include optional transaction previews. A preview captures decoded calldata metadata for a transaction, such as the function signature and UI-friendly metadata your application wants to show to an approver.

Previews help teams build approval screens that say what the user is about to sign instead of only showing raw calldata. They do not change the signed EIP-712 operation. The signed payload remains the operation fields: ID, account, deadline, and transactions.

Events and verification

Draft lifecycle events are operational notifications, not DON-verified attestations. Events for pending_signature, cancelled, and expired do not carry OCR proofs.

After a draft reaches accepted, it follows the normal operation path. On-chain confirmation events, such as confirmed, carry DON proofs and can be verified with client.Events.VerifyOperationStatus.

Wallet operation ID reuse

The wallet_operation_id must be unique for active operations on the same wallet and chain. After a draft reaches a terminal state such as cancelled or expired, you can reuse that ID for a new operation.

In most integrations, a fresh ID is simpler and safer. Reuse mainly helps approval systems that want to preserve a business reference after a user cancels and recreates a draft.

Common use cases

Use caseDraft flow
MPC or policy approvalCreate a draft, route the digest to Fireblocks, Privy, KMS, or another approval system, then finalize with the returned signature.
Human reviewCreate a draft with previews, show the decoded transaction intent, then finalize or cancel based on the approver's decision.
Preview before signingStore transaction preview metadata with the draft so the UI can render what the signer will approve.
Cancel before executionCancel a pending_signature draft before it becomes executable.

Get the latest Chainlink content straight to your inbox.