其他分享
首页 > 其他分享> > EOS系列 - EOSIO 2.0

EOS系列 - EOSIO 2.0

作者:互联网

EOSIO 2.0 - 增强性能,提高安全性和新的开发人员工具

版本历史

总览

  1. EOS VM
  2. 网络代码多线程
  3. WebAuthn
  4. 加权阈值多签名区块生产
  5. EOSIO Quickstart Web IDE
  6. Chain API

提高性能(更快)

1. EOS-VM

不同于以太坊的EVM,EOS有自己独立的一套基于WebAssembly的智能合约引擎。

应用场景

要解决的问题: 无限制内存分配,加载时间延长和堆栈溢出 (比如无限递归或循环). 从而提升整体性能和可靠性

既提高了一条区块链上的单线程性能,也使得链间通信成为可能,它是实现区块链链间通信的第一步

特性:

传统.cpp代码要求使用者要么使用底层运行库兼容的预编译版本,要么重新编译,操作起来非常麻烦,而纯头文件代码则简单得多,直接#include就可以了

该引擎由三个组件组成, 三个新的WASM Runtimes

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的主链所用

2. 网络代码多线程支持

Block.One还声称通过向其添加多线程支持大大改善了区块链的网络代码。多线程是中央处理单元同时执行多个执行线程的能力。

改动

提高TPS

影响TPS的要素

提高安全性(更安全)

3. 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中,仍处实验阶段

硬钱包EOS Yubico Key

在EOS 2.0采用WebAuthn协议的基础上,block.one和于yubico合作发布硬件钱包EOS Yubico Key。EOS用户可以使用 EOS Yubico Key通过WebAuthn签署链上交易。其作用类似于知名的EOS浏览器插件钱包scatter。

4. 加权阈值多签名区块生产 WTMsig

背景

当前的共识规则要求每个区块生产者仅需要一个加密区块签名密钥。该密钥,无论是存储在磁盘上并通过软件加载还是由硬件钱包保护,都代表了区块生产者操作的单点故障隐患。如果该密钥丢失或暂时无法访问包含该密钥的硬件模块,则区块生产者别无选择,只能丢掉区块,从而影响整个网络的吞吐量。

实施细节

  1. 块生产者可以定义一个阈值和一组加权的公共密钥,并使用关联权重之和对块进行签名,以使阈值满足阈值。
  2. 验证逻辑将强制所有新块中的现有new_producers字段block_header必须为空,无论其来源如何。
  3. block_header_extension将引入一个新的,用于根据新producer_authority类型宣布新的生产者计划。
  4. 一个新的内在函数set_proposed_producers_ex将是有效且可链接的
    • 允许使用旧格式以及新格式producer_authority

应用场景

  1. 旨在为块生产者提供完整的高可用性解决方案, 为冗余基础结构提供一个多签许可层
  2. 允许BP冗余部署, 无需共享私钥等敏感数据
  3. 允许区块生产抵御恶意参与者对该基础设施某些部分的危害

共识协议升级

  1. WEBAUTHN_KEY:增加了对WebAuthn密钥和签名的支持(#7421)
    • WEBAUTHN_KEY协议功能的激活意味着eosio::newaccount或eosio::updateauth动作现在可以将WebAuthn公钥作为提供的一部分authority
    • public_key 的类型可以为 WebAuthn公钥的序列化
  2. WTMSIG_BLOCK_SIGNATURES:增加了对块生产的加权阈值多重签名(WTMsig)授权的支持
    • eosio.contracts的版本v1.9.0-rc1regproducer2向eosio.system合同中添加了一个新操作,使块生产者候选者可以注册WTMsig块签名授权。(只能部署在已激活WTMSIG_BLOCK_SIGNATURES协议)

两个功能都需要通过特权preactivate_feature内在函数进行激活, 需要获得绝大多数区块生产者的批准(eosio.msig)

这两个协议功能中任何一个的激活将立即排除不支持该协议功能的任何节点(例如,运行v2.0.x之前版本的nodeos的任何节点)

新开发者工具(更简单)

5. EOSIO Quickstart Web IDE

这个工具在云服务中运行,使新开发人员能够建立智能合约和Web应用程序开发环境以及完全集成的单节点个人测试网,因此他们可以在几分钟之内从入门到构建。

应用场景

想解决新开发人员的入门障碍——那些首次前往eosio hackathon或首次在EOSIO上进行开发的开发人员。通常,设置区块链开发环境是一个多步骤的过程,可能需要数小时甚至数天才能完成。这就是为什么要构建EOSIO Quickstart Web IDE,这是一个开发工具,它使新开发人员可以在几分钟之内从入门到准备就绪。

Setup (目前处于Alphy版本)

https://github.com/EOSIO/eosio-web-ide
https://gitpod.io/#https://github.com/cucubao/eosio-web-ide

  1. Fork this repo to your personal GitHub account so that you can save your work into your personal Github account.
  2. browser to the following URL https://gitpod.io/#https://github.com/your-github-account/eosio-web-ide
  3. … (之后在WEB IDE内按readme操作)

在这里插入图片描述
在这里插入图片描述

6. Chain API

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

标签:区块,VM,EOS,签名,EOSIO,2.0,WebAuthn
来源: https://blog.csdn.net/wcc19840827/article/details/103994745