The following guide is meant to help developers onboard quickly to Nethermind’s implementation of the Wormhole cross-chain messaging bridge on Aztec devnet. It also refers to a demo app example by Nethermind leveraging this infrastructure.

Introduction

Wormhole is a generic message-passing protocol that enables communication between different blockchains. It acts as a cross-chain bridge, allowing smart contracts on separate networks to interact with each other. At its core, Wormhole is not a token bridge itself but a foundational layer upon which developers can build a wide range of cross-chain applications, including token bridges, cross-chain governance, and multi-chain dApps.

The protocol's security is upheld by a decentralized network of Guardians who observe messages (called Verifiable Action Approvals or VAAs) on a source chain, sign them to attest to their validity, and make them available for relay to a destination chain.

Our integration brings the full Wormhole messaging protocol to the Aztec network, enabling both inbound and outbound cross-chain communication.

<aside> ℹ️

To learn more about the Wormhole Cross-Chain messaging protocol, please see: Wormhole Messaging Overview.

To learn how VAAs are structured (and how they ought to be parsed and consumed by applications), please see: Verified Action Approvals.

</aside>

Architecture

Next, we detail the key components of the Wormhole protocol which will be relevant for our implementation. For a diagram of where each component falls into place, see below.

Source: Wormhole Messaging Overview

Source: Wormhole Messaging Overview

Core Contracts

The Wormhole Core Contract, written in Noir, is the central hub for all Wormhole messages on the Aztec network. It is responsible for emitting messages to be sent to other chains and for receiving and verifying messages destined for Aztec.

The core contract on Aztec implements the following key methods:

Emitter Contracts

An Emitter, or Source contract is any smart contract on the source chain that interacts with the Core Contract to send a message to another chain.

<aside> ℹ️

To build a cross-chain application sending messages, you will write an Emitter contract that defines the specific data you want to send.