官方只支持用C++写智能合约

用C++写智能合约门槛过高,会把许多开发者挡在门外,C++的复杂性也会让智能合约的设计变得困难。

Wasm智能合约的效率并不是最优

由于C++最终也是编译成wasm字节码并在虚拟机中运行,效率并不能达到和编译成native code一样高。Wasm可以在三种模式下运行:binaryen, wavm和wabt。其中,binaryen的运行模式是字节码的方式,运行速度最慢。wavm模式是JIT运行方式,速度最快,但是由于需要预编译,加载速度实在是太慢了,并不能为Eos的主链所用。wabt是最近才支持的运行模式,是基于栈的虚拟机,运行效率会比binaryen运行效率高三倍,算是有了比较大的优化,但是执行的效率和编译成native code后运行仍然还是有一定的差距的。

C++代码编译后的字节码过大

C++智能合约最终会被编译成Wasm字节码。由于编译的时候会把所有用到的库函数的代码都编译进去,造成C++智能合约编译后的wasm字节码过大。以很简单的eosio.token智能合约为例,编译后的代码也在20K左右。智能合约之间其实包含了大量的重复的代码,这在一定程度上会造成链上存储空间的浪费,并且也会增加开发的费用。

不支持直接调用其它智能合约的代码

目前,Eos可以通过以下三个函数和其它智能合约进行交互。

void send_inline(char *serialized_action, size_t size); void send_context_free_inline(char *serialized_action, size_t size); void send_deferred(const uint128_t& sender_id, account_name payer, const char *serialized_transaction, size_t size, uint32_t replace_existing = 0); 

但是这三个函数的都是异步的,调用者返回之后才会得到执行,这有时会增加智能合约编程的复杂度。那么,为什么Eos不支持直接调用一个智能合约的代码呢?这和Wasm的设计是有关系的。目前,Wasm的虚拟机并不支持直接运行多个实例,也就是说Eos的Wasm智能合约无法做到直接从一个智能合约去调用另一个智能合约的代码。这也是今后Eos的团队必须解决的一个问题。

转载于:https://www.cnblogs.com/405845829qq/p/10335213.html

Eos的Wasm智能合约的局限性相关推荐

  1. EOS系列 - WASM智能合约 - 特性

    构造函数 addressbook(name receiver, name code, datastream<const char*> ds):contract(receiver, code ...

  2. 调用wasm_PDX Utopia区块链协议栈使用Solidity调用wasm智能合约

    在这个瞬息万变的世界中,智能合约已成为所有平台中强有力的服务.Solidity是一种趋势,PDX Utopia区块链协议栈使用Solidity调用wasm智能合约. ▼ 什么是Solidity? So ...

  3. EOS开发HelloWorld智能合约

    我们将介绍一个使用EOS智能合约构建hello World的例子. 一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例. 运行nodeos ...

  4. [EOS源码分析]5.EOS编写HelloWorld智能合约及各种坑

    本文所有实践都是基于EOS dawn-v4.1.0,请切到该分支然后实践 切换命令:git checkout dawn-v4.1.0 HelloWorld源码 #include <eosioli ...

  5. EOS区块链 智能合约 教程1(发布合约)

    EOS 智能合约 启动EOS单节点区块链 教程地址:https://github.com/EOSIO/eos/wiki/Local-Environment#2-building-eosio 命令: c ...

  6. EOS之记事本智能合约

    EOS记事本智能合约 本次分享的内容是一个记事本合约,调用合约中的写入动作可以将文本和作者保存到数据库中,通过记事本合约来学习EOS智能合约数据存储当中的主键自增. 合约动作 写入动作 记事本合约必须 ...

  7. 【许晓笛】EOS 什么是智能合约(3)

    详解 EOS 智能合约的 abi 文件 这次向大家介绍 eosio.token 智能合约的最后一个文件 -- abi文件.ABI 全称 Application Binary Interface,中文名 ...

  8. eos 连接mysql_EOS智能合约中数据库的使用与常见问题

    阅读本文前,您需要熟悉eos节点的操作流程,熟悉cleos客户端基础指令,并且对自定义合约的开发有着一定的了解. 操作系统:MAC OS 10.13.x,EOSIO版本号:1.1.3 背景 在EOS自 ...

  9. EOS 智能合约源代码解读 (11)wrap合约“action_wrapper类”

    1. 功能 对于许多用例,需要从合同代码向另一个合同发送新操作.这是合同之间能够积极沟通的唯一途径.它为特定智能合约代码的特定操作创建"操作模板",然后可使用该模板来调用此操作. ...

最新文章

  1. ASP.NET学习路线图
  2. mysql查询死锁的次数_一次神奇的MySQL死锁排查记录
  3. 商业软件授权模式的反思--转载
  4. 解决windows系统80端口被占用问题
  5. win7设置默认浏览器
  6. ListView一些特殊属性
  7. bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
  8. t_user is not mapped [from t_user as u where u.loginname = :loginname and u.password =:password]
  9. python_文件处理模式
  10. 【xpghost】揭晓Windows 7快捷键的秘密
  11. 常用的Mysql数据库操作语句大全
  12. emoji android to iphone,Emoji Android to iphone
  13. Linux服务器密码过期了怎么办?Linux服务器如何设置密码永不过期?
  14. “诱饵效应”让用户产生“冲突”营销心理学十大效应 营销值得学
  15. 开发 mirai QQ机器人起步教程
  16. Shell发送邮件+附件
  17. matlab控制流上机报告,MATLAB实验指导书(2013)要点
  18. 第九章 python 字典(Dict)
  19. 英特尔移动CPU命名及列表
  20. 2019年回头看,英特尔要如何突破存储瓶颈?

热门文章

  1. 40岁了,突然公司黄了,怎么办?
  2. 农村新农保加钱可不可以转城市社保?
  3. 如何快速解决腿抽筋?
  4. 如何给一家公司做定性研究?
  5. Java 中 notify 和 notifyAll 有什么区别?
  6. Solidity API
  7. Linux磁盘、内存、CPU、进程
  8. [leetcode] 24. Swap Nodes in Pairs
  9. tsql_TSQL的历史
  10. power bi 实时_Power BI中的实时流