IOST测试网Everest v2.0上线
自Everest v1.0发布,IOST开发团队已进入主网上线的筹备期,对IOST网络的性能、去中心化和安全性、以及对开发者和用户的友好性进行了大量改进和优化工作。在GitHub代码更新长期名列前茅的同时,IOST开发团队始终按时向社区公布详细的技术进展周报,并在全球范围内启动了开发者激励计划,已吸引大量优秀开发者加入IOST网络和生态的开发建设中。
Everest v2.0是主网上线前最重要的阶段性里程碑,将为主网的如期上线奠定坚实基础。今天,我们很高兴宣布Everest v2.0正式上线!
Everest v2.0已包含主网Mainnet v1.0的所有基本功能,许多开发者已开始在Everest v2.0上开发和测试各类DApp应用。同时,IOST团队将坚定履行承诺,于2019年2月25日提前上线主网。
Everest v2.0 是什么?
我们将从以下6个方面讲解Everest v2.0的基本特性与独特优势:
- IOST经济模型
- PoB共识机制
- 智能合约系统
- IOST虚拟机(IVM)
- 高性能存储层
- 去中心化网络层
一、IOST经济模型
1. 资源模型
影响区块链网络使用的因素包括所有的节点、计算机和连接这些节点的网络,以及这些节点处理和存储的所有数据。区块链上每一笔交易都会消耗资源,因此每一个区块链网络都需要设立机制管理这些资源的使用。
以太坊、EOS和IOST的资源模型对比
EOS网络将这些资源抽象为计算、网络和存储,以CPU、NET和RAM标记。在以太坊中,这些资源被统一打包为GAS。
配置三种不同的资源会让系统变得复杂难用,但将计算、网络和存储统一打包则会让带宽和存储资源的利用率变得很低。
在实际情况中,应用程序要么对计算资源敏感,要么对存储资源敏感。计算和网络资源往往被同时使用,因此我们将计算和网络资源整合为iGAS,并将存储资源重新设计为iRAM。我们的资源模型为双资源的iGAS-iRAM模型。
通过使用iGAS-iRAM资源模型,我们在提高计算及存储资源利用率的同时降低了系统的复杂性与用户的使用门槛。
2. 交易调度模型
交易调度模型对比
在HFFS(高费用者优先,Highest-Fee-First-Serve)的模型中,交易按照交易费用的高低次序被区块生产者(矿工)处理。网络拥堵时,用户可以通过支付更高的费用从而让交易更快被处理。
在FCFS(先到先得,First-Come-First-Serve)模型中,交易按照发布时间被处理。如果网络拥堵,交易需要排队等待,甚至有可能在一定时间之后被丢弃。在这个模型中,无法保证交易一定会被执行。
在IOST交易调度中,我们使用HFFS模型,但无需支付交易费用。IOST 通过用户质押的代币每天以持续稳定的速率生成iGAS。用户生成的iGAS并不会被稀释。用户可以使用iGAS发送交易,选择让交易被更快执行。因此在IOST调度模型中,用户可以实现免费交易,也能够调整交易的执行次序。
3. 稳定的计算资源
基于DPoS机制的EOS正面临计算资源危机。网络中可用的CPU资源波动性巨大,让EOS基本处于不可用的状态。
观察EOS我们可以发现:
- 你什么都不做,你的CPU资源被突然占满,不能做其他事情。
- 你花费 $100 来质押获得CPU资源,但玩了几局扑克牌后,这些资源都被花光了。
这些问题催生了EOS代币租赁服务,例如Chintai、CPU Emergency、EOS Bank 等,来解决这个严峻的问题。
IOST设计了一个不同的质押模型。在IOST的质押模型中,通过系统设计使得用户的可用资源不被稀释且不产生波动。任何用户的CPU资源和网络资源都是稳定的。iGAS 生成速率固定,1 IOST在24小时区间内产生固定的iGAS(目前为1万 iGAS)。与此同时,EOS的CPU生成速率在0.1—120 毫秒/日之间波动。EOS的CPU波动率超过一千倍,让用户体验变得不可预估。而IOST的固定速率生成模型可以让交易体验变得稳定可靠。
EOS CPU资源波动.图片来自:labs.eostitan.com
二、PoB共识机制
IOST设计的PoB是一个比DPoS更去中心化的选举方案,并具有相同的扩展性且注重censorship resistance。PoB共识机制确保了一个公平合理的选举过程,使得大部分节点都有资格参与到区块生产中,而不是只有头部的少数节点进行区块生产。但是,获得票数越多的节点仍然拥有更大的机会生产区块。为此,我们并不直接采用投票结果作为选举结果,而是引入了一个积分体系——Servi来决定委员会成员。
1. Servi委员会选举
在每轮委员会选举中,所有节点候选人的Servi获取速率与投票结果是成正比的。Servi值排名最高的节点将会组成一个委员会并负责下一轮的区块生产。入选委员会的所有节点的Servi余额都要扣除其中最后一名的Servi值。也就是说,最后一名的Servi值清零,其他节点扣除等量的Servi值。
委员会选举样例
2. 委员会高频换届
在IOST网络中,每10分钟就会进行一次委员会换届。由于Servi的自动清理机制,每天也许有上百个合格的节点被选入委员会。事实上, 由于换届选举每10分钟就进行一次,任何合格的节点最终都有机会进入委员会并负责下一个周期的区块生产。这种选举流程无疑使PoB机制比DPoS机制更去中心化。在DPoS机制的网络中,固定的极少数头部节点控制整个网络,而在IOST网络中,至少有上百个节点在不停地生产和验证区块。委员会成员的不断更换保证IOST网络更加动态、灵活。
PoB共识机制的设计保证了区块生产的去中心化和IOST网络的公平公正,并具有与DPoS机制同样的可扩展性和吞吐速度。
三、智能合约系统
IOST设计出了一个更灵活,控制功能更加强大的智能合约系统,具有多项独特优势:
1. 可插拔的多语言支持
这版的IOST测试网实现了智能合约的多语言支持。目前我们支持基于V8引擎的JavaScript智能合约编程,同时支持Golang模块高性能的合约交易。
2. 智能合约的权限系统
现在IOST智能合约支持多重签名。智能合约可以检查调用栈,回答诸如 “ABI 是被谁调用的” 等问题。智能合约还新增了对特殊权限设置的支持,例如升级和移除合约。这可以在很大程度上解决以太坊等平台中出现的合约难以管理和维护的问题。
IOST的JS游戏的智能合约示例
3. 共识结果的生成
在执行之后,智能合约会在区块中生成一个链上收据(Receipt) 并寻求共识。我们支持使用 “远程进程调用”(RPC)追踪上链交易的 Receipt,让整个网络透明可信。
4. Event 主题订阅
除了链上收据(Receipt)特点作为交易证明外,IOST还支持在链下存储事件(Event)的功能。IOST Event在系统级别实现,会给用户提供不同的事件主题(Event Topics)供其订阅。这些主题包括交易、区块、智能合约、区块生产者等的生命周期信息。事件主题(Event Topics)的功能让用户更容易访问IOST网络并获取相关信息。
四、IOST 虚拟机(IVM)
IOST虚拟机本着优雅、易用和安全的原则而设计。在调研了不同版本的EVM、EOS VM、C Lua(在 Everest v0.5 中采用)和V8后,我们的团队选择基于V8引擎进行开发,并解决了许多EVM和EOS虚拟机中存在的设计问题。
IOST 虚拟机结构
IVM的核心是VM Manager,包含如下功能:
1. 统一入口
VM入口处理和其他模块的外部请求的交互,包含RPC请求、区块验证、交易验证等。入口接受的任务会在预处理和格式化后分配给VMWorker,保证外部接口的统一性。
2. 高效的生命周期管理
在IVM中,Worker的数量(也就是VMManager的线程数量)基于虚拟机系统的工作量进行动态调整,来达到高效率重复利用的目的。在Worker之间,JavaScript热启动和热点沙盒快照的存储可以帮助减少 VM 的生成,避免加载同一套代码时对CPU和内存带来巨大的工作负荷。这样的设计增加了系统的吞吐量,允许IOST VM在处理大量的合约(例如运行fomo3D应用)时依然保持高性能运转。
3. 快速状态存取
VM Manager与状态数据库(State Database)之间拥有统一的接口。这能保证存取的原子性,避免数据库只写入部分数据,并能保证在资金不足、交易执行失败时退回整个交易操作。与此同时,状态数据库使用二级缓存进行存储,最终才将内容写入RocksDB中。这能在不同版本的数据中实现更短的存取时间,并为临时数据优化性能表现。
4. 安全性保障
IVM 底层架构采用基于 V8 Isolate 功能的 JavaScript 沙盒,严格限制系统级函数调用,保证完全的线程隔离和安全的合约执行。
IVM 禁用了一系列具有不确定的时间和空间复杂度的函数和类库。这些库甚至会通过不同的参数生成指数级别的调用,例如 RegExp 正则表达式、Math 部分数学方法、ArrayBuffer、Proxy 等等。我们同样去除了大部分的高风险 JavaScript 函数,例如 eval、Function 等等。
在用户设置的 iGAS 和 iRAM 使用限制之外,IVM 同样为每个合约的执行设置 CPU 时间和内存大小的限制,避免恶意攻击。
IVM重写了所有JavaScript的标准库,为每一个标准库函数添加了iGAS数据统计,避免通过使用标准库进行恶意攻击。
五、高性能存储层
IOST实现了多版本并行控制缓存(MVCC,Multi-version Cached Control)的存储层。
IOST存储层架构
具体而言,IOST存储层的功能包括:
1. 多版本并行操作
基于区块链的数据处理模式,我们使用MVCC缓存来处理请求,同时将其并行缓存到内存中,这可以增强数据层的性能与易用性。在区块链分叉时,我们不需要回滚状态,而是可以直接从缓存中读取状态。
2. 简洁性
IOST存储层提供数据的最终存储。我们采用了最简单的键值数据库形式,实现不同数据库和不同服务层通讯(SLA,Service Level Agreement)的情形下的数据存取。
3. 动态存取
我们的存储层带有commit manager接入到最外层。Commit manager处理多版本数据的管理与维护。更高层的操作则可以将这一层作为普通的数据库进行处理,并且可以切换到任意版本。
六、去中心化的网络层
IOST实现了完全去中心化的网络拓扑结构,允许快速的节点发现、高效率的交易和区块全网广播。与此同时,我们限制网络中的数据冗余度,并在节点间实现安全的数据传输。最重要的功能特性如下:
1. 可发现性和可连接性
我们通过在TCP协议上建立TLS安全传输层来加密数据传输。为了更好地利用每一个TCP连接,我们采用了多路传输技术来发送和接收数据,并在节点间动态建立多个数据流来最大化带宽使用。对于节点,我们使用Kademlia来存储路由表。这意味着IOST可以在网络传输数据时避免内容被监听和篡改。
2. 快速传输
为了减少带宽使用、加速数据传输,我们使用Protocol Buffer将结构化的数据进行序列化,并使用Snappy算法进行压缩。在我们的测试中,这一方案可以将数据尺寸压缩80%以上。
3. 可接入性
IOST网络层使用UPnP协议实现内网穿透。UPnP和UDP打孔协议、STUN协议等其他的解决方案不同——它在不发布服务器的情况下不需要公开端口。这意味着用户无需云端服务器,就可以使用消费级计算机来接入我们的网络,并和其他节点进行通讯。我们希望确保网络可以随时被任何用户接入。
结语
今天,每一位IOST区块链的贡献者都在为测试网Everest v2.0的全面实现激动不已。在此,我们想对IOST的全球开发者社区表示最诚挚的谢意,感谢你们夜以继日的奋斗与卓越的贡献。IOST团队将坚定不移地履行我们对社区的承诺,在2个月后上线我们的主网Mainnet v1.0。
欢迎大家来参与使用我们的测试网Everest v2.0。开发者和项目方已经可以在 Everest v2.0搭建DApp应用。
开发者文档:
https://developers.iost.io
Slack开发者社区:
https://invite.iost.io
我们一如既往地欢迎所有的想法和建议,并期待能够继续改进IOST区块链。
Happy hacking!
IOST团队
-END-
官方网站
iost.io
社交平台
Weibo https://weibo.com/u/6502023048
Twitter twitter.com/iostoken
Telegram t.me/officialios
GitHub https://github.com/iost-official
Medium medium.com/@IOStoken
Zendesk iost.zendesk.com
商务合作
contact@iost.io