EOS1.1版本新特性介绍
EOSIO/eos 目前在github的项目活跃度方面排名第一,release版本更新的速度让人应接不暇。今天EOS的大版本1.1发布,我也有幸参与了贡献,本篇文章重点介绍1.1版本的重大功能升级。
关键字:eos, eos 1.1, MongoDB,Read-Mode: HEAD,sync,优雅退出,keosd的硬件支持
MongoDB plugin
我们知道目前eos的本地存储结构是简单的文件存储,对于备份和数据查询等管理角度,略显尴尬。新版本推出了MongoDB插件eosio::mongo_db_plugin,
eosio::mongo_db_plugin 将区块链数据归档至MongoDB数据库中。
这份区块链的数据是只读的,支持高可扩展以及方便的数据查询工作。
支持部署和访问一个MongoDB集群。
通过对源码的浏览,可以查看到该插件支持的主要函数功能:
void consume_blocks(); // 消费区块
void accepted_block( const chain::block_state_ptr& );
void applied_irreversible_block(const chain::block_state_ptr&);
void accepted_transaction(const chain::transaction_metadata_ptr&);
void applied_transaction(const chain::transaction_trace_ptr&);
这些功能有消费区块、接收区块、应用不可逆区块、接收交易、应用交易,在这些功能函数的实现中,也看到队列的使用,很可能我们未来不必自己引入第三方队列而直接使用这些新特性即可。这些功能从字面上就能感受到背后的潜力,未来会单独介绍这个插件。
Read-Mode: HEAD
配置nodeos为“只读头区块”模式,意味着所有RPC请求都会返回头区块的数据,头区块就是最新的一个区块。
它的含义主旨要抓住:就是它不会读取未确认的,或者花费在p2p网络中延迟的交易。
这个模式也跟我们之前讨论的交易确认的方案分析形成互动。我们可以通过这个模式下的请求判断出某个交易是至少被一个生产者确认的,但可能还没有最终定局。
nodeos的性能提升
一、同步速度加快
之前,一个新节点加入区块链时,需要尝试保持一个良好的网络状态,然后验证以及转播它接收到的交易。如果链数据有很大一部分需要同步到新节点,数据的验证准确度会降低,验证的耗费也会增多。所以新版本中:
新节点不转播交易,在它没完成数据同步之前。这样可以提高新节点同步的速度。
二、数据库大小警卫
EOSIO是通过两个内存数据库存储数据:一个是state DB,一个是reversible block DB。现在使用警卫保护:
- 允许运行的实例nodeos检测即将到来的限制
- 优雅退出,防止可怕的BAD_ALLOC异常引发的数据库脏数据,必须要replay整条链进行修复。这是一个从dawn3.0就困扰我的问题。
- 现在恢复一个数据库的操作,就像修改单个配置一样容易
- 重新启动的这个过程,再也不需要replay或resync的操作了。
Alpha:keosd的硬件支持
我们都知道,区块链的账户的私钥的保管是一个问题,登陆验证身份的过程也很容易涉及安全的风险,从1.1开始,正式引入了对keosd的硬件支持,当前目前仍旧是测试版本,还未成为生产版本。
Apple's Secure Enclave
使用苹果电脑的人们目前可通过Secure Enclave提供的基于硬件的秘钥保护他们的EOSIO账户。通过命令
cleos wallet create_key -n SecureEnclave
使用Secure Enclave wallet来创建key,不需要import操作。另外,mac中你要访问Secure Enclave的行为必须被签名。
YubiHSM 2
YubiHSM 2是一个外部硬件安全模块,可添加到任何用户的电脑通过USB端口。keosd现在允许任何使用Linux发行版和MacOS的用户保护他们的EOSIO账户,通过YUbiHSM 2提供的基于硬件的秘钥。这个手段可能会被生产者大量使用。
login 插件
登录插件是第一个支持基于EOSIO blockchain的应用验证概念的组件。插件API允许您来验证一个用户是否能够签名满足指定的权限。
目前login插件只是初步的设计,并无法上生产环境,就像存在了好几个版本的MongoDB插件在当前这个版本才被正式推出一样,login插件日后还会迎来大量修改。
其他的重要改变
- cleos以及rpc可通过二级索引读取table数据
- 多签名合约eosio.msig可以提案一个包含多个actions的transaction
- 添加系统账户eosio.sudo,这个账户只有超过三分之二绝对多数的active 区块生产者才能使用,它的子命令exec可以绕过所有的权限检查
- 发行原子的delegatebw / buyram事务,解决了账户余额足够却无法购买内存的和抵押cpu资源。
- 使用KiB 来购买内存,buyram
- 改进了错误提示,这些错误一般都是在校验环节,原来的错误日志很模糊不清晰
- RPC可以获取定时事务
- nodeos提供灰名单账户,阻止其访问资源在一个无人认领的拥堵链
- nodeos更好的控制块传输的时间,来弥补生产者之间的网络延迟,使用参数produce_time_offset_us
- nodeos检查点(通过signal emit的方式)可以在同步期间,执行确权块上链,共识相关。
- 支持导入导出可逆块数据库作为便携式文件格式,这个特性可以在数据备份设计中使用
- 提高生产者水印追踪,解决生产者出块后落选再次选中出块以后造成confirmed值延续很高的bug
- 日志更新使用ISO国际标准化时间戳
EOS1.1版本新特性介绍的更多相关文章
- xmake v2.1.5版本新特性介绍
2.1.5版本现已进入收尾阶段,此版本加入了一大波新特性,目前正在进行稳定性测试和修复,在这里,先来介绍下新版本中引入了哪些新特性和改进. 1. 提供类似cmake的find_*系列接口,实现各种查找 ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- dubbox新特性介绍
dubbx是当当网对原阿里dubbo2.x的升级,并且兼容原有的dubbox.其中升级了zookeeper和spring版本,并且支持restfull风格的远程调用. dubbox git地址: h ...
- Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性
Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...
- framework各版本新特性(为面试准备)
菜鸟D估计描述这些新特性的文章都是烂大街的货色,之所以拿出来分(e)享(xin)一下,有两个原因:1.当年面试的时候有人问到,我不知道该怎么回答:2.项目需要发布了,但是考虑到framework的版本 ...
- Xcode9新特性介绍-中文篇
背景: Xcode 9 新特性介绍: 1.官方原文介绍链接 2.Xcode9 be ta 2 官方下载链接 本文为官方介绍翻译而来,布局排版等都是按照官方布局来的. 与原文相比,排版上基本还是熟悉的配 ...
- webpack 4.0.0-beta.0 新特性介绍
webpack 可以看做是模块打包机.它做的事情是:分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式 ...
- 《转》MySQL 5.7版本新特性连载
MySQL 5.7版本新特性连载(一) 本文将和大家一起分享下5.7的新特性,不过我们要先从即将被删除的特性以及建议不再使用的特性说起.根据这些情况,我们在新版本及以后的版本中,应该不再使用,避免未来 ...
- Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...
随机推荐
- HTML5表单_form
原则:能让用户选择的决不填写,增加用户体验 表单(form)元素格式 <input type="text" name="fname" value=&quo ...
- Node.js web发布到AWS ubuntu 之后,关闭Putty,Node 项目也随之关闭的解决办法
最近公司把BlockChain和对应的Node Web都发布到了AWS 的ubuntu 系统上. 但是遇到了一个问题,每次启动 Node Web之后,关闭Putty,Node Web也随之关闭. 由于 ...
- 15. pk-mext
在平时的生产环境中,我们经常会碰到监控MySQL的各个状态值的一个变化趋势,然后就会自己写个脚本,将status快照保存到文本中.当我们去分析的时候,需要自己去比较差值,是一件比较麻烦的时候,虽然可以 ...
- AutoCAD开发4--添加块)
Private Sub CommandButton3_Click() Dim pInsertPnt As Variant 'pInsertPnt(0) = 100.5141: pInsertPnt(1 ...
- Eclipse GBK批量转UTF-8插件(转)
最近需要把Android项目转Android Studio,由于之前是eclipse开发,而且坑爹的是编码还是GBK的,转到Android Studio中文都是乱码,如果一个文件一个文件ctrl+c的 ...
- django学习install apps注册错了的影响
今天在学习例子的时候 不注意吧settings.py里面的INSTALL APPS 的APP应用名称写错了 应该是blog 写成了myblog 结果导致python manage.py makemi ...
- [uboot] (番外篇)uboot之fdt介绍
http://blog.csdn.net/ooonebook/article/details/53206623 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...
- 73.解决Xcode10 library not found for -lstdc++ 找不到问题
Xcode10 彻底废除了libstdc++,相关文件libstdc++.6.0.9.dylib.libstdc++.6.dylib.libstdc++.dylib.libstdc++.6.0.9.t ...
- ActiveMQ_2安装
Linux安装 环境JDK7以上 gz文件拷贝到 /usr/local/目录下 解压 后缀为 .tar.gz的压缩包 进入解压后的文件夹 cd apache-activemq-x.xx.x/ cd b ...
- shell脚本学习-执行
跟着RUNOOB网站的教程学习的笔记 Shell与Shell脚本 Shell是用户与Linux系统的桥梁.它既是一种命令语言,也是一种程序设计语言. Shell脚本是一种Shell编写的脚本程序,其实 ...