Scroll Messenger Cross-chain Interaction
In this example, we will launch a dummy smart contract on either Sepolia or Scroll and interact
with it from the opposite chain. We will be using the ScrollMessenger
that is deployed on both
Sepolia and Scroll.
Deploying the Contracts
Target Smart Contract
Let’s start by deploying the target smart contract. We will use the Greeter contract for this example, but you can use any other contract. Deploy it to either Sepolia or Scroll. On Scroll, L1 and L2 use the same API, so it’s up to you.
We will now execute setGreeting
in a cross-chain way.
Operator Smart Contract
Switch to the other chain and deploy the GreeterOperator
. So, if you deployed the Greeter
contract on L1, deploy the GreeterOperator
on L2 or vice versa.
Calling a Cross-chain Function
We pass the message by executing executeFunctionCrosschain
and passing the following parameters:
scrollMessengerAddress
: This will depend on where you deployed theGreeterOperator
contract.- If you deployed it on Sepolia use
0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A
. If you deployed on Scroll Sepolia use0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d
.
- If you deployed it on Sepolia use
targetAddress
: The address of theGreeter
contract on the opposite chain.value
: In this case, it is0
because thesetGreeting
is not payable.greeting
: This is the parameter that will be sent through the message. Try passing“This message was cross-chain!”
gasLimit
:- If you are sending the message from L1 to L2, around
1000000
gas limit should be more than enough. That said, if you set this too high, andmsg.value
doesn’t covergasLimit
*baseFee
, the transaction will revert. Ifmsg.value
is greater than the gas fee, the unused portion will be refunded. - If you are sending the message from L2 to L1, pass
0
, as the transaction will be completed by executing an additional transaction on L1.
- If you are sending the message from L1 to L2, around
Relay the Message when sending from L2 to L1
When a transaction is passed from L2 to L1, an additional “execute withdrawal transaction” must be sent on L1. To do this, you must call relayMessageWithProof
on the L1 Scroll Messenger
contract from an EOA wallet.
You can do this directly on Etherscan Sepolia. To do so, you will need to pass a Merkle inclusion proof for the bridged transaction and other parameters. You’ll query these using the Scroll Bridge API.
We’re finalizing the API specifics, but for now, fetch or curl the following endpoint:
Replace GREETER_OPERATOR_ADDRESS_ON_L2
with your GreeterOperator contract address as launched on L2. Read more about Execute Withdraw transactions
in the Scroll Messenger article.
After executing and confirming the transaction on both L1 and L2, the new state of greeting
on the Greeter
contract should be “This message was cross-chain!”
. Sending a message from one chain to the other should take around 20 minutes after the transactions are confirmed on the origin chain.
Congratulations, you now executed a transaction from one chain to the other using our native bridge!