正文
EOS.IO 代码分析
前言
之所以开这个坑是因为我也算是币圈的投资者之一,币圈现在有很多的EOS信仰者,但是目前大部分所谓的有信仰者并不了解EOS代码,只是听别人说EOS是下一代以太坊,或者是听说ByteMaster非常牛逼,但是却鲜有真正意义上对EOS代码去做更深层次研究的。
既然需要大家知其然,知其所以然,本着这样的精神,我这个移动开发者也去尝试的探究一下各种所谓的Token币也好,主链币也好,究竟他们到底有没有点真本事,亦或是说只是些骗人的白皮书把戏。
鉴于我平时是个iOS开发者,主要使用的语言是Swift和Objective-C(其实OC用的也很少了,都不熟悉了),而大多数的区块链底层OS类型产品都是使用C++作为开发语言,所以这个过程对我来说也是一个逐渐学习C++的过程。当然难免我也会犯下不少的错误,所以如果大家有发现任何的问题,或者是觉得我什么地方写错了,都欢迎大家指出。
什么是EOS.IO
根据EOS.IO的白皮书:
EOS.IO 软件引入一种新的区块链架构设计,它使得去中心化的应用可以横向和纵向的扩展。 这通过构建一个仿操作系统的方式来实现,在它之上可以构建应用程序。 该软件提供帐户、身份验证、数据库、异步通信和跨越数百个 CPU 内核或集群的应用程序调度。 由此产生的技术是一种区块链架构,它可以扩展至每秒处理百万级交易,消除用户的手续费,并且允许快速和轻松的部署去中心化的应用。
同时,EOS.IO的白皮书还讲到了EOS.IO在设计之初的几个主要目标:
- 支持成百上千的用户
- 免费的使用
- 简单升级和 bug 修复
- 低延时
- 时序性能
- 并发性能
这其中,最吸引人的应该就是所谓的每秒处理百万级交易,因为有了这样级别的处理能力才能让区块链有了真正的大规模应用的可能性。与之相对应的有Ethereum,初期的测试网络的处理能力是25笔交易每秒,经过逐渐的优化之后,可能可以达到50-100笔交易每秒。而这50-100笔的每秒交易笔数显然是不能满足大规模应用的,在2017年时候出现的爆红一时的Cryptokitties(以太猫)就很明显的暴露了这个问题。
支持百万级别的每秒交易笔数也是EOS.IO相对Ethereum来说最核心,也是最本质的革命。
当然,先别高兴的太早,究竟能不能实现,我们之后再来探究。
共识算法
EOS.IO采用委托股权证明算法,全称是delegated proof of stake,缩写就是DPOS.
DPOS最早在数字货币的应用应该是BitShare(比特股),也就是ByteMaster的第一个区块链产品,最早的时候是为了出一个基于区块链的去中心化交易所和去中心的化的区块链银行,所以出现了一个称为比特股内盘的平台,有兴趣的可以去这个地址看一下什么是比特股内盘。
在这里要提到比特股内盘的原因是,比特股是一个很好的体现ByteMaster想法的应用,也正是因为其中存在的质押模式,让EOS.IO最近受到了很大的质疑。这个我们也在后面再谈。
先简单介绍一下DPOS,后面在考虑单独出一篇文章介绍一下各种不同的共识算法。
DPOS顾名思义,就是讲共识机制委托给对应的人进行决定。以比特股作为例子,DPOS会让每一个持有比特股的人进行投票,产生101位代表,这101位代表每个人拥有相同的权益,而最终的来决定哪一条链是有效的真实的链,则是由这101位代表的情况来决定。
这听起来是不是有点像人大会议或者是议会制度?由多数人选出少数人,再由这部分少数人来投票出最后的决定。而这样的投票最终的目标是确保没有任何人能够篡改历史。
具体为什么这样的模式可以做到这一点,可以参考Steemit上dantheman在2017年6月发表的文章《DPOS Consensus Algorithm - The Missing White Paper》。
想要看中文翻译的版本的,可以参考奚海峰在万云BaaS上发表的翻译稿,雷锋网当时进行了转载,可以在此看到当时的具体内容。
回到EOS.IO来看共识算法,基于DPOS的EOS.IO会每三秒产生一个新的区块,这个区块必须由投票产生的21位生产者轮流生产出来,这样,完成一个轮回之后,就会重新选出21位生产者。选择的过程中,获得票数数量的前20名自动被选中,剩下的一个生产者则需要按照得票比例来选出。
可能只是这样简单的说会比较不好理解,之后可以根据具体的代码来做进一步的分析。
其余的特性
- 交易确认: 15/21(也就是所谓的一个节点可以等待21个生产者中的15个给出确认来确认现有交易的合法性)
- EOS.IO允许长度在2到32个字符之间的自定义名称来作为索引。账户支持命名空间(简单来说就是支持@)。同时,账户支持权限管理,允许权限映射和权限评估。而最特别是支持恢复被盗的密钥:原理和大家现在用的微信找回密码需要多个活跃好友发送消息验证非常类似。
- EOS.IO支持区块生产者使用并发算法来调度交易
小结
以上就是我个人认为EOS.IO比较重要的一些东西了,接下去,会按照代码来看看EOS.IO。
附录
术语名称 |
同义词 |
Block.one的解释 |
Account(账户) |
|
区块链上拥有一个或者多个密钥/账户的原生或有自定义权限的的标识符 |
Authority(权限) |
|
对现实中单个账户或多个账户的授权的一种抽象 |
Block(区块) |
Blk |
区块链的最小单位。每个区块包含大于等于0笔交易和密码学性质上于之前一个区块的联系。当大多数生产者都确认一个区块中包括了无误的交易,那这个区块就被不可逆转的确认了。当一个区块被不可逆转的确认以后,它就变成了不可变区块链上的永久一部分。 |
DAC |
|
去中心化自治集合/去中心化自治委员会 |
DAO |
|
去中心化自治组织 |
DPoS |
|
委任权益证明算法 |
Key pair |
Keys |
与私有密钥对应的公开密钥 |
larimer |
|
1/10000个EOS |
Master Password(主密码) |
|
用于解锁钱包的密码 |
Message(消息) |
Msg |
对区块链进行的操作,一条或多条消息组成一笔交易 |
Oracle(预言机) |
|
区块链智能合约提供可信链外数据以触发智能合约顺利执行的数据源 |
Permission(权限) |
|
通过对签名验证来判断消息是不是经过授权的一种验证机制 |
Private Key(私钥) |
|
用于签名交易的密钥 |
Public Key(公钥) |
pub key |
和交易一起传送的公开密钥 |
Smart Contract(智能合约) |
|
用于建立,验证或者是执行合约的电脑协议 |
Transaction(交易) |
Tx, Txn |
对区块链做的一次改变,由一个或多个消息组成,一般情况下是执行一个智能合约 |
Wallet(钱包) |
|
客户端建立的一段用于管理私钥和签名交易的加密文件。钱包可以是锁定或是解锁状态 |
Witness(见证人) |
block producer(区块生产者) |
用于建立,验证或者是执行合约的电脑协议 |