IOST——打造一个真正可用的去中心化基础架构

10 个月前 · 原创文章

致 IOST 社区:

 

在过去的几年中,各个区块链项目都面临着一个难题,即“不可能三角”——在可拓展性、安全性和去中心化之间寻求平衡并不容易,不少项目会因为走捷径而破坏了区块链的可靠性。IOST技术团队一直致力于寻找“不可能三角”的解决方案,努力打造一个真正可用的去中心化基础架构。

 

经过不懈的努力,9月30日,IOST 测试网络的第二版 “Everest v1.0” 上线了!

 

这一版本测试网的主要功能包括:

 

1.支持使用 JavaScript 编写智能合约——GitHub 显示,这是世界上最受欢迎的编程语言 

2.第一个支持智能合约域名系统(DNS)的区块链,也是第一个支持灵活访问权控制(包括合约升级和删除)的区块链

3.第一个在存储层支持多版本并行控制(MVCC)的区块链,并使用 MVCC 缓存实现高性能存储

4.全新的虚拟机系统,解决了许多 EVM 和 EOS虚拟机的设计问题,并实现了benchmark合约运行EOS 10倍、Ethereum 200 倍的性能表现

 

Everest v1.0 凝聚着IOST技术团队过去一年的技术研究成果,也揭开了IOST 区块链开发的新篇章。从今年六月份发布第一版测试网Everest 0.5至今,我们一直努力进行技术升级,如今发布的 v1.0 则是另一个重要的里程碑。

 

Everest v1.0 和其他区块链的简单对比:

 

_____20181009152448.png

 

 

Everest v1.0 主要亮点

 

1. 新合约系统支持 JavaScript

 

  • 可插拔的多语言支持:这版本IOST 实现了智能合约的多语言支持。目前我们支持基于 V8 引擎的 JavaScript 智能合约编程,同时支持Golang模块高性能的合约交易。

     

  • 智能合约的权限系统:现在IOST智能合约支持多重签名。智能合约可以检查调用栈,回答如 “ABI 是被谁调用的” 的问题。智能合约还新增了支持特殊的权限设置,例如升级和移除合约。这可以在很大程度上解决以太坊等平台中出现的合约难以管理和维护问题。

     

  • 共识结果的生成:在执行之后,智能合约会生成一个 TxReceipt 在区块中寻求共识。我们支持使用 “远程进程调用”(RPC)追踪上链交易的 TxReceipt,让整个网络透明可信。

     

  • 通用的 ABI 接口支持:IOST 智能合约现在支持通过 ABI 和网络进行交互。更复杂的数据结构可以被解析为 JSON 字符串,这可以让开发者在编写和调用合约时更自由、更方便。

 

2. V8 引擎的虚拟机全新设计

 

我们相信好的虚拟引擎需要设计优雅、简单易用,还需要保证安全。通过比较 EVM、EOS、C Lua (在 Everest v0.5 中采用) 和 V8,我们从根本上解决了 EVM 和 EOS 许多不合理的设计,并在 V8 引擎上打造了 IOST 的虚拟机。

 

虚拟机的核心是 VMManager,包含三个主要功能:

 

  • VM 入口:入口是外部模块请求进行交互的接口,包括 RPC 请求、区块验证、Tx 验证等等。再通过预处理和格式化后,工作会被交给 VMWorker。这是为所有请求提供的一个统一入口。

     

  • VMWorker 生命周期管理:Worker 的数量会依据系统的工作负荷而动态调整,并且会重复使用 worker。每一个 worker 还会采用 JavaScript 热启动和热点沙盒快找技术来减少虚拟机的频繁创建,减少读取代码时 CPU 和内存的负荷。这样我们可以增加系统的吞吐量,允许 IOST V8 虚拟机在处理如 fomo3D 这样拥有海量用户的智能合约时游刃有余。在我们的预试验中,我们已经达到了和 v0.5 相近的交易吞吐量指标。在未来的几周中,我们会继续改进和优化生命周期管理。

     

  • 接口和 State 数据库管理:这能保证 IOST 交易的原子性(避免只有一部分内容保存到了数据库),允许交易出错或 gas 不足时退回整个交易。与此同时,State 数据库也对内容实现了两层缓存,最终才存储到 RocksDB 中。这能实现更短的跨版本数据访问时间,在处理临时数据时能得到更好的性能。

 

_____20180918155523.png

图 1:IOST 虚拟机结构

 

3. 带有 MVCC 缓存的高性能存储层

 

  • MVCC 缓存:考虑到区块链数据处理的模式,我们采用 MVCC 缓存来处理请求,同时并发将其写入缓存。这样提高了数据层的性能与易用性。

     

  • 动态数据库访问:IOST 存储层提供数据的最终存储。我们采用了键值数据库形式,可以在不同的 SLA 情形中接入不同的数据库。

     

  • Commit Manager:存储功能的最外层,用来进行多版本数据的管理与维护。这样可以让上层将其当作普通数据库进行使用,并能自由切换数据库至任意版本。

 

_____20181009153232.png

 图 2:IOST 存储层的架构

 

4. 带有快速发现和广播功能的完全去中心化网络层

 

我们搭建的是一个完全去中心化的网络拓扑结构,拥有快速的节点发现和对交易、区块的全网广播。与此同时,我们希望限制网络中的冗余内容,并实现节点间的安全数据传输。通过研究和测试,我们决定使用功能完备的 libp2p 的库作为网络层的基础。

 

  • 节点发现和连接:为了避免数据被监听和篡改,我们在 TCP 协议之上添加了 TLS 加密协议。为了更好地利用每一个 TCP 连接,我们采用了 “多路复用” 的方式来收发数据,在不同的节点间动态建立多个通道来最大化带宽利用。对于每个节点,我们使用 Kademlia 来维护他们的路由表。这意味着我们可以在网络中避免数据监听和篡改。

     

  • 数据传输:为了减少带宽占用、加速数据传输,我们使用 Protocol Buffer 将所有结构化的数据进行序列化,并使用 Snappy 算法进行压缩。在我们的测试中,这一方案可以将数据尺寸减少 80% 以上。

     

  • 局域网穿透:我们使用 UPnP 协议实现局域网穿透。UPnP 和 UDP 打孔或 STUN 等别的协议不同——他不需要暴露端口即可公布服务器。这意味着你可以用家用电脑接入我们的网络、和其他节点进行通信,无需拥有一个云端的服务器。

 

Everest v1.0 将成为 IOST 主网的坚实基础。我们开发的脚步正按照之前的计划稳步前行,甚至比计划中实现了更多的功能。和许多跳票和推迟版本发布的区块链项目不同,IOST 正不懈前行、保持领先位置——主网计划于2019年第一季度发布,这比最初的计划提前了好几个月。

 

Everest v1.0 的发布是我们守时守约、不断开发、保证进度的又一证明。在此我们感谢在全球各地日夜加班的朋友们,是你们让 IOST Everest v1.0 成为了现实。我们非常激动能够和社区分享 Everest v1.0 发布的消息,并且即刻就会投身到 2019 年第一季度的主网开发工作中去!

 

在此我们邀请大家加入我们的开发者社区。我们的开发团队互助有爱、相互帮助、相互促进,共同解决问题。IOST 在此欢迎所有开发者参与到我们的社群建设中来。

 

你可以在这里找到我们:

 

开发者网站:

https://developers.iost.io

 

Slack 开发者社区:

https://invite.iost.io

 

欢迎大家来参与测试我们的测试网络。同往常一样,我们欢迎各路的想法和意见,并期待能够继续改进 IOST 区块链。

 

Happy hacking!

 

IOST 开发团队



 

彩蛋:点击链接或扫描二维码参与IOST第二版测试网Everest v1.0有奖问卷调查活动!

qrcode.jpg

_____20180907184910.png

官方网站

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

 

_____20180910154850.png

IOSToken

新一代安全可扩展的线上服务生态系统