IOTA的技术简介

IOTA有什么技术创新?是什么链,什么共识机制,有什么独特的技术上的创新?

 IOTA是为物联网(IoT)而设计的一个革命性的新型交易结算和数据转移层。它基于新型的分布式账本——Tangle(缠结)。Tangle能够克服现有区块链设计中的低效性,并为去中心化P2P系统共识的达成创造了一种新方法。

IOTA的技术细节

Tangle(缠结)是基于有向无环图结构(DAG),而不是一种连续的链式架构,定期添加区块。通过DAG,IOTA能够实现较高的交易吞吐量(通过平行验证),并且不收取交易手续费。在Tangle中,每个节点都是代表着一个交易。随着Tangle的不断发展,越来越多的参与者都将发起交易,整个系统也会变得越来越安全和快速,确认时间会缩短,交易也完成的越来越快。


在Tangle这个由交易组成的有向无环图里,一个网络节点要发起一笔新的交易时,需要在Tangle中找2笔其他交易去验证,并且将自己新发起的交易指向这两笔交易,整个Tangle就是这样一点一点扩大出去的。正因为这样的设计,整个网络中验证交易的责任从传统的矿工转移到了每个网络的使用者身上——你想要发起一笔交易,就必须帮着一起验证网络中的其他交易。


上图这个例子是截取了Tangle中的一部分(Tangle扩展的方向是从左到右,越往右的交易越新),交易A指向交易B和D,那么A就是直接验证了B和D(A directly verified B and D);A虽然没有直接指向F,但是A到F之间有一条通路(path),那么我们可以说A间接验证了F(A indirectly verified F)。上图中A和C称为2个tip,tip是指还没有任何其他交易直接或者间接指向他们。

一个网络节点发起一笔新的交易时,除了需要找Tangle里2笔其他交易去验证之外,还需要做一个POW计算。这个POW计算比比特币的POW计算要简单很多,一台普通电脑可能只需要5-10分钟就能完成计算。IOTA设计POW这一步是为了防止有人恶意发很多transaction从而阻塞整个网络,或者更进一步通过更改整个DAG的形状而达成一些攻击。上图中,每个表示交易的小方块里右下角的数字被称为权重(weight),这个weight是和POW所付出的计算量相关的,举个例子,假如有2笔交易,他们通过POW算出来的二进制值分别为x和y,x的开头是2个0,y的开头是4个0,那得到y所需要的计算量一定是大于x的,所以交易y的weight会比交易x的weight大。在IOTA里,weight的取值范围是3^n,也就是weight的取值只可能是1,3,9,27…

方块里左上角的数字被称为累积权重(cumulative weight),这个cumulative weight等于这个交易自己的weight 加上所有直接或间接指向它的交易的weight的总和。比如交易F,直接或间接指向F的有A,B,C,E,所以F的Cumulative Weight = 1+3+1+1+3=9.

除了weight和cumulative weight,每个交易还有一个分数(score),这个score等于这个交易自己的weight加上所有这个交易直接或者间接验证了的交易的weight的总和,举个例子,假如只看上图的话,E直接或间接的指向了除了A,B,C,D之外的所有交易,所以E的score=1+3+1+1+1=7。

这里可以看出cumulative weight是一个可变值,从发出交易之后这个值会一直增加,score是一个不可变的值,交易发出之后,它的score就定了。这个cumulative weight和score能用来干什么呢?且看下面继续分析。

假如我要发起一个交易,我要怎么选2个交易去验证呢?理论上你可以随便选。你可以随机选择网络中的2个交易,或者你也可以永远只选几个很老的交易(在Tangle中处于很左边的位置的交易)。但是一个健康的Tangle应该是不断有人发起新的交易形成新的tips,这些tips也应该尽快被之后来的交易所验证。所以选择2个交易时,我们更应该倾向选择tips。

那一笔交易要怎么才能算成功确认呢?这里要介绍一个非常重要的概念,叫做Finality(最终确认性)。如果我们说某一个交易或者转账在某一个分布式的账本上被“最终确认”,那么这个交易无论发生什么,也无法被回滚和撤销。

大家可能觉得,不对啊,区块链的一个基本特性不就是“历史不可更改”么?

如果我们假设比特币不会出现51%攻击,那么随着区块链的增长,你的交易被逆转的可能性是越来越低。你对这个交易被确认的“信心”也越来越高。IOTA里呢,这个“信心”是可能变高也可能变低的。IOTA里交易的确认是这样一个“信心值”,这个信心值=当前所有tips中,有多少tips存在一条能连通到你的交易的路径,或者换句话说,当前有多少tips间接确认了你的交易。假设当前一共有100个tips,其中有90个tips间接确认了你的交易,那你的这条交易就是90%确认。如果我能造出100个新的tips使得这100个tips都不间接确认你的交易,那么现在你的交易就变成只有45%确认了。相信你看到这儿不难看出,一个交易要想得到一个足够高的确认信心,那需要等待的时间也不短。如果每个交易都想要超过50%的确认信心的话,那网络中交易的吞吐量并没有实质性比比特币这些传统的区块链提高到哪里去。IOTA更灵活的地方是体现在交易的延迟上,因为如果你选择只要10%的确认信心的话,一笔交易被对方接受的速度会快很多。


IOTA共识机制创新

区块链共识是通过一个非常严格的机制完成的,区块链中添加下一个区块需要多方进行竞争,并获取区块奖励或交易手续费。正因如此,共识和交易生成是分离开的,并且由网络的一小部分人来完成,通常会设置较高门槛(就像比特币一样),这样会导致进一步的中心化。

在IOTA系统中,网络中的每位参与者都能进行交易并且积极参与共识。更具体点说,你直接定位了两笔交易(主交易和分支交易),且间接在子tangle中定位其它交易。通过这种方式,验证就能同步进行,网络能够保持完全去中心化,不需要矿工传递信任,也不需要支付交易手续费。

每个点都是一个交易。IOTA 中不再有区块的概念,共识的最小单位是交易。不像比特币只有一条链,这是一个网状结构,会不断往外扩散。

DAG 结构非常适合高并发且小数据交易的 IoT 场景。

在 IOTA 里发起一笔交易,是怎么样的流程呢?答:你需要先找到网络里的两笔交易,验证它们的合法性,然后做一点小小的 PoW(就是付出一些计算),把自己的交易与它们绑定,再广播到网络。

你的交易会被后来的交易以相同的方式验证。如果验证你交易的其他交易越多,则你的交易的确定性越高。当达到一个阈值时,就认为这个交易被确定了(这和比特币 6 个区块确定交易状态的思想一致)

IOTA 把算力作为交易的一部分。只要你想加入这个网络,那必须先成为矿工,做出一点 PoW 贡献。如果想不做贡献吃白食,不好意思,我们不认可你广播的交易。由于人人都做了 PoW,因此才能做到零交易费。

那坏人故意让非法交易通过验证怎么办?网络里会充满着大量非法交易吗?IOTA 的思想是这样的,节点会计算每个交易的权重值,选择权重高的交易来进行验证,这会有助于增加自己的交易被后来交易验证的可能性。如果你绑定非法交易,那后来的交易则不会选择你的交易来验证。时间一长,这个交易就被网络抛弃了,不再是网络的一部分。

其他创新:

三元逻辑

IOTA 整个网络都用三进制来描述

Trit:类比 bit,可能的值有 1 0 -1

Tryte:类比 byte,1 个 tryte 由 3 个 trit 组成,能表示 27 个值,用 ‘a, A-Z’ 来表示这些值。

比如 IOTA 的 Seed 是 81 Tryte,Address 是 90 Tryte,都以三进制来描述。

IOTA 使用的哈希函数名为 Curl,是一个三进制算法,由 Keccak (SHA-3) 的发明者设计。Curl 被设计用于 IoT 设备,是世界上第一个三进制哈希算法。

IOTA 团队认为,三进制架构的电路功耗低,适合 IoT 设备,但他们似乎忽视了传统计算机都是基于二进制电路的。如果传统计算机要运行三进制算法,得怎么做?需要先模拟一个三进制电路,然后进行相应的计算。中间加了一层,这效率肯定下降,属于吃力不讨好。

IOTA 基金正在研发 IoT 异步三态处理器 JINN,用于集成到 IoT 设备里。可能这也是团队的商业规划之一(处理器+网络仅此一家,IoT 行业就尽在我等手中了)

抗量子

IOTA 使用的签名算法是 Winternitz one-time signature (W-OTS) ,这是一种后量子签名算法,可以抵御量子攻击。

就如同其名,W-OTS 算法是 one-time 的,即签过一次名后就不能重复使用,否则会有丢钱的风险。你可以一个地址多次打钱,但取一次钱(取钱需要签名)后就不能用了,得换新地址。

W-OTS 的一个缺点是签名长度特别大,这也是抗量子签名普遍的缺点。IOTA 的单个交易编码后有 2673 trytes(大约为 281.96 bytes),但签名占了 81%(2187 trytes)。对于 IoT 设备,这可能是一个很大的挑战。


中心化争议?

交易确认的信心值居然可以那么简单就改变,这种情况很恐怖吧?IOTA现在是怎么处理这个问题的呢?很简单,他们在客户端里写死了一个网络节点的地址,这个节点叫coordinator,coordinator是IOTA团队维护的一个闭源的component,coordinator每分钟会发一条交易,为了区别这个特殊交易和别的交易,coordinator发出的交易称为milestone。IOTA现在默认所有被milestone间接确认的交易都是100%确认的状态。因为没有人可以伪造coordinator的交易,所以这个办法是最直接,最简单的解决办法。那么问题来了,这样整个IOTA网络不就成了coordinator一个人说的算了吗?是的。。。很多币圈大佬和学者都有指出过这个问题,称IOTA完全就是一个中心化的系统。IOTA团队也反击称coordinator只是在IOTA还没有被大规模应用前的一个临时方案。他只是初期出来带一下节奏,等IOTA整体网络的负载上去之后,会移除coordinator。但关键的问题在于,如何移除coordinator?或者如何建立一个具有良性激励机制的“coordinator集团”, IOTA团队并没有给出完美的答案,社区的一种观点是, IOTA用复杂的参数和ledger维护的方法,包裹了从根本上没有解决的类似“权益证明”(POS)的问题。

IOTA对于上面的观点也做出了一些反驳,他们认为IOTA因为没有矿工和区块的概念,所以整个网络的算力可以大致等同于整个网络的交易吞吐量(Throughput),理想状态下,如果吞吐量大了,上面说的那种把交易确认信心值降低的攻击方式不会很简单,因为如果大部分交易流量都是来自诚实的好节点,都跟着规则走,那么一个attacker通过添加没用的tips来降低一个交易的确认信心会变得杯水车薪。IOTA的白皮书里提到,只要attacker不掌握1/3以上的算力,那么attack成功的概率会很低。我们来计算一下,现在IOTA整个网络的交易吞吐量还很低,大约每小时1500个交易。attacker如果能发每小时500个交易就足以可以改变Tangle的形状,attacker如果能每小时发750个交易(每5秒一个交易),那么基本上整个网络他一个人就能说的算了。5秒一个交易并不是很难达到的一个目标,所以现在IOTA放了coordinator这么一个网络秩序的维护者在里面。

推荐阅读更多精彩内容