How it works
Explaining how messages are transmitted in the ZKA Protocol.
Sender Contract
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
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).
DVNs
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.
Message Library
Once all of the DVNs in the OApp's Security Stack have verified the message, the destination MessageLib marks the message as verifiable.
Executor
The Executor commits this packet's verification to the Endpoint, staging the packet for execution in the Destination Endpoint.
ZKA Endpoint
The Destination Endpoint enforces that the packet being delivered by the Executor matches the message verified by the DVNs.
Executor
An Executor calls the 'zkapReceive' function on the committed message to process the packet using the Receiver OApp's logic.
Receiver Contract
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.