主要组件

本章详细阐述了前面图表中的所有主要组件,以及我们迄今为止实施的功能:

平行链功能栈

Teerex功能栈

为了与侧链进行通信,平行链必须包含此功能栈。 Teerex有两个重要的接口。

  1. 验证Intel的SGX节点,如果验证完成,则接受注册。

  2. 获取调用SGX运行时中某个外部的请求。调用sgx-runtime外部包括一个参数,类型是Call,可以是任何用pallet id,外部索引和SGX运行时参数编码的字节码。

注意:在开发环境中,我们可以通过编译功能跳过验证:

cargo build --features skip-ias-check

信用分数功能栈

Litentry提供计算客户信用分数的服务,该分数基于关联的帐户和与这些帐户相关的数据。所有帐户都存储在SGX中,数据抓取和分数计算发生在SGX中,以避免信息泄漏。此板负责从SGX侧链获取分数,结果可以由客户的公钥加密,或根据Litentry SDK由Dapp使用。

SGX Runtime

我们在此存储库中定义在SGX中执行的运行时。 SGX运行时类似于Substrate运行时,由板组成。该运行时可以编译为WASM blob或二进制文件。不同之处在于SGX运行时取决于前面提到的tee-sgx-sdk。

对于Substrate运行时执行,我们需要两个包。第一个是sp-externalities,提供执行环境。另一个是sp-io,用于运行时访问数据库,文件系统,区块链状态等。由于SGX运行时在SGX中执行,因此Substrate的两个包在SGX中不适用。

SGX运行时repo中有两个包,分别是sgx-runtime/sp-io和sgx-runtime/sp-externalities,名称相同,sp-io和sp-externalities。它们使得在SGX中执行的运行时成为可能。

SGX功能栈

如果板包含需要存储在SGX节点中的隐私数据,我们应该将其放入SGX运行时中。例如,Litentry的第一个板帐户链接器,用户可以通过link-eth和link-btc外部链接他们的以太坊或比特币地址。如果我们将帐户链接器放入平行链中,可能会暴露所有这些隐私数据。

因此,我们现在将帐户链接器板放入SGX运行时中,代码没有改变。然后,所有外部参数和链接地址将在parachain中加密,只有SGX节点知道私钥,在SGX中解密数据,并将调用分派到SGX运行时。

将来,我们将把更多的板从平行链迁移到侧链。

Worker客户端

客户端通过RPC/WSS连接与平行链和侧链进行交互。根据目的,我们有不同的调用类型。

  1. 不可信调用:客户端与平行链节点交互,类似于JS客户端。客户端包括一些默认的功能栈,如Teerex,我们可以使用不可信调用来发送交易或某些查询。例如,用户可以通过客户端调用余额转移,这是一个不可信调用。

  2. 可信调用:客户端与工作服务器交互,该服务器是平行链节点的对应物。服务器还提供RPC服务。例如,用户可以调用link_eth,这是SGX帐户链接器功能栈的一个外部特征,它是SGX运行时的一部分。或查询SGX中的加密数据。

  3. 直接调用:客户端可以调用SGX运行时定义的外部特征。与可信调用的相同用例。

  4. 间接调用:客户端包装SGX运行时调用,然后将其发送到平行链中的Teerex功能栈。工作节点从平行链同步块,然后识别特定的call_work外部特征,从参数解析调用并将其分派到SGX运行时。详细信息可以在Litentry解决方案部分的图表中找到。

Worker服务器

服务器是整个解决方案中最复杂的部分,主要功能如下:

  1. 从Intel验证服务获取验证报告并将其注册到平行链

  2. 为受信节点中的SGX运行时提供执行环境

  3. 从平行链同步块,解密和解析call_work中的数据 4.4.生成侧链的块,在节点之间同步和共识

  4. 提供RPC和WSS服务 6.6.通过外部特征将响应发送到平行链

由于软件运行的角度,服务器在受信任和不受信任的部分之间有一个边界。受信任的代码在SGX中执行。不受信任的代码包括启动进程,RPC服务器,初始化保护等等。

从侧链设计开始就支持分片(Sharding)。服务器节点加入一个分片,每个调用(直接和间接)都有一个默认的分片标识参数。服务器节点只执行与其加入的相同分片的调用。分片的好处如下:

  • 不同分片的状态是隔离的,不同分片节点不能看到彼此的私有数据

  • 分片节点可以跳过来自另一个分片的调用,这样可以节省资源,使块中的外部执行更快

  • 分片使我们的解决方案可以在大规模使用,同时保护数据。

Last updated