EVM:

01 智能合约设计层面

  • 缺乏标准库支持:EVM缺少完善的标准库支持,甚至最基本的string类型支持,在EVM中都很鸡肋,例如字符串拼接、切割、查找等等都需要开发者自己实现。带来的后果就是开发者需要关注更多非本身业务的零碎细节,不能专注本身业务开发。同时自行实现的类库可能会因为时间、空间复杂度太高,消耗大量无谓的gas,又或者开发者从开源项目中借鉴相关类库代码,但也会引入更多安全性方面的问题,加重合约代码审计的复杂度,亦是得不偿失。

  • 难以调试和测试:EVM难以调试和测试,EVM除了能抛出OutOfGas异常之外,不会给开发者返回任何信息,无法打印日志、要做到断点、单步调试更是完全不可能。虽然event机制可以部分改善这个问题,但event机制的本身设计就决定了他不是一个优雅好用的调试工具。

  • 不支持浮点数:EVM不支持浮点数,以太坊以Wei为最小单位,只有整数,不支持其他粒度的计量,这种设计避免了引入浮点数导致的精度问题,但开发者在实际开发中,为了表示一个eth变量,就会在变量后面跟很多0,导致代码维护极度复杂。同时不可否认,浮点数在特定的场景下,还是有很大的利用价值的,不能一刀切直接放弃引入。

  • 合约不能升级:EVM不支持合约升级,合约升级是智能合约开发中的一个强需求,也是每一个合约开发者必须要考虑的问题,合约升级可以实现给现有合约打安全补丁、扩展现有合约功能等等。EVM完全不支持升级,开发者只能通过发布新合约来解决这个问题,费时费力。

EOS VM:

EOS是继以太坊之后,又一现象级的公链应用,有自己独立的一套基于WebAssembly的智能合约引擎,但目前EOS合约开发有如下几个明显问题:

  • 账户系统不友好:创建账户操作难度大,创建账户后才能发布合约,EOS需要使用已有账户去创建新账户,寻找一个拥有EOS账户的朋友或第三方,对任何人来说都不是一件很容易的事。创建账号需要购买RAM,就是需要花钱建账号,如果找第三方帮忙创建账号存在资金风险。创建账号后,还需要抵押EOS换取CPU使用时间和net带宽,才能在EOS网络做操作。这些操作对于开发者来说过于繁琐。

  • RAM价格:RAM价格昂贵,合约运行必须用到RAM,EOS开通了RAM市场,用于交易内存,虽然说RAM可以买卖,但依然存在很多人炒作,导致RAM价格昂贵。

  • 开发难度大:使用C++作为合约开发语言,极大的提高了合约开发门槛,C++本身就极为复杂,在其上还要去调用EOS.IO C++ API完成智能合约开发,对开发者的个人能力要求极高。

以太坊虚拟机EVM 和EOS 虚拟机的劣势!的更多相关文章

  1. 以太坊智能合约[ERC20]发币记录

    以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...

  2. 以太坊智能合约虚拟机(EVM)原理与实现

    以太坊 EVM原理与实现 以太坊底层通过EVM模块支持合约的执行与调用,调用时根据合约地址获取到代码,生成环境后载入到EVM中运行.通常智能合约的开发流程是用solidlity编写逻辑代码,再通过编译 ...

  3. 以太坊虚拟机(EVM)

    转载链接:https://ethfans.org/posts/solidity-chapter1-introduciton-to-smart-contracts 概括总览: 以太坊虚拟机(EVM)是以 ...

  4. 谈一谈以太坊虚拟机EVM的缺陷与不足

    首先,EVM的设计初衷是什么?它为什么被设计成目前我们看的样子呢?根据以太坊官方提供的设计原理说明,EVM的设计目标主要针对以下方面: 简单性(Simplicity) 确定性(Determinism) ...

  5. 【以太坊剖析】以太坊虚拟机(EVM)之基本定义

    以太坊虚拟机(EVM) 以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是一个基于栈的虚拟机,基于特定的环境数据,执行一系列的字节代码形式的指令,以修改系统状态.EVM目前 ...

  6. [以太坊源代码分析] I.区块和交易,合约和虚拟机

    最近在看以太坊(Ethereum)的源代码, 初初看出点眉目. 区块链是近年热点之一,面向大众读者介绍概念的文章无数,有兴趣的朋友可自行搜索.我会从源代码实现入手,较系统的介绍一下以太坊的系统设计和协 ...

  7. 区块链入门到实战(23)之以太坊(Ethereum) – 虚拟机架构

    以太坊(Ethereum)网络中,定义了一组通用协议用于支持智能合约的运行,其核心便是以太坊(Ethereum)虚拟机. 下图解释了该架构: 开发人员使用Solidity等开发语言开发智能合约 源程序 ...

  8. 区块链入门到实战(20)之以太坊(Ethereum) – 虚拟机(E.V.M.)

    作用:执行智能合约代码的引擎 以太坊(Ethereum)虚拟机是执行智能合约代码的引擎. 可以用某种语言,例如Solidity语言,开发智能合约程序,编译成以太坊(Ethereum)虚拟机支持的字节码 ...

  9. 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式

    在本系列的上一篇文章中我们看到了Solidity是如何在EVM存储器中表示复杂数据结构的.但是如果无法交互,数据就是没有意义的.智能合约就是数据和外界的中间体. 在这篇文章中我们将会看到Solidit ...

随机推荐

  1. vs2012 函数参数内存对齐引发编译错误

    编译一个游戏库时,遇到个奇怪的问题.一个模板函数,形参是按值传入的.编译时实参是内存对齐过的,无法通过,引发类似下面的错误: error C2719: '_Val': formal parameter ...

  2. 秒懂,Java 注解 (Annotation)你可以这样学 - CSDN博客

    https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片. 这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我个人比较 ...

  3. Beautiful Soup库基础用法(爬虫)

    初识Beautiful Soup 官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/# 中文文档:https://www.crumm ...

  4. Linux(CentOS 7.0)安装Oracle11g R2

    // 注释 # root用户 $oracle用户 1. 关闭安全措施    # chkconfig iptables off // 永久关闭防火墙 # serviceiptables stop // ...

  5. springboot+mockito 异常解决方案

    系统启动的异常日志如下 javax.net.ssl.* java.lang.IllegalStateException: Failed to load ApplicationContext at or ...

  6. PAT 甲级 1083 List Grades (25 分)

    1083 List Grades (25 分) Given a list of N student records with name, ID and grade. You are supposed ...

  7. percona-toolki安装冲突(my.cnf Percona-Server-shared与mysql-community-server)

    最近在安装percona-toolkit工具包时,提示在my.cnf文件中, Percona-Server-shared与mysql-community-server冲突.起初还以为是一定需安装Per ...

  8. python http请求及多线程应用

    目录 概述 tomorrow包准备 运行环境遇到的问题 其他尝试未果 概述 今天, 使用python3 模拟下发包, http get 请求, 然后 采用tomorrow 多线程. 代码如下: # c ...

  9. jdbc链接数据库的url两种写法

    首先看下面两个jdbc的url 一:jdbc.url=jdbc:oracle:thin:@100.2.194.200:1521/abc二:jdbc.url=jdbc:oracle:thin:@100. ...

  10. java为什么不能根据返回值重载?

    我以前对Java中为什么不能根据返回值进行重载,而只能根据方法的参数进行重载非常不理解.比如void f(){}和int f(){},虽然他们有同样的名字,但是很容易区分.如果我这样做,肯定是没问题的 ...