热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

科普丨虚拟机之战:WASM与EVM

1什么是以太坊虚拟机(EVM)?以太坊虚拟机是一种轻量级虚拟机,用于在以太坊网络上运行各种智能合约。EVM的功能不同于Windows等传统操作系统&#x

ce1034336b05dbe6b7d18d514336492f.gif

a290905554fac9191e51b665c6a95be4.png

1

什么是以太坊虚拟机(EVM)?

以太坊虚拟机是一种轻量级虚拟机,用于在以太坊网络上运行各种智能合约。EVM的功能不同于Windows等传统操作系统,后者一次只能在一台机器上运行。EVM 是构建在本机操作系统上的高级抽象,用于模拟物理机。


通过使用EVM,相同的平台可以在许多不同的操作系统和硬件架构上运行。该特性使虚拟机适合以太坊等网络,可以通过分布在世界各地的不同机器上的不同客户端访问这些网络。EVM可以模拟在物理CPU上执行的功能,并负责以太坊网络上的大部分功能。


EVM具有以下特点:

确定性

确定性程序对相同的输入集提供相同的输出,而与它执行相同代码的次数无关。在以太坊中,dApp每次处理数百万美元,各种用户需要知道代码在执行的每个阶段是如何反应的。

可隔离

智能合约需要在完全隔离的环境中运行。这确保了如果智能合约发生黑客或bug,它不会影响底层协议的其他部分。

可终止

以太坊智能合约是图灵完备的。因此,只要有足够的时间和资源,他们就应该能够解决任何问题。智能合约应该有终止机制,因为很难确定合约是否会在规定的期限内完成所有操作。以太坊使用“gas”限制来终止超出执行限制的智能合约。

EVM 的功能

  • 它是以太坊网络的去中心化处理单元。每个交互、交易和智能合约执行都只能在这里发生。

  • 获取并执行指令,然后通过给定的指令分派器解码操作数。

  • 负责所有的数据结构,如操作数,数据处理和指令。

  • 跟踪网络组件,如存储状态、区块信息和世界状态。

  • 负责为以太坊网络上的不同智能合约创建运行时环境。

EVM 的挑战

  • EVM处理如此多不同的操作并不快,但是它的操作码规范还没有发展到可以处理变化的需求。

  • 未能进化意味着语言也有局限性。

什么是WebAssembly (WASM)?

WebAssembly (WASM)是一种新型代码,可以在现代浏览器上高效地执行。这个新代码是由万维网联盟(W3C)创建和定义的。WASM是为网络而建的,包括来自谷歌、Mozilla和苹果的工程师。本质上,WASM通常被称为Ethereum 2.0,它具有EVM的所有功能,并附带了额外的功能。

专为网络打造

如前所述,来自谷歌、微软和苹果等大型技术公司的工程师都是开发团队的一部分。因此,这些工程师要确保WASM与他们的引擎和协议兼容。

设计时考虑了一组特定的目标

创建WASM是为了快速、高效和便携。WASM将利用常见的硬件能力,以“接近本地速度”执行。

  • 易于阅读和调试。它具有人类可读的文本格式,代码可以手动查看、编写和调试。

  • 确保安全。它通过增强主机浏览器的权限策略和保持向后兼容性来实现这一点。

2

EVM 与 WASM

速度

简单地说,EVM是一个万事通,但却什么都不懂。EVM如何处理编译就是这一点的一个很好的例子。本机引擎努力寻找执行某些操作的最佳路径,最终影响EVM的总体吞吐量。

EVM只能处理256位字节码,这意味着小于256位的字节码必须先转换为256位格式,然后才能发送给EVM。EVM的可扩展性问题很明显,因为它每秒只处理25个交易。

WASM直接转换为编译后的代码,这使它能够更快地加载,同时增加每个区块所处理的交易数量。

预编译

EVM依赖于预编译(预编译合约)。当发出预编译调用时,EVM将执行预定义的本机代码,然后显示结果。这些预编译特定于用于基本操作的特定协议,例如签名方案和哈希。

尽管预编译在不消耗大量gas的情况下使加密计算变得高效,但它们也带来了问题。引入新的预编译器通常要求网络经历一个系统范围的硬分叉。

WASM消除了以太坊对预编译合同的依赖。由于WASM非常高效,开发人员可以创建高效、快速的智能合约,而无需担心潜在的硬分叉。

灵活性和互操作性

WASM支持更多的语言,并且提供了比EVM更广泛的工具集。WASM支持传统语言,如Rust、C和c++。WASM也被本地Javascript引擎支持,例如 Google 的 V8 引擎(基于 Node.js 和 Chromium 的浏览器)、微软的 Chakra 引擎(Microsoft Edge)和 Mozilla 的 Spidermonkey 引擎(Thunderbird 和 Firefox)。

3

小结

以太坊引入了比特币区块链上不可用的某些功能。以太坊虚拟机的引入允许开发人员轻松地创建和部署智能合约。然而,EVM也有许多局限性,而WASM正试图解决这些局限性。根据WebAssembly.org, WebAssembly 1.0已经被提供给四个主要的浏览器引擎。


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
mobiledu2502859223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有