写点什么

区块链创新之卡尔达诺(Cardano)

  • 2018-04-26
  • 本文字数:4681 字

    阅读完需:约 15 分钟

卡尔达诺对标比特币与以太坊,从本质上来说,针对的是数字货币和智能合约,也就是现在圈子里说的很多的区块链 1.0 及 2.0。未来的互联网是价值互联网,在其上流通的不是信息的拷贝,而是真实价值的转移。比特币的出现使我们能够将资产数字化以及点对点转让,以太坊在比特币的基础上更近一步,能够以合同的形式进行自动化资产转移等操作,可以说我们已经在向价值网络迈进了。但正如同计算机刚有了 UI,新奇但是简陋。比特币和以太坊在面临大规模使用的时候,就开始歇菜摆烂了,规模化程度很低。而且基于 PoW 共识算法的平台也会经常因为升级、意见不同而产生分叉,破坏社区团结。

这些都是比特币和以太坊面临的主要问题,卡尔达诺(Cardano)就是为解决诸如区块链规模化、可持续发展等问题而出现的区块链 3.0 解决方案。卡尔达诺(Cardano)的研发流程非常严谨,它没有如其他区块链平台使用白皮书定义技术路线,而是由一群科学家们带头发起,先有论文之后再同行审阅,在数理逻辑层次上趋近完美,之后由 IOHK 的工程师们编写代码,而且为了避免程序 Bug 引起的程序崩溃或者区块链分叉,软件开发人员使用函数式编程语言 Haskell 构建平台,可见团队对项目的用心程度。

卡尔达诺团队

现阶段,主要有三个组织支持卡尔达诺的发展,卡尔达诺基金会、Emurgo 以及 IOHK。基金会的主要工作是规范,保护和推广卡尔达诺协议,也就是制定生态法规和标准以及社区建设等。Emurgo 公司的主要工作是孵化基于卡尔达诺生态的初创企业以及协助商业企业接入卡尔达诺生态圈。最后的 IOHK 是由前以太坊核心开发人员 Charles Hoskinson 成立的区块链技术公司,主要负责卡尔达诺平台的搭建。

卡尔达诺技术

为了更精准的对标比特币和以太坊,卡尔达诺将项目进行拆分,主要分成了结算层(数字货币)和计算层(智能合约)。卡尔达诺结算层(Cardano SL)是由 IOHK 联合爱丁堡大学,雅典大学和康涅狄格大学共同设计开发的一种加密货币,代号 ADA。而卡尔达诺计算层(Cardano CL)还在研发中,因此这里我们着重介绍结算层的相关知识。

卡尔达诺结算层(ADA)

卡尔达诺结算层对飚的是比特币,虽同属于数字加密货币,但是二者之间有很多不同之处。最重要的区别就是 BTC 是基于工作量证明(PoW)的数字货币,而 ADA 使用权益证明(PoS)。BTC 采用的 PoW 共识以及竞争出块机制使得能源消耗越来越多,矿工挖矿难度越来越大,这也是为什么最近大家热衷于研究 BFT 类以及 PoS 类共识算法的原因。

ADA 采用的 PoS 共识算法被称为乌洛波洛斯(Ouroboros),是目前为止唯一一个基于科学证明的安全的区块链权益证明算法,它不需要浪费电力资源,而是随机选取任意节点作为区块生产者,被选中的概率跟该节点权益成正比。在 ADA 中,所谓权益是指节点持币的相对价值,可简单的认为是节点持币价值 / 全网总价值。如果某个节点的权益 >0,则被称为是权益所有人,而如果被选作为区块生产者,该节点也被称为 SLOT 领导者,也就相当于比特币的矿工。

乌洛波洛斯(Ouroboros)协议

乌洛波洛斯协议将时间分片,称为 epochs。每个 epoch 又划分为多个 slot,在一个 slot 时间段(20 秒)内,有且只有一个领导者,由他负责产生一个区块。如果领导者在他的 slot 期间因为一些原因未能产生区块,那么他就浪费了这次机会,除非再次被选做领导者。也就是说可以有一个或多个 slot 是空的(不产生区块),但是在一个 epoch 期间,必须由大部分的 slot(50%+1)都有区块产生,也就是需要大部分的节点都是诚实的。

那么 slot 领导者是怎么被选出来的呢?基本条件是权益所有人,但并不是所有的权益所有人都能被选举,有准入门槛,比如节点权益占比全网权益的 2%。如果按 2% 的准入门槛,那么整个 ADA 网络中,能够成为候选人的节点不会超过 50 个。随着权益分散,候选人会越来越少,权利会更加集中,而且权益所有人拥有的权益越多,它被选举为 slot 领导者的可能性也就越大,所以也可以说 PoS 是富人的游戏,但是 ADA 中又有一个权益委派的功能,简单的说可以将多个账户的权益集中起来使之成为候选人,每个账户可以按照比例获得分红。

在确立了候选人之后,如何选举出在下一个 epoch 阶段的 slot 领导者呢?选举的根本是随机性,在 ADA 中,采用多方计算(multiparty computation)方法来实现选举的随机性,每个候选人都独立的产生自己的随机结果,但经过多方协调后,他们最终得到相同的随机种子。在对应的 epoch 开始后,所有的候选人节点根据“追随中本聪(follow-the-satoshi)”算法,输入随机种子和 slot 的索引,就可以知道当前对应 slot 的领导者了。如果是节点自己,那么就将自己收到的交易打包成块,跟比特币类似;而如果当前 slot 的领导者不是自己,那就等待着区块广播,如果超过 slot 时间后还未收到区块,则认为该区块跳过。以上就是 ADA 的出块流程,这里描述的很浅显,感兴趣的朋友可以阅读参考列表中的资料,深入理解其精髓。

账户模型

因为结算层对标的是比特币,相对来说是比较单纯的数字货币(所谓单纯是指未附加智能合约之类的设计),所以很多设计沿用了比特币的做法,比如账户模型就采用了 UTXO 模型。所谓 UTXO,就是指未花费的交易输出,每一笔交易都应该有 N 个交易输入,同时产生 M 个交易输出(N 与 M 可以不等)。其中交易输入是前序任意交易的未花费的交易输出,如果当前交易成交,该前序交易的输出也就变成了成交的交易输出,也就失去了成为交易输入的资格。因此在网络中的每个 slot 领导者不仅仅接收交易,还会验证交易输入的合法性。为了验证交易,每个节点都必须保持对未花费交易输出的跟踪,这样就可以验证当前交易中的输入是否还未被花费,如果所有的交易输入都是未花费的,那么该交易就被证明是合法的,会被当前领导者接收,打包成块。UTXO 模型能够追踪数字货币的流向: 未花费的交易输入告知货币是从哪里来的,未花费的交易输出告知货币往哪里去。

网络架构

典型的区块链中的节点间是对等的,随着数据量的增多,才渐渐出现了全节点轻节点的区别。而 ADA 在网络架构层次上就对节点分了层,现阶段,主要有以下三组节点:

  • 核心节点,是整个网络的重中之重,所有的权益都集中在核心节点,只有核心节点才可以是权益所有人。也可以说这么说,只有核心节点是区块链节点,其余两种节点只是辅助节点。而且为了加强核心节点的安全性,完全可以将核心节点与公网隔离,只通过中继节点与外界通信;
  • 中继节点,是公网与核心节点的通信代理,由于中继节点是不隔离的,所以他可能被攻击。但是中继节点被设计成无状态的,因此可以使用负载均衡分散流量。中继节点即便被攻击,对核心节点的影响几乎为零;
  • 边缘节点,可简单的认为是与区块链交互的客户端,主要负责发起交易,而核心节点和中继节点没有权利创建交易。从名字就可以看出来,边缘节点是没有机会直接与核心节点交流的,必须通过中继节点转接。

交易确认

在 ADA 中,领导者出块因为有区块扩散的过程,因此不是一个确定性的共识算法,在某个 slot 段内,其领导者因为网络或故意为之,并不一其前置区块作为其区块的 parent,因此产生了分叉。官方给出了一个交易安全确认的等级表,攻击者的比例越高,需要确认的区块数越多;确认水平越高,相对应的需要的区块数也越多。

卡尔达诺与 EOS

卡尔达诺与 EOS 都被认为是区块链 3.0 的代表,经常被放在一起比较。而且不仅是媒体、信仰者,EOS 的核心开发者 BM 也公开发表文章数落卡尔达诺的不足,卡尔达诺官方就此也做了一个回应,这里就他们争论的关键点做个总结:

DPoS

我们都知道,卡尔达诺和 EOS 都使用了 DPoS 作为其共识算法,但是 D 的含义却是不同。在 EOS 中,D 指的是 Delegated,也就是委托;而卡尔达诺中的 D 指的是 Dynamic,意思是动态。EOS 通过投票委托见证人代表自己生产区块,而卡尔达诺是通过动态随机的选取权益候选人作为区块的生产者。

出块时间

BM 认为卡尔达诺 20 秒的出块时间太长,根本不能满足高性能的需要,而与之对应的 EOS 只需要 0.5 秒即可(白皮书中是 3 秒,之后有所变更,在节点出块的 3 秒钟时间内,连续出 6 块,因此单个区块是 0.5 秒)。而卡尔达诺团队认为,出块时间间隔应该与完成信息交换的时间基本一致,而且 20 秒是一个相对保守的估值。考虑到节点的真实地理位置,比这个时间更短的全球化区块扩散在现有的网络环境下是不太可能的。他们认为 EOS 所谓的高性能,要么是错误的,要么只是低去中心化的解决方案。

在我看来,EOS 的高性能现在还是未知数,可能是噱头也可能是杀手锏,而且卡尔达诺提出的网络传输问题也是不能忽视的,EOS 确实在这方面有所夸大。另一方面,卡尔达诺说 EOS 是低去中心化,这点难以认同,因为按照卡尔达诺的设计,只有占全网 2% 权益以上的节点才可以作为 slot 领导者,正如上文所提到的,最多只有 50 个(但永远不可能有 50 个)节点作为候选者,实际可能更少,而且节点权益越高,成为领导者的概率越高,节点间的权利是不对等的,而 EOS 在同一选举周期里,只有 21 个区块生产者,且权利对等。我认为是互有利弊,孰优孰劣只有等实际运行后才能比较。

激励机制

ADA 的激励机制跟现有的大多数公有链类似,“矿工”收取交易手续费。与比特币不同,交易手续费是 ADA 矿工的唯一收入来源。而且交易手续费不仅是给矿工的激励,也是一种防止 DDoS 攻击的手段,当攻击者试图用大量伪造交易冲击网络时,必须付出足够多的手续费。而 EOS 的激励机制则完全不同,EOS 每年增发 5% 作为“矿工”的奖励,因为“矿工”的权利是一致的,所以奖励应该是与其被选中的次数正相关。

二者都明确一件事,那就是“矿工”是需要被激励的,只是手段不一样,ADA 雁过拔毛,EOS 无中生有。如果以人民币作为参考系,假设 ADA 和 EOS 的都是升值的,那么使用 ADA 的成本肯定会逐渐增加,且币减少;而 EOS 如果整个生态价值的增长每年超过 5%,扣除增发,用户手中的币不变,价值却依然增长了,当然一切的前提是生态发展。

另一方面,ADA 声称手续费可以防止 DDoS 攻击,不可否认这是一种方法,但我认为 EOS 的按持币比例分享网络资源是一种更好的选择,它让资源的竞争变成了一种市场行为而不是强制的规则。如果 DAPP 开发者想要获得更多的资源,那么他必须从二级市场囤积更多的 EOS,因此势必会抬高币价,但是囤积的 EOS 并不会被大量消耗,因为交易都是免费的。当 DAPP 开发者放弃当前业务时,可以将囤积的 EOS 再次流入二级市场,这是一个良好的生态循环。

尾声

BM 在他的文章中这么说:“卡尔达诺是一个重达 400 磅的防弹背心,即便能防弹,又有什么用呢?”,言外之意就是说即便卡尔达诺的设计是无懈可击的,但是在实践面前,太臃肿的设计不见得是好用的。卡尔达诺是一次典型的由学术派发起的技术革命,项目都是先有论文,再“双盲(匿名提交、匿名评审)”评审,最后才有技术实现,与 EOS 的实践派形成鲜明对比。未来到底如何,我也不敢妄自定论,但可以确信的是,这两个项目一定会推进区块链技术的落地。

参考列表:

  • 《Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol》 2017
  • 《Cardano Settlement Layer Documentation》 2017
  • 《Cardano(ADA)的共识算法 Ouroboros》2018
  • 《区块链中的随机数》2018
  • 《用密码学玩暗军棋 – 闲聊多方计算》 2017
  • 《Peer Review of Cardano’s Ouroboros》 2018
  • 《On the Ouroboros Design: How rigour and engineering are essential for critical infrastructure》2018

作者介绍

自游,区块链底层架构师。16 年初接触区块链并全职投入,现供职于某世界 500 强企业做区块链底层研究及 BAAS 平台搭建。精通区块链底层存储、共识等技术,职业方向偏重联盟链体系。

2018-04-26 18:103357

评论

发布
暂无评论
发现更多内容

架构师训练营第十二周作业

zamkai

这些面试题你会吗?月薪20k+的Android面试都问些什么?面试必问

欢喜学安卓

android 程序员 面试 移动开发

数据应用一

raox

日记 2021年2月21日(周日)

Changing Lin

2月春节不断更

这些面试题你会吗?双非本科字节跳动Android面试题分享,大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

架构13周

FreeOcean

新作者 新入驻 新征程

InfoQ写作社区官方

写作平台 新人 热门活动

不负责预测:2021手机市场的“雄起”错觉

脑极体

GitHub访问破百万!字节2021年Java程序员面试指导已疯传

比伯

Java 编程 程序员 架构 面试

Elasticsearch 常见 Query 搜索

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

1.0 Go语言从入门到精通:Go语言介绍

xcbeyond

28天写作 Go 语言

week13-conclusion

J

区块链处在中国市场的风口 既是机遇 也是挑战

CECBC

区块链

区块链技术的价值传递

CECBC

使用 Tye 辅助开发 k8s 应用竟如此简单(四)

newbe36524

.net Docker Kubernetes .net core dotnet

科普篇:交智商税的商品

石云升

28天写作 2月春节不断更 智商税

关于事件溯源

架构精进之路

28天写作 事件溯源

设计模式简介

happlyfox

设计模式 28天写作

诊所数字化:私域运营的本质

boshi

数字化转型 医疗 私域运营 七日更 28天写作

2021Java面试必备!啃透这份Java10W字面经,你还用担心被面试官“吊打”?

程序员 架构 面试

关于链表的一二三事

阿零

学习 链表 数据结构与算法

全网最详细的负载均衡原理图解

鞋子特大号

Linux 负载均衡 系统开发

架构设计篇之微服务实战笔记(二)

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 架构师成长笔记

数据应用二

raox

个人职业规划和定位

张老蔫

28天写作

week13-homework

J

聊聊2021年区块链的发展趋势

CECBC

比特币

软件架构-事件驱动架构

看山

架构 事件驱动架构

一次搞明白 Docker 容器资源限制

Java架构师迁哥

Selenium 与 Python 之间如何才能交融在一起

梦想橡皮擦

Python 28天写作 2月春节不断更

Scrum Patterns:团队('Pigs')的估算(译)

Bruce Talk

敏捷开发 译文 Agile Scrum Patterns

区块链创新之卡尔达诺(Cardano)_语言 & 开发_自游_InfoQ精选文章