不同于以太坊的EVM,EOS有自己独立的一套基于WebAssembly的智能合约引擎。
要解决的问题: 无限制内存分配,加载时间延长和堆栈溢出 (比如无限递归或循环). 从而提升整体性能和可靠性
既提高了一条区块链上的单线程性能,也使得链间通信成为可能,它是实现区块链链间通信的第一步
特性:
传统.cpp代码要求使用者要么使用底层运行库兼容的预编译版本,要么重新编译,操作起来非常麻烦,而纯头文件代码则简单得多,直接#include就可以了
Runtimes | Descript | Configrable | Recommend |
---|---|---|---|
EOS VM解释器 - EOS VM Interpreter |
从头开始设计的WASM解释器,极快的解析/加载 也为了将来支持智能合约的调试 |
nodeos --wasm-runtime=eos-vm | non-producing nodes |
EOS VM即时编译器 - EOS VM Just In Time Compiler (JIT) |
a low latency single pass compiler for x86_64 platforms | nodeos --wasm-runtime=eos-vm-jit | BP |
EOS VM优化编译器 - EOS VM Optimized Compiler |
a high performance WASM tier-up runtime available on the x86_64 Linux platform 性能比JIT快一个数量级 |
nodeos --eos-vm-oc-enable --eos-vm-oc-compile-threads 在后台优化编译,保存到 data/code_cache.bin |
non-producing nodes |
任何EOS VM运行时都不需要重播或激活任何共识协议升级。可以随意在它们之间切换(包括启用和禁用EOS VM Optimized Compiler)
以上性能基准显示了各种EOS VM组件的相对优势。 EOSIO 2.0将EOS VM JIT作为大多数智能合约执行的一线编译器,而EOS VM Optimized Compiler尝试在后台编译相同的智能合约,并将其部署以在链上以极快的速度随后执行。这种分层架构使EOSIO 2.0能够利用快速启动和优化的智能合约代码编译功能
- binaryen的运行模式是字节码的方式,运行速度最慢
- wabt是基于栈的虚拟机,运行效率会比binaryen运行效率高
- wavm模式是JIT运行方式,速度快,但是由于需要预编译,加载速度实在是太慢了,并不能为Eos的主链所用
Block.One还声称通过向其添加多线程支持大大改善了区块链的网络代码。多线程是中央处理单元同时执行多个执行线程的能力。
net-threads
配置(默认为2)控制net_plugin线程池工作线程数WebAuthn
协议一种广泛接受的安全身份验证标准,无需进行浏览器扩展或附加软件即可进行交易签名(使用硬件签名设备,例如YubiKey
5)。
WebAuthn是最近由W3C(万维网联盟)最终确定的Web身份验证API标准,并在不同程度上得到Chrome,Firefox和Edge网络浏览器以及某些移动平台的支持。该标准使用诸如安全密钥(例如 YubiKey
)之类的身份验证器或内置平台身份验证器(例如生物特征识别码)启用无密码的主要和多因素用户身份验证流程。
EOS 2.0将成为首个采用WebAuthn协议的区块链网络。WebAuthn是由万维网联盟(W3C)发布的Web标准。 WebAuthn是FIDO联盟指导下的FIDO2项目的核心组成部分。该项目的目标是标准化接口,以使用公钥加密技术对用户进行基于Web的应用程序和服务的身份验证。在客户端可以通过多种方式实现对WebAuthn的支持。Block.one表示,采用WebAuthn协议,EOS应用的安全性和易用性将因此得到提升。
吸引新用户加入区块链应用程序的主要痛点之一就是保护私钥和公钥,如果操作不当,则会带来安全风险。通过此版本的对WebAuthn
的支持,开发人员可以开始在其EOSIO应用程序中使用WebAuthn测试事务签名。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrNTonOE-1580977741996)(https://github.com/EOSIO/eosio-webauthn-example-app/raw/master/screenshots/screenshot-i.png?raw=true%22)]
示例: EOSIO WebAuthn Example Web App
此示例应用程序演示了在私有链上运行的应用程序如何:
- 为用户生成与WebAuthn兼容的密钥
- 浏览器提示用户使用其安全密钥或内置平台身份验证器进行身份验证
- 用户使用这些密钥签名
预计将发布其他示例,试图概述Dapp开发者如何利用WebAuthn进行具有更高安全性的授权机制的 contract actions
WebAuthn公钥以新的前缀开头PUB_WA
, 包含3个字段:
三个级别的用户状态
WebAuthn签名以新的前缀开头SIG_WA。它们包含3个字段:
keosd钱包支持, 在分支webauthn_keosd_wallet
中,仍处实验阶段
Yubico Key
在EOS 2.0采用WebAuthn协议的基础上,block.one和于yubico合作发布硬件钱包EOS Yubico Key。EOS用户可以使用 EOS Yubico Key通过WebAuthn签署链上交易。其作用类似于知名的EOS浏览器插件钱包scatter。
WTMsig
当前的共识规则要求每个区块生产者仅需要一个加密区块签名密钥。该密钥,无论是存储在磁盘上并通过软件加载还是由硬件钱包保护,都代表了区块生产者操作的单点故障隐患。如果该密钥丢失或暂时无法访问包含该密钥的硬件模块,则区块生产者别无选择,只能丢掉区块,从而影响整个网络的吞吐量。
new_producers
字段block_header
必须为空,无论其来源如何。block_header_extension
将引入一个新的,用于根据新producer_authority
类型宣布新的生产者计划。set_proposed_producers_ex
将是有效且可链接的
producer_authority
WEBAUTHN_KEY
:增加了对WebAuthn密钥和签名的支持(#7421)
WEBAUTHN_KEY
协议功能的激活意味着eosio::newaccount或eosio::updateauth动作现在可以将WebAuthn公钥作为提供的一部分authorityWTMSIG_BLOCK_SIGNATURES
:增加了对块生产的加权阈值多重签名(WTMsig)授权的支持
eosio.contracts
的版本v1.9.0-rc1regproducer2向eosio.system合同中添加了一个新操作,使块生产者候选者可以注册WTMsig
块签名授权。(只能部署在已激活WTMSIG_BLOCK_SIGNATURES
协议)两个功能都需要通过特权preactivate_feature
内在函数进行激活, 需要获得绝大多数区块生产者的批准(eosio.msig)
这两个协议功能中任何一个的激活将立即排除不支持该协议功能的任何节点(例如,运行v2.0.x之前版本的nodeos的任何节点)
这个工具在云服务中运行,使新开发人员能够建立智能合约和Web应用程序开发环境以及完全集成的单节点个人测试网,因此他们可以在几分钟之内从入门到构建。
想解决新开发人员的入门障碍——那些首次前往eosio hackathon或首次在EOSIO上进行开发的开发人员。通常,设置区块链开发环境是一个多步骤的过程,可能需要数小时甚至数天才能完成。这就是为什么要构建EOSIO Quickstart Web IDE,这是一个开发工具,它使新开发人员可以在几分钟之内从入门到准备就绪。
https://github.com/EOSIO/eosio-web-ide
https://gitpod.io/#https://github.com/cucubao/eosio-web-ide
get_table_rows: 查询与展示uint128和int128类型数据时, 不再以小端字节序十六进制表示
在uint128和int128ABI类型现在表示为十进制数,而不是旧的小端十六进制表示。这意味着get_table_rowsRPC 返回的表行的JSON表示形式将使用与以前版本不同的形式来表示字段。这也意味着使用辅助索引搜索的RPC请求的lower_boundand upper_bound字段将需要使用新的十进制表示形式。此更改使的ABI序列化和ABI类型与eosjs和abieos一致。
在get_table_rows与二次索引类型使用时RPC喜欢sha256,i256和ripemd160有这样的加扰字节中的错误lower_bound和upper_bound输入字段。现在,此版本解决了这些问题,使客户端可以使用这些索引类型正确搜索表行。
参考
- https://github.com/EOSIO/eos/releases/v2.0.0
- https://www.8btc.com/article/545516?from=groupmessage&isappinstalled=0
- https://www.jianshu.com/p/34dbc3f0a4b8
- https://github.com/EOSIO/eos/pull/7421