雷竞技注册
行业的文章

RISC-V指令集CKB-VM的介绍及其需求

2019年3月5日通过Xuejie肖,紧张

NERVOS CKB-Virtual Machine(CKB-VM)是基于RISC-V指令集的VM,用于在RERIC中编写的NURTOS CKB上执行智能合同。

在本文中,系列中的第1部分,我们介绍了基于RISC-V指令集的VM,用于执行智能合同并用Rust编写的RISC-V指令集。

我们考虑了CKB-VM在为我们的第一层区块链Nervos CKB选择虚拟机(VM)时需要的特性。

如果虚拟机在区块链上运行,必须满足两个条件:

  1. 确定性:对于固定程序和输入,VM必须始终返回相同的输出结果。结果不得依赖于外部条件,例如时间或运行环境。
  2. 安全:保证虚拟机不影响所在主机的正常运行。

神经徽标

图片由神经

上面我们列出了强制性条件,尽管我们已经考虑了一个最能为CKB的目标提供的VM的设计。在我们的研究之后,我们提出以下功能:

灵活性

我们的目标是设计一个足够的VM灵活性以运行多年或数十年,允许CKB与加密领域一起发展。目前的加密原语,如SECP256K1可能不再使用,并且有价值的新基元和技术(例如Schnorr或Postumum Sigeatures)将继续出现。应提供给在不再使用的VM和原语上运行的程序提供新的创新,应该能够被忽视。

为了证明我们的要求,我们可以检查比特币。目前,比特币利用Sighash进行交易签名,达成共识利用SHA-256哈希算法。我们可以确定,在几年后,Sighash将是最好的,或者SHA-256将适合作为稳定的哈希算法,因为计算能力随着时间的推移而增加?目前,需要一个硬盘,以在我们检查的所有区块链协议中实施新的加密原语。

在设计CKB时,我们探讨了通过VM层设计减少这种硬叉要求的可能性。

我们要问的问题是,我们是否可以允许更新加密算法或向VM添加新的事务验证逻辑?在secp256k1仍然被使用的情况下,如果受到经济激励的驱动,签名验证的实现是否会变得更有效率?如果有人找到了更好的方法来实现CKB上使用的算法,或者只是需要一个新的密码原语,我们能让他/她自由地这样做吗?

我们希望CKB的VM层将提供最大的灵活性和广泛的实施支持,以便探索这些类型的问题。通过CKB-VM的设计,用户不需要等待实施硬叉,以利用新的加密创新。

运行时的可见性

在对现有区块链的VM进行研究之后,我们观察到了一个问题。我们将再次示出比特币作为示例:VM比特币层只提供一个堆栈(并且该VM不知道可以存储在堆栈或堆栈深度上的数据量。堆栈模式下实现的VM也表现出此问题。

虽然共识层可以提供堆栈深度定义或间接提供堆栈深度(基于代码长度或气体限制),但是在VM上运行的程序无法获得堆栈深度。由于VM上运行的程序的开发人员必须猜测程序运行状态,因此在VM上运行的程序无法使用VM的所有潜在功能。

基于这一思路,我们考虑了优先定义VM运行时所有资源的限制,包括gas限制和堆栈空间大小,并提供运行在VM上的程序查询资源使用情况的能力。这将允许运行在VM上的程序根据资源可用性利用不同的算法。通过这种设计,程序可以充分利用VM的潜力。

通过这种结构,我们在以下方案中显示了更大的VM灵活性:

a)存储数据的契约可以根据单元容量选择不同的策略。当cell容量足够时,程序可以直接存储数据以减少使用的CPU周期数,或者当cell容量受限时,程序可以压缩数据以适应更小的容量,只需利用更多的CPU周期。

b)可以根据细胞数据量和剩余存储器的大小来选择不同的处理机制。当存在少量的单元数据或大量剩余存储器时,可以将所有单元数据读取到存储器以进行处理。当存在大量的小区数据或剩余存储器时,可以读取一部分存储器,每个操作可以读取,操作类似于交换存储器。

c)对于一些常用的契约,例如散列算法,可以根据用户提供的CPU周期数选择不同的处理方法。例如,SHA3-256已经足够安全,可以满足大多数需求,但是一个合约可能会使用SHA3-512算法,通过使用更多的CPU周期来满足不同的安全需求。

运行时开销

Ethereum虚拟机(EVM)中的气体机制是辉煌的设计。它解决了块链条VM的上下文中的暂停问题,并允许在完全分散的虚拟机上完成完整的计算。然而,我们观察到,对于不同EVM操作码,难以设计适当的气体计算方法。

我们已经发现EVM几乎在每个版本更新中调整了气体计算机制。我们想知道:我们可以通过VM Design确保更有效的开销计算吗?

我们已经考虑了一个VM的设计,它可以提供所有这些功能,并发现没有一个现有的解决方案可以实现我们的CKB的愿景。

建议的解决方案:利用RISC-V

RISC- v是由美国加州大学伯克利分校的教授于2010年设计的开源RISC指令集架构(ISA)。RISC-V的目标是提供一个通用的CPU ISA,使下一代系统体系结构的开发能够持续几十年,而无需承受遗留体系结构问题的负担。

RISC-V标志

RISC-V标志。图片由RISC-V基金会

RISC-V可以满足在所有场景中的高功耗数据中心(DC)处理器的小型微处理器的实施要求。与其他CPU指令集相比,RISC-V指令集具有以下优点:

开放

RISC-V的核心设计和实施都是根据BSD许可提供的。所有公司和代理商都可以使用RISC-V指令集,并在不受限制的情况下创建新的硬件/软件。

简单

作为RISC指令集,RISC-V的32位整数核心指令集只有41个指令。为64位整数添加支持,指令集只有大约50条指令。与此相比,X86指令集可能具有数千条指令,risc-v指令集易于实现并防止错误提供相同的功能。

模块化机制

通过简化的核心,RISC-V还提供了一种模块化机制,以提供更多扩展指令集。例如,CKB可能会选择实现RISC-V核中定义的V扩展,以支持向量计算或为256位整数计算添加扩展指令集,从而提供高性能加密算法的可能性。

广泛的支持

RISC-V指令集由GCC和LLVM等编译器支持。正在开发基于RISC-V的Rust和Go语言实现。CKB的VM实现将使用广泛实现的ELF格式,可以使用任何可以编译为RISC-V指令的语言开发CKB VM合同。

到期

RISC-V核心指令集已完成并冻结,所有RISC-V实现将来需要向后兼容。这会删除VM指令更新产生的CKB硬叉的可能性。此外,RISC-V指令集具有硬件实现,并已在现实世界应用方案中验证。RISC-V没有可能存在于其他较低支持的指令集中的潜在风险。

尽管其他指令集可能具有上面列出的一些品质,但根据我们的评估,RISC-V指令集是唯一提供所有这些品质的指令集。基于此,我们选择用RISC-V指令集实现CKB VM,并利用ELF格式实现智能合约,以确保广泛的语言支持。

此外,我们将为CKB VM添加动态链接,以确保单元共享。尽管官方CKB实现将提供流行的密码原语,我们鼓励社区提供更优化的密码算法实现,以减少运行时开销(CPU周期)。

开发者激励措施来改善CKB上的加密原语是有趣的,并且在CKB团队之间经常讨论。我们希望随着加密和社区的演变,CKB VM将发展和改进,而无需硬叉升级协议。

行业文章是一种内容的形式,允许行业合作伙伴分享有用的新闻,消息和技术,所有关于电路读者的行为编辑内容并不适合。雷竞技注册所有行业文章都受到严格的编辑准则,目的是提供读者有用的新闻,技术专业知识或故事。在行业文章中表达的观点和意见是合作伙伴的观点,不一定是关于电路或其作家的所有人。雷竞技注册