![]() LayerZero的白皮书大概这样描述这个方案(我尽量翻译) 上图说明了有效传递单个LayerZero消息所涉及的步骤,图中每个黑底的数字代表了一个步骤。 **步骤1:**链A(AppA)上的用户应用程序作为事务t的一部分执行一系列的动作。我们通过交易标识符t来唯一标识事务T,t的格式可能会根据链A的类型而有所变化。事务T中包含的一个步骤是通过LayerZero传输有效传递。为了说明目的,并且不丧失一般性,我们假设在这个场景中Appa使用我们的模版中继器。AppA向LayerZero通信器发送一个包含以下信息的请求: t:代表唯一的事件识别符 dst:代表指向链上智能合约的全局识别符 payload:代表链A应用希望传送给链B应用的任何消息数据 relayer_arge:代表在链A应用希望采用图中所示的模版中继器(layerZero提供的一个可自定义的中继器)时所提交的支付信息的一些参数 **步骤2:**通信器(Communicator)构造一个包含dst和payload的LayerZero数据包,称为数据包(dst、payload),并将它与t和relayer_args一起发送给验证器(Validator)。 **步骤3:**验证器(Validator)将t和dst发送到网络。此步骤通知网络,需要将链A上当前块的块头发送到链B。 **步骤4:**验证器(Validator)将包(dst、有效负载)、t和relayer_args转发到中继器(Relayer),通知中继器(Relayer)需要预取T的事务证明并最终发送到链B。这与步骤3同时发生。 **步骤5:**网络将当前事务(cur_blk_id)的块ID发送给Oracle。这将通知Oracle获取链A上当前块的块头,并将其发送到链B。如果在同一块中发生了多个LayerZero事务,则步骤5只执行一次。 **步骤6:**Oracle从链A中读取块头(blk_hdr)。 **步骤7:**中继器(Relayer)从链A读取与交易T关联的交易证明(证明(t)),并在链外存储。步骤6和步骤7彼此异步发生。 **步骤8:**Oracle确认blk_hdr对应的块在链A上稳定提交,然后将blk_hdr发送到链B上的网络。确定每条链何时发生这种情况的机制是不同的,但通常需要等待一定数量的块确认。 **步骤9:**网络将指定为blkJhdrJhash的区块hash发送给验证器(Validator)。 **步骤10:**验证器(Validator)将blkJhdrJhash转发到中继器(Relayer)。 **步骤11:**在接收到blk_hdr_hash之后,中继器(Relayer)发送与当前块匹配的所有包(dst、payload)、t、证明(t)元组的列表。如果多个用户在同一端点之间同时发送消息,则在同一块内可能存在多个数据包和关联的事务证明。 (责任编辑:admin) |