Scroll Messenger 跨链交互
在这个例子中,我们将在 Sepolia 和 Scroll Sepolia 上启动一个虚拟智能合约,并从对方的链上与之交互。我们将使用同时部署在 Sepolia 和 Scroll Sepolia 上的 ScrollMessenger
合约。
部署合约
目标智能合约
让我们从部署目标智能合约开始。在本例中,我们将使用 Greeter 合约。 但你也可以使用任何其他合约,将其部署到 Sepolia 或 Scroll。 在 Scroll 上,L1 和 L2 使用相同的 API,一切取决于您。
我们现在将以跨链方式执行setGreeting
方法。
操作方智能合约
切换到另一条链并部署GreeterOperator
。因此,如果在 L1 上部署 Greeter
合约,请在 L2 上部署 GreeterOperator
,反之亦然。
调用跨链方法
我们通过执行 executeFunctionCrosschain
并传入以下参数来传递消息:
scrollMessengerAddress
: 这将取决于您部署GreeterOperator
合约的位置。- 如果您部署在 Sepolia 上请使用
0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A
。如果您部署在 Scroll 上请使用0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d
。
- 如果您部署在 Sepolia 上请使用
targetAddress
:Greeter
合约在对方链上的地址。value
: 在此示例中,是0
,因为setGreeting
不是付款方法。greeting
: 这是将通过消息传递的参数,尝试传入“This message was crosschain!”
gasLimit
:- 如果要将消息从 L1 发送到 L2,约 1000000 的 gas 上限应该足够了。话虽如此,如果您设置得太高,并且
msg.value
不足以支付gasLimit
*baseFee
,交易将回滚。如果msg.value
大于 gas 费用,多余的部分将被退还。 - 如果要将消息从 L2 发送到 L1,请传递 0 ,因为交易通过在 L1 上执行其他交易来最终确认。
- 如果要将消息从 L1 发送到 L2,约 1000000 的 gas 上限应该足够了。话虽如此,如果您设置得太高,并且
从 L2 向 L1 中继消息
当交易从 L2 传递至 L1 时,必须在 L1 上发送额外的“执行提款交易”。为此,您必须从EOA钱包调用 L1 上 Scroll Messenger合约的 relayMessageWithProof
方法。
您可以直接在 Etherscan Sepolia 上执行此操作。为此,您需要为桥接交易和其他参数传递默克尔树包含证明。您可以使用 Scroll 跨链桥 API 查询这些内容。
我们正在确定最终 API 的细节,现在,可以通过端点获取:
将 GREETER_OPERATOR_ADDRESS_ON_L2
替换为您在L2上发布的 GreeterOperator 合约地址。阅读更多关于执行提款交易的信息,请参阅 Scroll Messenger文章。
在 L1 和 L2 上执行并确认交易后, Greeter
合约 greeting
的新状态应为 “This message was crosschain!”
。从一个链向另一个链发送消息,最后在源链上确认交易后,大约需要 20 分钟。
恭喜,您现在使用我们的原生跨链桥执行了从一条链到另一条链的交易!