草庐IT

【学习笔记】智能合约引擎

苹果二 2023-08-22 原文

图片来源:https://www.researchgate.net/publication/336453428_Detecting_nondeterministic_payment_bugs_in_Ethereum_smart_contracts/figures?lo=1

智能合约是区块链技术的核心。我们可以根据以下公式定义智能合约

智能合约=事务处理和保存机制+完备的状态机

智能合约的事务主要包含需要发送的数据,事件是描述数据的信息;智能合约的运行需要可信任的执行环境和系统。虚拟机或者Docker为智能合约提供计算资源和运行容器。

今天为大家总结智能合约引擎的一些内容,包括功能结构,设计原则,比较不同引擎。

智能合约引擎的功能和结构

以HyperVM为例,展示合约引擎的功能和结构。

图片来源:https://www.bookstack.cn/read/hyperchain-zh/spilt.2.dca19f788f66da79.md

https://static.sitestack.cn/projects/hyperchain-zh/a586bf079d6c515aa9fb7259333fc125.png

如上图所示,HyperVM的架构图包括智能合约编译、解释、执行、智能合约操作区块链账本和安全保障等相关主要组件。

设计智能合约引擎的原则

智能合约引擎包括完备的业务功能、可确定性、可终止性、完备的升级方案。通常可以通过安全沙盒模式和计步器机制实现确定性和可中止性。

设计虚拟机的原则

1. 图灵完备性
智能合约需要遵循一定的业务规则,如果没有图灵完备性,那么业务将无法实现。
2. 执行结果一致性
智能合约存储在每个节点的区块中,合约也在每个节点上执行,所以需要保证每个节点在同样的输入条件下,得到同样的输出结果。
3. 数据交互性
智能合约需要与区块链数据进行交互。虚拟机需要满足智能合约和区块链的数据交互性或者与其他合约的交互性。
4. 执行可终止
在智能合约执行后,当遇到异常情况时要能及时终止,不能因为用户的合约有问题而导致引擎甚至整个系统崩溃。例如,用户写了一个带有无限循环的语句,虚拟机需要能检测并终止这种异常代码的执行。

来源:https://mp.weixin.qq.com/s/0vQJxlfppPEbLOcRVY_bPQ

比较智能合约引擎

HyperVM和EVM

名称

语言

合约引擎

合约安全性

开发环境

支持功能

大数据量支持

趣链

Java

HyperVM

Gas限制,禁用JVM底层系统库和随机值

Java IDE即可,Javac编译

提供内置功能,包括日志输出、密码工具、调用方法形式化

理论上可支持数据库的上限

布比

C/C++、JavaScript、Python、Go

ChainVM

集成JavaScriptVM和WASMVM多种引擎

安全性校验,明确接口权限,增加合约间的交互操作

友好,并且包括合约模板

NA

NA

以太坊

Solidity

EVM

Gas限制,支持操作受限

remix IDE

部分内置功能,使用跨合约形式调用

拆分数据,数据量大了以后会降低查询效率

ChainVM

架构如下图。

ChainVM架构

ChainVM智能合约的执行过程

图片来源:布比区块链技术开发团队. 商用区块链技术与实践 (Chinese Edition) (Kindle Location 1667). Kindle Edition.

长安链ChainMaker容器虚拟机——DockerVM

Docker这种成熟的容器技术,其轻量、基于开放标准并且安全。使用Docker实现容器类虚拟机具备以下特点。

  • 隔离性:隔离了DockerVM与主机,隔离了合约。

  • 确定性:依赖于合约进程的网络隔离,文件隔离,进程间隔离。

  • 可终止性:采用交易超时方法。

DockerVM架构

图片来源:https://mp.weixin.qq.com/s/B50qvWh-PX5gvwt_P5UbRw

Ethereum vs Fabric vs Corda vs Stellar vs Rootstock

图片来源:https://s3.cointelegraph.com/storage/uploads/view/26706bda3a485793ef0f965d28a77147.png 文章:A deep dive into the 5 popular smart contract development platforms and their comparison

还可以参考

Top 10 Smart Contract Platforms in 2022 [Other Than Ethereum]

https://blog.rapidinnovation.io/top-10-smart-contract-platforms-2022/

此外,还有以下两种

FVM:支持 Rust 等语言,具备安全、多样、高效的特点。

KVSQL:支持在区块链上执行 SQL 语句。

参考资料

Comparing Virtual Machines: Message Only vs Asset-Oriented

https://www.radixdlt.com/post/comparing-virtual-machines-message-only-vs-asset-oriented

Top 4 Blockchain Virtual Machines for Decentralized Applications

https://hackernoon.com/top-4-blockchain-virtual-machines-for-decentralized-applications

【虚拟机专栏】智能合约执行引擎的前世今生

https://xie.infoq.cn/article/9be94d9f7458be48fd707cd82

HyperChain文档

https://hyperchain.readthedocs.io/en/latest/smart_contract.html

长安链ChainMaker容器虚拟机——DockerVM

https://mp.weixin.qq.com/s/B50qvWh-PX5gvwt_P5UbRw

VM Matters: A Comparison of WASM VMs and EVMs in the Performance of Blockchain Smart Contracts

https://arxiv.org/abs/2012.01032

了解区块链虚拟机:EVM、HVM、WASM、MOVE

https://mp.weixin.qq.com/s/B6C83YUK45kHM0FQ-iA99g

欢迎留言,一起讨论设计智能合约引擎。

有关【学习笔记】智能合约引擎的更多相关文章

  1. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  2. ruby-on-rails - Rails 中的推荐引擎 - 2

    我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  5. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  6. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  7. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  8. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  9. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐