鉴于有不少小伙伴反映,觉得区块链技术圈乱象横生,鱼龙混杂,导致大家很难去辨识哪些是真正的技术。甚至有些人,打着说技术的名号,其实自己本身都没弄懂弄明白,只是懂个皮毛,就开始拿着各种技术专有名词去唬人。这样的现象,导致想好好学习技术知识的小伙伴们甚至会被混淆和误导,学到和接收到的是错误的信息。小编对于存在的这样的乱象也深感痛心,作为一支来自与清华姚班的公链团队,Conflux的小伙伴们,决定来帮助真正想学习技术的大家!推出《吐槽君小C》专栏,小C会用最直接,最犀利的言语来道出区块链项目技术的优势劣势,真正讲清楚技术,讲清楚技术之间的区别,让大家对技术和整个行业有更深刻的了解认知,本文就是Conflux吐槽君第一期~
一个荒唐的故事
几年前,打车平台激烈大战的时候,有这样一家创业公司横空出世,号称实现了零打车费,从根本上解决了人们出行中的痛点。而实现的方式是,让用户自己买辆车,然后自己给自己当司机。让服务需求方自己给自己提供服务,从而节省了服务费。这一想法让投资人非常惊讶,然后将创业者打出门去。
上面这个故事是小C我编的。但在区块链这个圈子里,却真的有这样一个公链项目,凭借着区块链的技术认知门槛,编概念讲故事,号称解决了区块链+物联网的痛点。这个项目在区块链泡沫最高的时候,一度登上了市值榜TOP10。这就是小C今天的要和大家讲的项目:IOTA。
IOTA是个啥?
首先,IOTA是一个使用DAG账本结构的区块链系统。(注:DAG,Directed Acyclic Graph,中文全称“有向无环图”,所谓DAG结构,就是让每个区块或交易引用多个区块或交易作为父亲。这样所有的区块或交易之间的父子关系构成一个有向图。每个区块或交易必须引用比自己早的交易,因此,这些区块或交易的父子关系不可能出现循环。因此,这个结构被称为有向无环图) 它的账本数据结构叫做Tangle,翻译成中文就是“纠缠,混乱”的意思。没错,这个名字非常贴切。因为小C从研究IOTA的第一天开始,就被IOTA技术上各种奇葩不靠谱的方案绕晕了。
IOTA的项目愿景非常美好:它通过无区块链,无交易费,无限可扩展,解决了物联网场景中各种痛点。这简直是重新定义了区块链啊。但是,如果深扒IOTA的技术原理,你会发现IOTA实现方案非常不靠谱。有多不靠谱呢?比对着excel喊“二百五,求和”还不靠谱。
IOTA到底怎么不靠谱
小C先来说说这个无限可扩展。在IOTA原始的设定中,所有的交易构成一个 DAG。任何人(或物联网设备)想发起交易,只需要引用其他两个交易就可以了。没有矿工,没有区块,没有矿工赚交易费,你发交易的速度有多快,IOTA的TPS就有多高。只要好人的交易总数足够多,它就是安全的。
这简直太awesome了,攻击一个区块链系统从来没有像攻击IOTA那样简单。不需要屯币,不需要买矿机,我只要搞一台电脑不停地,每分每秒不停地发交易,让我的交易占据全网的50%以上,我就攻击成功了。
IOTA 大概也意识到了这个问题(被大家抨击到不得不意识到这个问题)。于是IOTA后面改了,说每笔交易必须算一个 PoW,来防止女巫攻击带来的双花问题的。纳尼?说好的无限可扩展呢?
有了PoW的IOTA真是妙不可言啊。要知道,IOTA应用场景是物联网设备,物联网设备跑PoW真是天才的想法啊。所谓的物联网设备,就包括现在最火的智能家居,比如智能插座,智能音箱,智能冰箱等。那什么样的物联网设备可以把PoW的优势发挥到淋漓尽致呢?机智的小编我,马上想到了物联网智能电磁炉!我简直迫不及待想买一个 IOTA 物联网智能电磁炉,每次打开电磁炉的时候,它就开始进行PoW运算,发出的热量也可以加热食品。当你的晚饭做好了,一笔 IOTA交易也就发出去了。
不仅如此,这个IOTA电磁炉还能提高烹饪的安全系数。它通过占满你家网络的带宽,让你上不了网,杜绝你在烹饪的时候因为刷微信刷微博把房子点着。因为在IOTA中,发送每笔交易时,需要选择两笔交易作为父亲。这个要求看似简单,但你需要保证:这两笔交易的历史中没有非法交易,没有冲突的交易。这需要同步大量的历史,验证历史交易的正确性,处理冲突交易,并且保持与IOTA的DAG最新状态同步。如果你偷懒不同步,那你的交易可能就因为违反了一些规则被无效掉了。为了重新发起这笔交易,你只好再做一顿饭。
在比特币中,矿工负责做PoW运算,负责同步、验证网络交易,并处理冲突,用户向矿工付交易费。IOTA重新定义了区块链,消灭了交易费,取而代之的是这些事情都得用户自己来做。当比特币的用户坐在餐桌上吃烤鸭的时候,IOTA的用户还蹲在后厨亲自养鸭子。小C认为,IOTA所谓的无交易费,本质上就是用从商品经济回到自然经济,这是倒退,不是创新。
当然,由于这个实在太不合理,于是IOTA的社区就有了弥补的方案。有一个叫 IOTA PoWer的服务,它允许用户付一笔钱,将自己的交易PoW计算等任务外包。可是小C我仔细一想,这不就是用户发出一笔交易,然后付钱让矿工给我打包进区块吗?这个区块很特别,只能放一笔交易而已。由此可见,IOTA所谓的无区块链,不过是自欺欺人的宣传点罢了。
对于上面荒诞的故事,IOTA的拥护者可能会不服,他们认为IOTA的PoW与比特币的PoW目的是不一样的,IOTA的PoW只是为了减少网络中的垃圾交易,不会给用户造成负担。那就让小C来带着大家,具体算一算IOTA 中PoW 的难度怎么设比较合理。
首先,我们要算一下IOTA网络最高能跑到多少个TPS?如果IOTA每秒产生10000笔交易,网络带宽的局限性导致IOTA无法保证DAG账本在全网的同步。如果账本始终无法及时同步,那么不同的节点就可能在不同的分叉上越走越远,从此分道扬镳,共识不再。所以 IOTA的网络中,每秒 10000 笔交易,不能再多了。
然后,我们要算一下IOTA的全网算力达到多少 TH/s 才算安全?全网算力达到多少 TH/s,一个普通的家用电脑,才能在一顿饭的时间里(1小时)发出一笔交易?一个Intel Core 2 Duo的算力大概是2.5MHash/s, 1小时内可以尝试9G次Hash尝试。9G次Hash尝试发出一笔交易,目前 IOTA主网的吞吐率只有5TPS,如果坏人有>45GHash/s的算力,那么他们就可以每秒产生>5笔交易,就可以在交易数量上占据主导,从而进行51%算力攻击。即使达到了10000 TPS,90THash/s依然可以进行51%算力攻击。 90THash/s是个什么概念呢?一个蚂蚁S9矿机的算力是13.5THash/s,七台蚂蚁矿机的算力就可以超过 90THash/s。
哪怕普通用户算1小时才能发起一笔交易,七台S9蚂蚁矿机就能完成对IOTA的双花攻击。IOTA面临着一个选择:去让用户忍受更长的等待时间,还是让攻破IOTA的门槛更低?
IOTA选哪个?IOTA哪个都不选,IOTA选择中心化!
为了解决上述矛盾,IOTA网络中要额外使用一个中心化的Coordinator来定期的验证DAG和交易。这使得IOTA实际上变成了一个中心化的系统。IOTA声称,未来会取消这个中心化的 Coordinator。然而,基于上面的计算,即使网络带宽增加100倍,即使用户愿意忍受1小时才能发一笔交易,700台S9矿机依然能对IOTA发起双花攻击。与之相对应的是,比特币的全网算力大约是(50 EHash/s),相当于4000000台S9矿机。
给IOTA的建议
小C认为,摆在IOTA面前两条路,要么在中心化的道路上继续走下去,要么积极推广PoW外包方案。让专门的矿工来处理交易打包、PoW挖矿等事宜,让用户为矿工付费。摒弃“无交易费、无区块链、无限扩展”等这些不负责任的言辞。
但是即使IOTA“改过自新”,接受了小C的建议,IOTA本质上还是一个1个区块只能包1笔交易的区块DAG。它违背了系统设计中最最通用的一个常识性的优化思想--batching,就是批量处理。这意味着元数据带来的开销会显著增加,同时会带来很多系统实现上的性能挑战。比如,当区块链系统的吞吐率达到每秒几千笔交易的时候,网络带宽通常会成为瓶颈。而交易就是区块链网络中主要需要传输的数据。如果每笔交易都附带许多DAG相关的元数据(例如对其它DAG结点的引用),那么对网络带宽的压力就会大大增加。另外,维护交易粒度的DAG也会大大增加本地计算的复杂度。IOTA的DAG中需要对每个交易结点维护一个累计权重,也就是所有直接或间接引用了该交易的交易个数。当一个新的交易被加入到DAG的尾部,所有它能够直接或间接引用到的交易的累计权重都要需要更新,这个复杂度是和交易的个数成正比的 。假设系统的吞吐率是1000TPS,那么系统从刚开始运行到1小时后,DAG中的交易个数就会达到360万。一天之后就会达到8600万。之后每笔新加入的交易都会带来接近1亿次的权重更新,而且这个复杂度会越来越大。
小C有话说
我们需要认清几个事实。吞吐率有限,是因为网络带宽有限。PoW的难度高,是为了避免轻而易举地被 51% 攻击。交易费的存在,让专职矿工来解决普通用户的需求。一个区块容纳多个交易的设计,提高了运行的效率。如果看不到这些背后的原理,却盲目地去掉限速,去掉交易费,去掉区块,然后用一个漏洞百出的底层技术,去设计产品方案,去讲一个所谓天方夜谭的故事,这样只会断送这个项目的未来。
(注:如果代币是增发的,通胀本质上就是持币者向矿工付服务费。)
欢迎关注我们的微信公众号:Conflux中文社区(Conflux-Chain)
添加微信群管理员 Confluxgroup 回复“加群”加入 Conflux官方交流群