Enclave-EVM 源码分析

1、Enclave
Enclave EVM(eEVM)是以太坊虚拟机的开源,独立,可嵌入的C实现。 它最初构建为在Open Enclave SDK之上的TEE(即SGX enclave)内运行,使用Microsoft的机密联盟区块链框架。
1.1 机密计算是一项持续的工作,旨在保护数据在其休息,运输和使用中的整个生命周期。 通过使用信任执行环境,客户可以构建应用程序,以便在使用时保护数据免受外部访问。 Open Enclave SDK是一个开源SDK,旨在为开发人员创建单一的统一enclave抽象,以构建基于可信执行环境(TEE)的应用程序。 随着TEE技术的成熟和不同的实现,Open Enclave SDK致力于支持API集,允许开发人员构建一次并部署在多个技术平台,从云到混合到边缘,以及Linux和Windows的不同环境。
1.2 安全区应用程序将自身划分为两个组件(1)不可信组件(称为主机)和(2)可信组件(称为安全区)。 主机组件在不受信任的操作系统上未经修改地运行,而受信任组件在安全区内运行,即由TEE实现提供的受保护容器。 这些保护允许enclave执行安全计算,并保证不会泄露机密。
1.3 核心原则
普遍:概括飞地应用程序模型以最小化硬件/软件特定概念
可插拔:组件化以支持所需的运行环境和加密库
标准化:删除硬件供应商特定的签名和验证要求
多平台:考虑到所有软件平台,Windows和Linux的设计
兼容:更轻松地启用可再发行的应用程序
打开:基于安全飞地的应用程序开发的开源和标准
1.4 支持的SDK功能
✔Enclave的创建和管理:函数调用来管理应用程序中enclave的生命周期
✔Enclave测量和身份:Enclave测量和身份的表达
✔Communication:定义调用和被调用以及与之相关的数据编组的机制
✔系统原语:由安全区运行时公开的系统原语,例如线程和内存管理
✔Sealing:支持秘密持久性的功能
✔Attestation:支持身份验证的功能
✔运行时和加密库:可插拔库,在enclave内提供必要的语言和加密支持
2、Microsoft的机密联盟区块链框架
在过去几年中,企业已经意识到区块链(比特币和以太坊等公共网络的技术)可以用来简化自己的业务流程。 然而,他们还发现大多数现有的区块链协议无法满足几个关键的企业要求 - 包括可接受的交易吞吐量和延迟,机密性,有效治理和计算效率(即采矿/工作证明的能源成本)。 努力适应现有的公共区块链协议或创建新协议以满足这些需求通常将一个所需的企业属性换成另一个 - 例如以更高的复杂性或更低的性能为代价来改善机密性。
Confidential Consortium Blockchain Framework是一个开源系统,可实现满足所有关键企业要求的高规模,机密区块链网络 - 提供加速生产企业采用区块链技术的手段。我们通过在机密联盟的背景下重新评估公共区块链协议的现有假设来实现这一目标,其中节点和参与者(包括投票成员和其他非投票参与者)被明确声明和控制。基于这一新的要求,该框架将现有区块链协议,可信执行环境,分布式系统和加密技术的强大功能汇集在一起
企业就绪的区块链网络,提供:
•吞吐量和延迟接近数据库速度。
•更丰富,更灵活,针对特定业务的机密性模型。
•通过分布式治理实现网络策略管理
•支持非确定性交易。
•降低能耗。
值得注意的是,该框架不是一个独立的区块链协议;相反,它提供了一个可信赖的基础,通过它可以集成现有的区块链协议,如以太坊,Quorum,Corda或Hyperledger Sawtooth,以提供完整的企业级分类帐解决方案。
Confidential Consortium Blockchain Framework旨在开放并与任何区块链协议兼容。
本文重新审视了机密联盟背景下区块链网络的要求。然后介绍了Confidential Consortium Blockchain Framework,包括网络拓扑和系统体系结构,网络创建和治理,事务流和体系结构变体。它还研究了如何实现可伸缩性、机密性和分布式治理,以及安全考虑因素以及如何减轻安全风险。最后,讨论了框架的当前工作实现,包括初始性能结果。
3、eEVm
主要入口点是evm :: Processor :: run()。需要为evm :: Processor提供evm :: GlobalState的实现来处理与永久状态的所有交互。源包括evm :: SimpleGlobalState作为std :: map支持的示例,但其他实例可能需要一个提供永久存储的实现 - 可能是从以太坊区块链读/写数据的包装器。eEVM支持所有来自Ethereum的Homestead版本的操作码,如opcode.h中所列。不包括更新的操作码,例如来自EIP#211的RETURNDATACOPY或RETURNDATASIZE。该实施忽略了所有的gas成本 - 在执行过程中不会消耗、跟踪或更新天然气,执行将永远不会引发gas异常。但是,如果字节码计算或验证气体预算本身,可能仍需要将合理的初始gas值传递给evm :: Processor :: run()。
3.1 evm::Processor::run()
ExecResult Processor::run(
Transaction& tx,
const Address& caller,
AccountState callee,
const vector<uint8_t>& input,
uint64_t call_value,
Trace* tr)
{
return _Processor(gs, tx, tr).run(caller, callee, input, call_value);
}
3.2 Transaction 类
struct Transaction
{

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值