区块链技术迅猛发展,新想法、新概念、新名词层出不穷。万向区块链因此推出“技术研究报告”专栏,定期与大家分享在区块链行业创新及热门技术方面的研究成果,带领大家第一时间研究学习新技术,紧跟技术发展趋势,探索发掘技术的应用价值。
在上周的《EOS.IO技术调研》一文中,我们分享了关于EOS.IO概况、共识、出块、验证等方面的研究结果。这周我们将带大家更加深入地了解EOS.IO账户体系、公私钥使用、存储等方面的内容。
本文作者:万向区块链通用架构技术部 吴超尘
特色
1.账户体系
2.免费(其实会按资源收费)
3.多种类型的公私钥可以同时使用
-
secp256k1, secp256r1 -
YubiKey(硬件签名设备) -
技术实现:
-
采用模板 -
通过前缀区分 constexpr const char* public_key_prefix[] = {
? ?"K1",
? ?"R1",
? ?"WA"
};
?
constexpr const char* private_key_prefix[] = {
? ?"K1",
? ?"R1"
};
?
constexpr const char* signature_prefix[] = {
? ?"K1",
? ?"R1",
? ?"WA"
};
版本迭代
2.0
-
EOS VM:高性能 WebAssembly (WASM) 引擎 -
EOSIO Quickstart Web IDE:基于 Web 的集成开发环境,已在容器内部署一条链(单节点),且安装了智能合约编译器和EOS SDK,降低新 EOSIO 区块链开发人员的进入门槛
-
支持加权阈值多重签名区块生产:区块生产者应该为其生产区块的核心服务提供高可用性,避免单点故障。提高区块生产者的安全性和可扩展性。
-
原来的共识规则要求每个区块生产者只有一个区块签名密钥 -
新的共识规则支持每个区块生产者拥有多个加密区块签名密钥
-
WTMSIG_BLOCK_SIGNATURES :增加了对块生产的加权阈值多重签名(WTMsig)授权的支持
-
优化:
2.1
2.2 rc
-
私有访问控制
-
第一层控制“连接”访问
-
第二层管理“数据”访问
-
启用条件:
-
撤销:
存储
存储和读取模式
GitHub - EOSIO/chainbase: Snapshot of Last Open Source version of Chainbase from Steem
内存映射文件
Nodeos 存储交易历史和当前状态。交易历史存储在blocks.log 磁盘上的文件中。当前状态通过交易的执行而改变,当前使用 chainbase 或 RocksDB 存储 (可配置)。
-
内存块 (预生产的块)
-
缓存 (区块链状态)
-
持久化 (正式块)
多线程处理
节点的工作线程包括:一个主线程,一个信号处理线程和四个线程池。
-
主线程:main 函数启动线程,该线程执行完程序初始化工作后,会调用app().io_service.run() , 启动boost::asio::io_service 的异步io服务,通过异步io方式完成节点块生产,交易处理等主要业务工作。 -
信号处理线程:子线程,通过异步io服务,接收系统信号并处理。 -
线程池,线程池启动的工作线程数可通过启动参数配置。 (默认池内2条工作线程)
-
controller 线程池:异步执行块block_state 创建,块中交易验证时的交易解签名计算。
-
producer_plugin 线程池:负责异步执行交易解签名计算。
-
为接收到的投递交易进行异步解签名计算(在节点收到其它节点/客户端广播的交易时被调用, 提前进行验签与权限判断, 多线程并行) -
等待解签名计算完成,将交易投递到主线程的异步io服务中处理。
-
http_plugin 线程池: RPC服务支持多线程 -
net_plugin 线程池: P2P服务支持多线程
nodeos(主线程&信号处理线程) :
─┬─{nodeos}(controller线程池_线程1: 异步执行块block_state创建,块中交易验证时的交易解签名计算)
? ? ├─{nodeos}(controller线程池_线程2)
? ? ├─{nodeos}(producer_plugin线程池_线程1: 异步执行交易解签名计算)
? ? ├─{nodeos}(producer_plugin线程池_线程2)
? ? ├─{nodeos}(http_plugin线程池_线程1: http服务)
? ? ├─{nodeos}(http_plugin线程池_线程2)
? ? └─{nodeos}(net_plugin线程池_线程1: p2p服务)
EOS VM (WASM虚拟机)
https://github.com/EOSIO/eos-vm
智能合约编译的工具链是clang/LLVM及其C/C++编译器
已解决的问题:
EOSIO的不足之处
-
共识模块没有插件化 -
最终确定的时间太久(325个块, 163秒) -
没有像truffle 一样方便的本地脚本级开发环境 -
并行验签与鉴权,但合约事务与智能合约只能串行执行 -
P2P没有采用Gossip算法,不带自动发现与自动连接,需要手动配置对端的ip与端口 -
对于块生产者的作恶行为没有自动的惩罚措施 (比如: 同时在两条分叉链上都生产区块的生产者, 如果没被选民发现,他就不会出局)
|