阅读本文之前,我们需要认清几个事实。吞吐率有限,是因为网络带宽有限。PoW 的难度高,是为了避免轻而易举地被 51% 攻击。交易费的存在,让专职矿工来解决普通用户的需求。一个区块容纳多个交易的设计,提高了运行的效率。如果看不到这些背后的原理,却盲目地去掉限速,去掉交易费,去掉区块,然后用一个漏洞百出的底层技术,去设计产品方案,去讲一个所谓天方夜谭的故事,这样只会断送这个项目的未来。

原文标题:《IOTA 物联网电磁炉-让 PoW 的耗电没有遗憾》

一个荒唐的故事:几年前,打车平台激烈大战的时候,有这样一家创业公司横空出世,号称实现了零打车费,从根本上解决了人们出行中的痛点。而实现的方式是,让用户自己买辆车,然后自己给自己当司机。让服务需求方自己给自己提供服务,从而节省了服务费。这一想法让投资人非常惊讶,然后将创业者打出门去。

趣解项目:号称解决了区块链+物联网痛点的 IOTA 到底怎么不靠谱?

上面这个故事是小 C 我编的。但在区块链这个圈子里,却真的有这样一个公链项目,凭借着区块链的技术认知门槛,编概念讲故事,号称解决了区块链+物联网的痛点。这个项目在区块链泡沫最高的时候,一度登上了市值榜 TOP10。这就是小 C 今天的要和大家讲的项目:IOTA。

趣解项目:号称解决了区块链+物联网痛点的 IOTA 到底怎么不靠谱?

IOTA 是个啥?

首先,IOTA 是一个使用 DAG 账本结构的区块链系统。(注:DAG,Directed Acyclic Graph,中文全称「有向无环图」,所谓 DAG 结构,就是让每个区块或交易引用多个区块或交易作为父亲。这样所有的区块或交易之间的父子关系构成一个有向图。每个区块或交易必须引用比自己早的交易,因此,这些区块或交易的父子关系不可能出现循环。因此,这个结构被称为有向无环图)它的账本数据结构叫做 Tangle,翻译成中文就是「纠缠,混乱」的意思。没错,这个名字非常贴切。因为小 C 从研究 IOTA 的第一天开始,就被 IOTA 技术上各种奇葩不靠谱的方案绕晕了。

趣解项目:号称解决了区块链+物联网痛点的 IOTA 到底怎么不靠谱?

IOTA 的项目愿景非常美好:它通过无区块链,无交易费,无限可扩展,解决了物联网场景中各种痛点。这简直是重新定义了区块链啊。但是,如果深扒 IOTA 的技术原理,你会发现 IOTA 实现方案非常不靠谱。有多不靠谱呢?比对着 excel 喊「二百五,求和」还不靠谱。

趣解项目:号称解决了区块链+物联网痛点的 IOTA 到底怎么不靠谱?

IOTA 到底怎么不靠谱

小 C 先来说说这个无限可扩展。在 IOTA 原始的设定中,所有的交易构成一个 DAG。任何人 (或物联网设备) 想发起交易,只需要引用其他两个交易就可以了。没有矿工,没有区块,没有矿工赚交易费,你发交易的速度有多快,IOTA 的 TPS 就有多高。只要好人的交易总数足够多,它就是安全的。

这简直太 awesome 了,攻击一个区块链系统从来没有像攻击 IOTA 那样简单。不需要屯币,不需要买矿机,我只要搞一台电脑不停地,每分每秒不停地发交易,让我的交易占据全网的 50% 以上,我就攻击成功了。

趣解项目:号称解决了区块链+物联网痛点的 IOTA 到底怎么不靠谱?

IOTA 大概也意识到了这个问题(被大家抨击到不得不意识到这个问题)。于是 IOTA 后面改了,说每笔交易必须算一个 PoW,来防止女巫攻击带来的双花问题的。纳尼?说好的无限可扩展呢?

有了 PoW 的 IOTA 真是妙不可言啊。要知道,IOTA 应用场景是物联网设备,物联网设备跑 PoW 真是天才的想法啊。所谓的物联网设备,就包括现在最火的智能家居,比如智能插座,智能音箱,智能冰箱等。那什么样的物联网设备可以把 PoW 的优势发挥到淋漓尽致呢?机智的小编我,马上想到了物联网智能电磁炉!我简直迫不及待想买一个 IOTA 物联网智能电磁炉,每次打开电磁炉的时候,它就开始进行 PoW 运算,发出的热量也可以加热食品。当你的晚饭做好了,一笔 IOTA 交易也就发出去了。

不仅如此,这个 IOTA 电磁炉还能提高烹饪的安全系数。它通过占满你家网络的带宽,让你上不了网,杜绝你在烹饪的时候因为刷微信刷微博把房子点着。因为在 IOTA 中,发送每笔交易时,需要选择两笔交易作为父亲。这个要求看似简单,但你需要保证:这两笔交易的历史中没有非法交易,没有冲突的交易。这需要同步大量的历史,验证历史交易的正确性,处理冲突交易,并且保持与 IOTA 的 DAG 最新状态同步。如果你偷懒不同步,那你的交易可能就因为违反了一些规则被无效掉了。为了重新发起这笔交易,你只好再做一顿饭。

在比特币中,矿工负责做 PoW 运算,负责同步、验证网络交易,并处理冲突,用户向矿工付交易费。IOTA 重新定义了区块链,消灭了交易费,取而代之的是这些事情都得用户自己来做。当比特币的用户坐在餐桌上吃烤鸭的时候, IOTA 的用户还蹲在后厨亲自养鸭子。小 C 认为,IOTA 所谓的无交易费,本质上就是用从商品经济回到自然经济,这是倒退,不是创新。

趣解项目:号称解决了区块链+物联网痛点的 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 亿次的权重更新,而且这个复杂度会越来越大。

总结

我们需要认清几个事实。吞吐率有限,是因为网络带宽有限。PoW 的难度高,是为了避免轻而易举地被 51% 攻击。交易费的存在,让专职矿工来解决普通用户的需求。一个区块容纳多个交易的设计,提高了运行的效率。如果看不到这些背后的原理,却盲目地去掉限速,去掉交易费,去掉区块,然后用一个漏洞百出的底层技术,去设计产品方案,去讲一个所谓天方夜谭的故事,这样只会断送这个项目的未来。

来源链接:mp.weixin.qq.com