美文网首页
【BSC详解】4——oracle relayer

【BSC详解】4——oracle relayer

作者: ixiaolong | 来源:发表于2022-03-05 23:22 被阅读0次
oracle-relayer.png

1 简介

oracle-relayer 用于监控 BSC 上发生的跨链事件,并将相应的跨链信息发传递到 BC。与 bsc-relyer 不同,bsc-relyer 可以单独部署服务,而 oracle-relayer 与 BC 绑定,每个 bc-validator 都应该维护自己的 oracle-relayer 服务。

2 oracle-relayer 与 BC、BSC 的连接通道

oracle-relayer 与 BC、BSC 均通过 RPC 进行通信,RPC 的信息记录在 config/config.json 文件下。

  1. oracle-relayer <-----> BSC
    oracle-relayer 直接使用了 Etheruem 提供的 RPC 模块,可直接调用发送数据或者请求,其中最常用的是 eth_getLogs 进行交易获取某个块的 log 信息。其中,log 信息记录了solidity 合约中发生的事件,相关内容可参考:理解以太坊事件与日志
  2. oracle-relayer <-----> BC
    oracle-relayer 通过发送不同的请求信息获取 BC 上的数据,例如 GetProphecy 等。
oracle-relayer-rpc.png

2 监控 BSC

  1. 获取 BSC 最新块的块头;
  2. 获取 BSC 最新块中,地址为 CrossChain.sol 系统合约、topics 为 CrossChainPackageEventHash 的 log 信息,并将其转化成 CrossChainPackageEvent 保存到本地 DB 中,CrossChainPackageEvent 中记录了 BSC 发送到 BC 的跨链交易详情,其结构如下:
type CrossChainPackageEvent struct {
    ChainId         uint16
    OracleSequence  uint64
    PackageSequence uint64
    ChannelId       uint8
    Payload         []byte
}
  1. 根据 【BSC详解】3——bsc 中说明,BSC 共识为 PoSA,必须要等到一定的出快数量后,才能确保前面的块真正的被确认接收。在 oracle-relayer 中,本地会执行此逻辑的判断,只有当某一个高度的块的后面若干个高度的块的数据都获取到时,才将这个块高的数据置为 确认 状态。

3 中继

3.1 Oracle

在介绍中继的工作前,首先需要讲解 BC 的 Oracle 模块

Oracle 模块 用于处理 预言(Prophecy)声明(Claim),Prophecy 的意思是 validators 需要对某些事情上达成共识(例如跨链 tx),Claim 针对于某一个 Prophecy,由 validator 提出(例如某个 tx 明细),当大多数 validators (例如70%)对于同一个 Prophecy,Claim 同一个事情,该 Claim 将会被执行。Oracle 模块使用 sequence 记录 Prophecy 和 Claim,当一个 Prophecy 被成功执行后,Claim 的 sequence 会增加1。

具体的流程如下:

  1. Oracle 模块接收来自 validator 的 Claim,校验其合法性,如果 sequence 错误,将拒绝处理;
  2. 如果时第一个合法的 Claim,将会创建新的相关的 Prophecy,如果不是第一个,将会添加到现有的 Prophecy中;
  3. 如果 Claim 的数量达到一定的阈值,例如70%,Prophecy 将被标记为成功,相对应的 Claim 将通过对应和回调被执行,sequence 增加1;
  4. 如果 Claim 的数量未达到阈值,则 Prophecy 将被标记为失败并被删除,validators 将开始新的一轮 Claim;
3.2 中继工作
  1. 向 BC 查询 sequence;
  2. 在 DB 中查找 sequence 对应的 CrossChainPackageEvent(通过 OracleSequence 字段进行匹配);
  3. 向 BC 查询 sequence 对应的 Prophecy;
  4. CrossChainPackageEvent 进行打包,将数据填写进该 Prophecy 中;

参考

https://github.com/bnb-chain/oracle-relayer.git

相关文章

  • 【BSC详解】4——oracle relayer

    1 简介 oracle-relayer 用于监控 BSC 上发生的跨链事件,并将相应的跨链信息发传递到 BC。与 ...

  • 【BSC详解】3——bsc

    1 系统合约 BSC 的核心在于 系统合约(solidity),在 【BSC详解】2——bsc relayer[h...

  • 【BSC详解】2——bsc relayer

    1 简介 bsc-relayer 是一个独立进程,可单独运行,运行时首先会向 BSC 查询是否注册过,如果没有,则...

  • 关于SCN

    参考链接 深入剖析 - Oracle SCN机制详细解读 详解Oracle scn Oracle SCN详解 or...

  • 4、分享

    oracle中存储过程详解

  • 【BSC详解】5——总结

    众所周知,区块链是一个 去中心化 的技术,但由于各种各样的原因,BC 与 BSC 架构不足够去中心化,可以说是 半...

  • 【BSC详解】1——简介

    1 简介 Binance Chain,简称 BCBinance Smart Chain,简称 BSC BC 在20...

  • Oracle-RMAN 使用详解

    RMAN 使用详解 一、连接方式 (一)、连接本地数据库 [oracle@oracle ~]$ rman targ...

  • Oracle日志分析

    参考文献 UTL_FILE_DIR Oracle日志分析! 详解Oracle的日志的工具——LogMiner 一、...

  • 归档日志 oracle

    Oracle-归档日志详解(运行模式、分类) 一、Oracle日志分类 分三大类: Alert log files...

网友评论

      本文标题:【BSC详解】4——oracle relayer

      本文链接:https://www.haomeiwen.com/subject/rslbrrtx.html