IOTA
IOTA 简介
IOTA 是下一代(第三代)加密货币,只做货币,不做其他用途的链(?)。专注于解决机器与机器(M2M)之间的交易问题。通过实现机器与机器间无交易费的支付来构建未来机器经济(machine economy)的蓝图,即物联网 + 数字货币的经济生态。物联网天然就有分布式特性,很适合搞区块链。
德国团队创立,由德国政府资助的一个中心化的研究去中心化下一代加密货币的项目。团队成员的上一个作品是第一代 POS 货币未来币(NXT)。
IOTA 的发行量极大,IOTA总供应量为(3 ^ 33-1)/ 2 或2,779,530,283,277,761个。所有IOTA都是在初始块创建的,总数不变,也不用开采。IOTA初上市的时候只募集到五十万美金,所以早期投资者的投资回报极高。有意思的是,因为 IOTA 基金会是非盈利组织,他们甚至没有锁定货币,所以他们持有的百分之五的 IOTA 代币,还是其他投资者捐献给基金会用以维持基金会运行的。
IOTA 的优势是,免手续费且使用平行验证而提高了性能,胜过了手续费高而清算速度缓慢的比特币。但因为它的安全模型弱于比特币,所以没有在普通交易场景下与比特币竞争,只在物联网小额支付领域(nanopayment 买咖啡、交停车费)领域发力。
IOTA 使用 Tangle(缠节)支付。Blockchain 可以被看做一个环环相扣的链表的话,TANGLE则可以看做一个有向无环图(DAG Directed Acyclic Graph)。每发起一笔交易,都要替前面两笔交易做验证,这保证了网络中的所有交易是所有使用交易的人而不是底层矿工相互验证的,这种互助行为消除了手续费。用户在发起交易之前要做工作量证明(PoW),这就避免了大量的垃圾交易阻塞网络。
IOTA 能够抗量子计算机破解。IOTA 使用的签名算法是 Winternitz one-time signature (W-OTS) ,这是一种后量子签名算法,可以抵御量子攻击,在很早就被提出。就如同其名,W-OTS 算法是 one-time,即签过一次名后就不能重复使用,否则会有丢钱的风险。你可以一个地址多次打钱打钱,但取一次钱(取钱需要签名)后就不能用了,得换新地址。W-OTS 的一个缺点是签名长度特别大,这也是抗量子签名普遍的缺点。IOTA 的单个交易编码后有 2673 trytes(大约为 281.96 bytes),但签名占了 81%(2187 trytes)。对于 IoT 设备,这可能是一个很大的挑战。
安全风波
密码学界有一句话:“永远不要自己写加密函数(never roll your own crypto)” 。但 IOTA 的研发团队实现了一个很蹩脚的散列函数,被 MIT 的密码学教授 Neha Narula 发现可以被碰撞,进而实现伪造用户签名,瓦解 IOTA 的安全性。IOTA 团队迅速修复了这一漏洞。
IOTA 的数据编码是三进制编码,可能是为了他们的 JINN CPU 准备的。
Tangle 细节
如图所示,每一笔新的交易,都要试图替前面的交易做验证(validation),然后才能被添加到图里。如果区块链是从低往高不断添砖加瓦地发展的单链表话,图则是不断添砖加瓦的多链表。
绿色代表已经被确认的交易。
红色代表还没有被完全确认的交易。
灰色代表没有被确认的交易。(Tips)
1.Signing
节点 (Computer/Mobile) 创建交易并用自己的私钥 (Private Key) 对交易进行签名。
2.Tip Selection
节点在创建新的交易时通过使用 RWMC (Random Walk Monte Carlo) 算法选出2个未被确认的Tips。
3.POW (Proof of Work)
节点首先检查被选中的两个Tips是否存在冲突。然后对选中的两个Tips进行工作量证明 (POW),这里类似于比特币的Hashcash,不停地把Tips的哈希值加上nonce进行再哈希,直到得出的新哈希值的前N位都是0。
Tip 有权重(weight),等于本交易被提交进网络时的 POW 中消耗的计算量。
Tip 有累计权重(cumulative weight),等于自己的权重加上所有可以通过 path 直接或者间接指向它的 Tips 的权重的和。也就是以此 Tip 为终点的子图的加权和。
Tip 有分数(score),等于自己的权重加上这个 tip 直接或者间接验证了的 Tips 的权重的和。也就是以此 Tip 为起点的子图的加权和。
计算这些权重就要考虑到图的遍历问题了。
cumulative weight是一个可变值,从发出交易之后这个值会一直增加,score是一个不可变的值,交易发出之后,它的score就定了。这个cumulative weight和score能用来干什么呢?且看下面继续分析。
假如我要发起一个交易,我要怎么选2个交易去验证呢?理论上你可以随便选。你可以随机选择网络中的2个交易,或者你也可以永远只选几个很老的交易(在Tangle中处于很左边的位置的交易)。但是一个健康的Tangle应该是不断有人发起新的交易形成新的tips,这些tips也应该尽快被之后来的交易所验证。所以选择2个交易时,我们更应该倾向选择tips(Tips 是未确认交易的意思)。
那一笔交易要怎么才能算成功确认呢?这里要介绍一个非常重要的概念,叫做Finality(最终确认性)。如果我们说某一个交易或者转账在某一个分布式的账本上被“最终确认”,那么这个交易无论发生什么,也无法被回滚和撤销。
大家可能觉得,不对啊,区块链的一个基本特性不就是“历史不可更改”么?
如果我们假设比特币不会出现51%攻击,那么随着区块链的增长,你的交易被逆转的可能性是越来越低。你对这个交易被确认的“信心”也越来越高。IOTA里呢,这个“信心”是可能变高也可能变低的。IOTA里交易的确认是这样一个“信心值”,这个信心值=当前所有tips中,有多少tips存在一条能连通到你的交易的路径,或者换句话说,当前有多少tips间接确认了你的交易。假设当前一共有100个tips,其中有90个tips间接确认了你的交易,那你的这条交易就是90%确认。如果我能造出100个新的tips使得这100个tips都不间接确认你的交易,那么现在你的交易就变成只有45%确认了。相信你看到这儿不难看出,一个交易要想得到一个足够高的确认信心,那需要等待的时间也不短。如果每个交易都想要超过50%的确认信心的话,那网络中交易的吞吐量并没有实质性比比特币这些传统的区块链提高到哪里去。IOTA更灵活的地方是体现在交易的延迟上,因为如果你选择只要10%的确认信心的话,一笔交易被对方接受的速度会快很多。
从这段看下来,一个 Tip 的信心,可能是他自己的 cumulative weight/全网的加权和。
那坏人故意让非法交易通过验证怎么办?网络里会充满着大量非法交易吗?IOTA 的思想是这样的,节点会计算每个交易的权重值,选择权重高的交易来进行验证,这会有助于增加自己的交易被后来交易验证的可能性。如果你绑定非法交易,那后来的交易则不会选择你的交易来验证。时间一长,这个交易就被网络抛弃了,不再是网络的一部分。
这样岂不是会行程交易验证的马太效应?实际上 Random Walk 应该是个随机游走算法,一个合理的行为应该是,对于 valid 的 Tip 不看权重,而对于 invalid tip 则抛弃。久而久之,invalid tip 的权重始终不升高,也就被抛弃了。
IOTA共识机制创新
传统的区块链,交易和交易验证是分离开的。使用钱包的用户不必干矿工应该干的事情,所以普通用户要向矿工支付转账手续费,这其实就导致了网络中的验证工作注定由少数人来完成,而且会提高货币的使用门槛。但 IOTA 的共识要求每位参与者都进行交易并参与共识。更具体地说,每个交易者必须直接定位两笔交易,并且间接在 Tangle 中定位其它交易。通过这种方式免除了手续费,也完全去中心化了。IOTA 中不再有区块的概念,共识的最小单位是交易。不像比特币只有一条链,这是一个网状结构,会不断往外扩散。共识是一环套一环的话,DAG 的共识的颗粒度比区块链的共识颗粒度要小。
然而这种共识也有被攻击的可能。因为它的 PoW 难度太小,所以简单的专有硬件可以发出大量的 sub-tangle 制造账户分叉,至少也能降低被确认交易的“信心”。这就导致了 IOTA 里出现了一个折衷的设计 - cordinator。这个 coordinator 表现为一个绝不会作假的仲裁者,这是一个闭源的 component,大致的行为表现就是一个公正的 RWMC 算法使用者。它通过发出交易的方式来替别人确认交易,这个特殊的交易被称作 milestone-交易所目前通过扫描这个 milestone 交易的方式来对全网账本做一个快照,进而确认目前全网的 balance 分布状况。这个 coordinator 的出现,实质上导致了暂时的中心化,使得 IOTA 主网的 TPS 很低,可以说这个网络目前还处在婴儿期,需要很强的防护和去中心化,只能牺牲性能(Vitalik 三角定理)。
确认信息由协调器发出,如果协调器一关整个网络立即陷入瘫痪状态,目前IOTA协调器执行效率很低,网络的确认速率大约为0.2TPS,其中金额大于0的有效交易占比大约10%,也就是真实网络的确认率仅为0.02TPS(每秒钟交易数)!这就是为什么最近IOTA网络极为拥堵的原因,这完全配不上IOTA原本宣称的无限扩展能力的说法,这也是最近大量用户抱怨为什么我的IOTA充值、提现1个星期还没到账的原因。
IOTA的白皮书里提到,只要attacker不掌握1/3以上的算力,那么attack成功的概率会很低。我们来计算一下,现在IOTA整个网络的交易吞吐量还很低,大约每小时1500个交易。attacker如果能发每小时500个交易就足以可以改变Tangle的形状,attacker如果能每小时发750个交易(每5秒一个交易),那么基本上整个网络他一个人就能说的算了。5秒一个交易并不是很难达到的一个目标,所以现在IOTA放了coordinator这么一个网络秩序的维护者在里面。
本文参考了知乎上的若干文章,以及:《IOTA的技术简介》,《实力解密—IOTA物联网第一币的神话》。