开发者言|当我们做IOST的时候,我们在考虑什么

10 个月前 创建于

很多人问IOST想做什么,其实对于整个研发团队来说,目标非常简单——做一个更好的应用级公链。

 

我们希望尽可能解决一些区块链技术存在的问题,也希望提出自己的技术方案,实现应用级公链需要的目标。所以这篇文章将从我们关注什么问题出发,阐述我们打算怎么做,以及为什么要这么做。

 

一.当我们做IOST的时候,我们在考虑什么

性能

-   多方面的高吞吐率

-   低延迟

-   虚拟机的高性能

去中心化与安全性

-  比EOS更去中心化

-   安全

用户、开发者容易使用

-   更灵活的权限与升级机制

-   低手续费,用户可能免手续费使用

-   对开发者友好

二. 开发路线

三. 为什么选择这样的开发方案

什么是PoB,为什么是PoB

链下扩容方案、分片

为什么不使用DAG

 

当我们做IOST的时候,我们在考虑什么

1.性能

 

一个支持智能合约的区块链构建了一个计算与数据都可信的去中心化计算机,而性能决定了这台“计算机”的上限,上限越高能够实现应用的类型也就更多。具体来说,性能指标可以拆解为3个关键部分:

 

-   多方面的高吞吐率

 

这是被大家最常提起的指标,也是很多人对新一代公链的判断标准之一。但对于研发来说,我们关注的并不只是吞吐率的最大值,而更是在执行不同任务、面临不同情况(例如一些攻击,网络不稳定等问题)的时候,表现都能够尽量优秀。

 

同时,我们更关注对于单个合约的吞吐率,而不是单纯区块链每秒能跑多少笔交易。举个例子,我们可以同时跑两个以太坊网络,那么我们可以得到一个两倍于以太坊吞吐率的网络,但是由于两个网络计算与状态都是分离的,对于单个合约来说它依然还只能够在一个网络上跑,这方面的吞吐率并没有提升。

 

-   低延迟

 

一般我们指的是一笔交易被打包到被确认的时间,这同样是一个和性能相关的重要指标但偶尔又会被忽略。一个面向交易的区块链网络可能能接受一个比较大的延迟,对于像IOST这样的应用级的区块链,我们希望延迟尽量低,能够尽量快的得到反馈。

 

-   虚拟机的高性能

 

不同的虚拟机技术执行相同任务时所消耗时间可能存在巨大差别。就像上面所说的,一个应用级的区块链在我们的期望中必然不是只能执行一些简单交易,而必然会面临很多复杂合约。我们希望采用的虚拟机的性能是足够优秀的,这样能够在真正大规模应用化的时候扛住负载,而不是只在简单交易中得到一个比较漂亮的数字。

 

2.去中心化与安全性

 

-  比EOS更去中心化

 

去中心化是区块链实现信任的基础,我们希望在扩容的基础上依然保持一定的去中心化程度。EOS给应用级区块链开了一个头,EOS的DPoS机制更期望节点的稳定,对投票人无激励同时强力打击贿选使得大部分人没有投票的动力,委员会几乎很难产生变化,因而导致其中心化问题严重。

 

与此同时,EOS实行的“强链下治理”虽然能解决一些问题,但是也使得区块链不那么纯粹,因为一个人在区块链上的数据随时可能被一个组织剥夺。我们希望IOST还是一个区块链,能够具备一些区块链基本的性质。

 

-   安全

 

安全性是区块链的基础,我们不希望IOST区块链上的数据丢失或者被破坏,所以IOST将有不低于其他主流公链的安全性。

 

3.用户、开发者容易使用

 

一个好的公链就好像一个操作系统,除了性能以外,一定是用户、开发者容易使用的。

 

-   更灵活的权限与升级机制

 

对账户、合约的权限我们都是采用灵活的函数形式定义。你可以永远返回false表示合约永远不可升级,也可以配置合约是可升级的,只要满足函数对应的条件即可执行。例如投票或者前3天可由开发者升级,等同于IOST在合约层给开发者创造出了共识的可能,这会使得合约变得更加灵活。

 

-   低手续费,用户可能免手续费使用

 

EOS一定程度上实现了免手续费目标,然而真正在EOS上开发、使用就会发现,其在某些程度上甚至比以太坊更贵,且用户创建账号的门槛更高,因而EOS现在没有一个很好的应用生态,而这些归根结底是EOS的RAM机制导致的。一个高吞吐的区块链理应降低使用成本,我们构建机制使得资源掌握在真正需要使用的人手上。同时我们希望通过用户和开发者为区块链应用付费,尽量免除用户使用的手续费。

 

-   对开发者友好

 

一个良好的开发者生态特别重要,所以我们希望能构建出一个平台使得开发者特别容易在上面开发,这包括了以下几个方面:

 

安全性:以太坊出现过很多次合约层面的问题,导致了一些严重的后果。虽然我们可以归咎于开发者的粗心,但是作为公链的开发者,我们要做的是有更严格的检查和更合理的接口使得开发者开发不容易出现漏洞。

 

开发语言:我们希望使用一种热门、且应用开发者容易上手的语言,因此C++、Haskell等不会是我们的目标语言。

 

第三方工具:尽量完善的开发工具也是我们追求的目标之一。

 

 

开发路线

IOST 6月末上线的第一版本公开测试网络Everest 0.5,实现了一个完整的区块链网络框架以及PoB的初步验证,目前我们研发团队正在紧张地进行第二版本公开测试网络的开发。

有了第一个版本的基础,预计在今年内还会发布两个版本的测试网络,这两个版本更主要地会专注在PoB的完善、稳定性、新特性、经济模型以及其他机制的确定。换句话说,在今年到明年Q1我们将专注于单个分片内链上协议层的完善,而在明年接下来的时间,我们会进行链下扩容方案的研究以及分片技术的具体实现。

在下个月即将发布的第二版公开测试网络中,将主要会实现:

 

1. 完善代码模块,提升基础性能以及稳定性

2. 灵活的函数式权限系统

3. 更多PoB细节的确定

4. 经济模型第一版方案

5. 调研测试了主流虚拟机之后,决定将虚拟机将迁移至V8

6. 恶意节点处理以及其他安全性上的提升

7. P2P网络模块的重构

8. 其他一些缺失基础功能的实现,例如事件机制、更多的RPC接口等等

 

为什么选择这样的开发方案

目前市面上所有项目和研究中,扩容有4类常见方案:选举、分片、DAG、Layer2(常说的链下扩容方案)。

1.什么是PoB,为什么是PoB

 

对于IOST来说,PoB是选举的一个分支,再之后我们会用分片技术以及链下扩容方案来进一步提升系统的吞吐量。

 

虽然EOS的DPoS较为中心化,但是选举不一定意味着中心化,在一些传统的共识机制中,一个时间周期内只有一个Leader有生产数据的权利,DPoS只是在选举这个大的扩容分支下的一个方案。我们可以一定程度上把去中心化程度定义为一定时间单位内区块生产者的分布。我们目前的内部测试版本采用了两层资格获取的模式。

 

第一层为了避免女巫攻击,我们依然使用了基于Token的质押加选举的方式,也就是有资格参与共识的节点需要获取一部分Token资源。

 

 

其实不难发现,现在真正落地且安全的公有链都是PoW或PoS的一种分支,因为基于算力或Token是唯一安全的区块链准入机制。现在采用任何别的共识都会面临安全性问题:是否能伪造、是否数据中心化提交、共识基于数据是否链上能够被证明而不是发生在链下、一个新加入网络的节点是否能够参与到共识等等。同样,PoB也是PoS的分支之一,第一层准入也是基于Token。需要自己质押一定Token并且累计授权Token达到一定数量才会成为“可信节点”,才有资格参与到共识。

 

第二层就是PoB真正核心部分,在这个部分会真正的选举出生产区块的委员会。在这一层,我们希望达到两个目标,一方面是委员会需要强制地快速变化以实现更好的去中心化,另一方面我们希望鼓励节点为网络做贡献的同时相互竞争。

 

为了达成这些目标,每个可信节点都会有一个积分,即Servi。Servi只能通过验证交易、打包交易等网络行为累积,同时当时被授权的Token数量也会在按照比例在每个时间周期换算至Servi,他们需要竞争,才可以竞选成为真正参与共识的委员会成员,每次被选上委员会的节点需要消耗Servi,并且会得到来自于基金会提供的Token激励。

 

同时我们会以一个比较高的频率进行委员会的选举。这样会导致两个结果,第一个是每次成为委员会成员都需要消耗Servi,这样其他没有选上的人就会有更多的Servi,在下次就有更大的机会被选上。其次,所有成员都需要为网络做出贡献才能够获得更多的Servi,有更多的机会分配到节点奖励。在EOS的DPoS中,一个超级节点不做任何事情是不会有任何惩罚的。选举是最直接并且也是目前看来唯一适合大规模商业应用的区块链扩容方式,节点是否“超级”并不是其中最重要的因素,缩小网络规模让一次共识达成的更快、激励节点提升计算性能才能获得更多激励是方案的关键。

 

 

2.链下扩容方案、分片

 

无论是闪电网络、以太坊的Plasma还是现在出现的一些新的技术,都已经注意到不应该所有数据都放在区块链上,一些问题应该放在链下解决,这也是我们在第二步的主要方向之一。

 

我们希望通过链下扩容方案解决部分场景的扩容问题,例如一些对安全性要求不高的数据或者小额的资金处理。但同时也需要注意到链下扩容并不能解决所有问题,一些丢失会产生严重后果的数据还是需要在主链上运行,简单的押金制在代码层面不能赔付给真正受到损失的人,同时也不一定能够匹配上数据的真正价值。我们视链下扩容方案为比较完整的实现主链之后的第二步扩容方案。

 

同样,分片也是基于PoB基础上的协议层扩容方案,也是我们的第二步解决方案。虽然我们目前对分片技术做了很多研究和测试,但是分片技术不管采取哪种方案,不可避免的一个问题就是——把网络划分成多份,虽然可以跑出一个比较好看的数字,但是安全性会成倍的降低。而区块链网络的参与者是需要不断积累的。在网络上线早期,我们希望IOST更纯粹,同时尽可能的安全和稳定。单纯的PoB已经能满足早期的使用需求,不过分片技术依然会在我们的测试网络上活跃和更新。

 

3.为什么不使用DAG

 

我们对目前所有DAG相关技术进行过很多研究,但目前并没有一个非常成熟能够落地的解决方案。除此之外,我们没有选用或者研究DAG结构另一个重要原因是——DAG牺牲了强一致性,使用DAG技术一定会造成巨大的延迟,与我们目标不符;DAG在最终一致性下做排序有可能会导致极端情况下超出节点能承受的计算量。

 

结语

 

在我们看来区块链技术目前依然处于早期,除了常被讨论的共识之外,还有很多需要改善完善的地方。这篇文章主要目的是希望所有关注IOST和关注区块链技术的人知道我们在做什么。

 

我们希望IOST成为第一个真正被大规模使用的应用级区块链。不过由于篇幅有限,很多技术细节在这篇文章中不能完全展示。在后续的几个月中,我们的一线研究者会逐渐和大家见面,他们会详细地阐述技术的详细设计方案,以及更深层次的思考。

 

_____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

币世界 i.bishijie.com/home/IOST/dynamic

_____20180911153758.png