
Overview
Reactive Contracts (RCs) can listen to event logs on one chain and trigger actions on another. To describe that flow, we use two roles:
- Origin — the chain where events happen and event logs are read from (the event source).
- Destination — the chain where Reactive Network delivers a callback transaction (the chain where state changes happen).
Origins and destinations don’t have to be the same. A single Reactive Contract can subscribe to events from multiple origin chains, and it can send callbacks to one or more destination chains. Your Solidity logic can also choose the destination conditionally.
Callback Proxy Address
Callbacks are delivered to destination chains via a Callback Proxy contract. Its job is to make callback transactions verifiable and safe for destination-side contracts.
A destination contract can validate a callback by checking:
- The sender is the Callback Proxy (so the call is coming through the expected entry point).
- The embedded RVM ID matches the intended Reactive Contract (so the callback is tied to the correct RC).
Some networks can’t act as destination chains yet because the Callback Proxy contract hasn’t been deployed there. In that case, use Hyperlane as the transport for cross-chain callbacks.
Mainnet Chains
Origin is the chain where events originate (and are read from). Destination is the chain where callbacks are delivered in response to those events. Mainnets and testnets must not be mixed: if the origin is a mainnet, the destination must also be a mainnet.
| Chain | Origin | Destination | Chain ID | Callback Proxy | RPC |
|---|---|---|---|---|---|
| Abstract | ✅ | ✅ | 2741 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |
| Arbitrum | ✅ | ✅ | 42161 | 0x4730c58FDA9d78f60c987039aEaB7d261aAd942E | Chainlist |
| Avalanche | ✅ | ✅ | 43114 | 0x934Ea75496562D4e83E80865c33dbA600644fCDa | Chainlist |
| Base | ✅ | ✅ | 8453 | 0x0D3E76De6bC44309083cAAFdB49A088B8a250947 | Chainlist |
| BSC | ✅ | ✅ | 56 | 0xdb81A196A0dF9Ef974C9430495a09B6d535fAc48 | Chainlist |
| Ethereum | ✅ | ✅ | 1 | 0x1D5267C1bb7D8bA68964dDF3990601BDB7902D76 | Chainlist |
| HyperEVM | ✅ | ✅ | 999 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |
| Linea | ✅ | ✅ | 59144 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |
| Plasma | ✅ | ✅ | 9745 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |
| Reactive | ✅ | ✅ | 1597 | 0x0000000000000000000000000000000000fffFfF | https://mainnet-rpc.rnk.dev/ |
| Sonic | ✅ | ✅ | 146 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |
| Unichain | ✅ | ✅ | 130 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |
Testnet Chains
Origin is the chain where events originate (and are read from). Destination is the chain where callbacks are delivered in response to those events. Mainnets and testnets must not be mixed: if the origin is a testnet, the destination must also be a testnet.
| Chain | Origin | Destination | Chain ID | Callback Proxy | RPC |
|---|---|---|---|---|---|
| Avalanche Fuji | ✅ | ➖ | 43113 | ➖ | Chainlist |
| Base Sepolia | ✅ | ✅ | 84532 | 0xa6eA49Ed671B8a4dfCDd34E36b7a75Ac79B8A5a6 | Chainlist |
| BSC Testnet | ✅ | ➖ | 97 | ➖ | Chainlist |
| Ethereum Sepolia | ✅ | ✅ | 11155111 | 0xc9f36411C9897e7F959D99ffca2a0Ba7ee0D7bDA | Chainlist |
| Reactive Lasna | ✅ | ✅ | 5318007 | 0x0000000000000000000000000000000000fffFfF | https://lasna-rpc.rnk.dev/ |
| Polygon Amoy | ✅ | ➖ | 80002 | ➖ | Chainlist |
| Unichain Sepolia | ✅ | ✅ | 1301 | 0x9299472A6399Fd1027ebF067571Eb3e3D7837FC4 | Chainlist |