How it works

Explaining how messages are transmitted in the ZKA Protocol.

Send

Sender Contract

Onchain / Source

A user calls the 'zkapSend' method inside the Sender OApp Contract, specifying a message, a destination ZKA Endpoint, the destination OApp address, and other protocol handling options.

ZKA Endpoint

Onchain / Source

The source Endpoint generates a packet based on the Sender OApp's message data, assigning each packet a unique, sequentially increasing number (i.e. nonce).

Verify

DVNs

Offchain

The configured DVNs, each using unique verification methods, independently verify the message. The destination MessageLib enforces that only the DVNs configured by the OApp can submit a verification.

Commit

Message Library

Onchain / DESTINATION

Once all of the DVNs in the OApp's Security Stack have verified the message, the destination MessageLib marks the message as verifiable.

Executor

Offchain

The Executor commits this packet's verification to the Endpoint, staging the packet for execution in the Destination Endpoint.

Receive

ZKA Endpoint

Onchain / DESTINATION

The Destination Endpoint enforces that the packet being delivered by the Executor matches the message verified by the DVNs.

Executor

Offchain

An Executor calls the 'zkapReceive' function on the committed message to process the packet using the Receiver OApp's logic.

Receiver Contract

Onchain / DESTINATION

The message is received by the Receiver OApp Contract on the destination chain.

Message Flow

Sender Contract

ZKA Endpoint

DVNs

Message Library

Executor

ZKA Endpoint

Executor

Receiver Contract

Security Stack

Each OApp configures its own Security Stack by selecting DVNs (Decentralized Verification Networks) that will independently verify messages. This ensures trustless cross-chain communication.

Anonymous Execution

The ZKA Protocol ensures that sender information remains completely hidden throughout the entire message transmission process, while maintaining cryptographic verifiability.