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.----------- ...
随机推荐
- etcd-v2第二集
参考文章:https://github.com/coreos/etcd/blob/master/Documentation/v2/api.mdhttp://www.cnblogs.com/zhengr ...
- python基础之Day12
一.闭包函数 什么是闭包函数? 闭:函数是一个内部函数 包:指的是该函数包含对外部作用域(非全局作用域)名字的引用. 给函数传值的方式有两种: 1.使用参数直接给函数传值 2.包给函数 1 2 3 4 ...
- Spring 框架XML文件的配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www ...
- Mac下Tomcat安装与Intellij IDEA配置Tomcat
Mac下Tomcat安装与Intellij IDEA配置Tomcat 一 安装 1 下载地址:https://tomcat.apache.org/download-90.cgi 2 将压缩包解压后移至 ...
- #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)
https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...
- instr()函数--支持模糊查询
1)instr()函数的格式 (俗称:字符查找函数) 格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串) 格式二:instr( strin ...
- ABP框架系列之十九:(Debugging-调试)
While it's not generally needed, you may want to step into ABP's source code while you debugging you ...
- c++两个类相互调用
有可能会碰到两个类之间的相互调用的问题,例如:定义了类A和类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; }; class B { A a; }; 编译器在声明A ...
- CUDA[3] Samples for accessing shared/global memory
memory model: programming model: Source: Udacity Class CS344
- OpenCV与QT联合开发示例
1.OpenCV及QT开发环境搭建 windows基于vs2017的opencv安装 windows下安装QT并与visual studio 2017搭建开发环境 2.工程创建 1.导入Qt项目 选择 ...