Sign Bidirectional Flow
The Sign Bidirectional flow enables cross-chain transaction execution with verified response callbacks. It allows a source chain contract to execute a transaction on a destination chain and receive the execution result back on-chain with cryptographic proof.
For example, a Solana program can execute a transaction on Ethereum and receive the contract return value or success/failure status back on Solana—all verified by the MPC network.
Comprehensive Documentation: For detailed documentation including request ID generation, serialization schemas, response verification, error handling, and security considerations, see the Signet Solana Program Rust Docs.
Supported Chains
| Source Chain | Destination Chain | Status |
|---|---|---|
| Solana | Ethereum | Supported |
| Solana | Bitcoin | In Progress |
| Polkadot | Ethereum | In Progress |
| Polkadot | Bitcoin | In Progress |
| Hyperliquid | Ethereum | Planned |
| Hyperliquid | Bitcoin | Planned |
Overview
The bidirectional flow enables a source chain contract to:
- Request a signature for a destination chain transaction
- Broadcast the signed transaction to the destination chain
- Receive the execution result (contract return value or success/failure) back on the source chain
User Source Chain MPC Destination Chain
│ │ │ │
│ sign_bidirectional() │ │ │
├────────────────────────►│ │ │
│ │ SignBidirectionalEvent │ │
│ ├───────────────────────►│ Sign & store │
│ │◄───── respond() ───────┤ │
│ Poll signature │ │ │
│◄─ SignatureRespondedEvent │ │
│ │ │ │
│ Broadcast ──────────────┼────────────────────────┼───────────────────────►│
│ │ │◄──── Observe tx ───────┤
│ │◄─ respond_bidirectional() │
│ Poll response │ │ │
│◄─ RespondBidirectionalEvent │ │
│ │ │ │Flow Steps
- Sign Request: User calls
sign_bidirectionalwith a serialized unsigned transaction for the destination chain - Signature Delivery: MPC signs the transaction and returns the signature via
respond() - User Broadcast: User assembles and broadcasts the signed transaction to the destination chain
- Observation: MPC Indexer (using a light client) observes the destination chain and detects confirmation
- Output Extraction: MPC extracts execution result (contract return value or transfer success)
- Response Callback: MPC calls
respond_bidirectionalwith the result and a cryptographic proof. TheRespondBidirectionalevent is indexed and sent to processing on the source chain contract
Related Documentation
- Signet Solana Program Rust Docs - Complete reference (instructions, events, types, security)
- Chain Signatures Contract - Contract interface
