Practical overview
When it fits
Use Pigeon when a Foundry test needs to model bridge messaging or selected off-chain bridge behavior across forked networks, rather than mocking the whole flow with local contract calls.
Who it is for
- Solidity developers building applications that communicate across chains.
- Teams writing Foundry unit tests for Arbitrary Message Bridges or RFQ-based bridge flows.
Documented uses
- Simulate cross-chain bridge messages in a test suite.
- Run cross-chain unit tests against forked mainnet environments.
- Exercise bridge-related sender-authentication assumptions.
- Use bridge helpers to model selected messaging and gas-estimation behavior.
Requirements & limits
The repository is public, open source and MIT-licensed. The documented workflow uses Foundry's forge command.
- The README lists messaging support for multiple bridges, but gas-estimation support is listed for only Hyperlane, LayerZero, LayerZero V2 and CCIP.
- Bridge helpers have specific simulation boundaries; for example, the CCIP helper omits token-pool release or minting, rate limits, RMN curse checks and USDC CCTP attestations.
- The documented installation uses Foundry, and tests must provide relevant fork identifiers, endpoint details and emitted logs.
- For a.DI flows, the CrossChainController must be funded by the test before forwarding, and configured AMB endpoints should be read from the adapter.
Check current requirements in the official documentation. Source-based guidance does not mean OpenViST has run or independently tested this project.
Install Pigeon in a Foundry project
Add Pigeon's helper contracts to a Foundry project so they can be imported into test files.
Before you start
- A Foundry project
- Foundry's forge command
Steps
Install the repository with
forge install exp-table/pigeon.Add
pigeon/=lib/pigeon/to the project's Foundry remappings.Import Pigeon helper contracts into test files.
Expected outcome
Pigeon helper contracts are available for use in Foundry test files.
Guide limitations
- This covers installation and imports; bridge-specific test setup and execution require project configuration.
Simulate a Hyperlane message in a Foundry test
Pass a captured source transaction's logs to the Hyperlane helper for a destination fork.
Before you start
- Pigeon installed and remapped in a Foundry project
- A Foundry test with the source and destination fork identifiers and Hyperlane mailbox details
Steps
Record logs with
vm.recordLogs().Call the cross-chain function in the test.
Collect the emitted logs with
vm.getRecordedLogs().Pass the source and destination mailbox details, destination fork ID and logs to
hyperlaneHelper.help.
Expected outcome
The example invokes Pigeon's Hyperlane helper using the recorded source logs and destination fork context.
Guide limitations
- The example does not provide a complete project configuration or supported-network list.
Sources & review
Source record details
- Source availability
- Active
- Sources checked
- 12 October 2026
- Original website title
- exp-table/pigeon · Official homepage title · retained in its source language

