# 物联网区块链：Tangle

By [XiaoShin](https://paragraph.com/@xiaoshin) · 2022-03-01

---

![IOTA图](https://storage.googleapis.com/papyrus_images/9de121001cd118d6fe22a21d663182c7ce25ef8970698ed2b6282d45802858d9.jpg)

IOTA图

区块链开启了分布式记账的探索之路，熟悉数据结构的小伙伴都知道，简单理解区块链就是个链表结构，那么有没有其他的数据结构也适合记账？比如说 — **图**。

![链表与图结构](https://storage.googleapis.com/papyrus_images/5ea8637fb57667e377a318d43ef8519db31e3404718682d5bbf67e3f40c8f57f.png)

链表与图结构

一、物联网 与 M2M金融
-------------

图结构记账先放一放，先从物联网说起。

物联网(IOT，Internet of things)，顾名思义，就是把物连在一起的形成网，当然使用的是网络，不是真的用线。物联网经常和5G人工智能大数据区块链卟啦卟啦...等等耳朵听出老茧的名词一起出现，但一时可能想不到和记账有啥关系，物和物也有交易吗，听起来有点刺激。

![物联网](https://storage.googleapis.com/papyrus_images/4d6b7b5803d9a689a0c04623f3f2c46690fc279c7005a4acc50ad8da22bc041f.jpg)

物联网

我们来看这样一个栗子，自动售货机大家都用过，刚开始就是个单机，客户投币买商品，售货员定期进货补货，顺便把里面的钱拿走。但毕竟咱是网络时代，不联网都不好意思叫“机器”，于是把售货机和其他机这些“物”连在一起，形成了——物联网。当然物联网可以连上TA的大哥互联网，这样可以远程查看售货机状态，有没有故障，是不是该补货了，可口和百事哪个卖的好等等，美滋滋。但是售货机状态还是要人监控，坏了打电话报修，没货了要进货还要找人搬，耗时耗力，还得花钱，能不能让监控者放开那个售货机，让TA自己来？答案是肯定的，但是机器自己没钱进货(维修)，不过区块链运用之前。

![自动售货机](https://storage.googleapis.com/papyrus_images/ff9547c78d79cab1c4b7b2fa8807542a90d68ad0ccf193286741549113950143.jpg)

自动售货机

试想一下，给售货机安排个电子钱包，售货机自动检测状态，缺货了自己买，坏了自己发信号找人修，问题都找直接关联者，关联者可以是人，也可以是物联网上另一个物，因为硬气了，毕竟电子钱包里有钱，这就是 M2M(Machine to Machine)金融。有了金融活动自然就需要记账，终于进入正题，介绍物联网的按“图”索骥记账法。

![M2M金融](https://storage.googleapis.com/papyrus_images/976de870dd8b2f7b19e2990bf32f466cf8030a4d9439fda25e9a352de12e1360.png)

M2M金融

二、IOTA 与 Tangle
---------------

这里提及的是IOTA使用的基于DAG的Tangle结构，下面逐一解释这些名词。

### 2.1 IOTA

2015年，David Sonstebo，Sergey Ivancheglo，Dominik Schiener 和 dr. Serguei Popov 共同创立了IOTA，本质是一种开放源代码 [Github](https://github.com/iotaledger) 的分布式账本。

![IOTA应用](https://storage.googleapis.com/papyrus_images/0ca0f43b2b0744305db8e612325cb9fd44ad16dcffaa75afd2b0f546f06d838f.jpg)

IOTA应用

IOTA有一个本地代币 MIOTA，但是也可以使用其他加密货币来衡量价值。IOTA主要提供物联网上各机器之间通信与交易，由于并没有利用传统区块链方式记账，没有挖矿，也就不会创造额外的加密货币，这也消除了非自愿的通胀，其使用了基于DAG(有向无环图)的技术，该技术称为Tangle(纠缠)。

![IOTA(MIOTA)币](https://storage.googleapis.com/papyrus_images/cb442eca03a6ae5038081ce5e09904619db28d1fa4bb2cc00c837293f506a07d.png)

IOTA(MIOTA)币

### 2.2 DAG

DAG(Directed Acyclic Graph，有向无环图)，就是上文提及的“图”方案记账法的基础。有向无环图，顾名思义，这是个图的结构，图节点之间的联系有方向，从任一个节点出发按照联系的方向走是走不回来的，即无法形成环。基于DAG的区块链项目很多，比如 Byteball、NANO(XRB)、ITC、TrustNote、Mixin、HashGraph和Algorand等等，而IOTA使用的Tangle结构不仅颇有代表性，还具备一定优势。

![DAG](https://storage.googleapis.com/papyrus_images/80916d0bd18891b85ae35705dba9ea9e84ae51df551270f5227f9b0acd6994ba.png)

DAG

### 2.3 Tangle

下面简单阐述Tangle(纠缠)结构怎样实现交易。

#### 2.3.1 新节点加入

Tangle是一个有向图，图结构中每个节点代表一个交易数据，别称为site, 每个site包含交易发件人，收件人，金额等信息。每个site被确认后将连接到至少2个其他的site，这些连接被称为edge，edge用来验证交易。也就是说刚加入的site并不会自动验证，由谁来验证呢，由后加入的site，即想把自己的site提交给该tangle就得验证系统随机选出的两个site作为入场券，还是比较合理的。

![](https://storage.googleapis.com/papyrus_images/14034ef8b1f059a5f7d08ece0f71fcd76b65be7ee165705e0958065a9c0c4ddb.png)

如下图所示，我们的交易site(粉色方格)想加入到该tangle中，系统算法会随机选择2个site，这两个site可称为tip(绿色方格)。如果选择的tip之一不是有效交易则忽略,然后随机选择一个新的tip。如果一切都检查正确，我们的交易site就会附加到2个tips，并要求验证tips。验证通过后我们的site将连接到tangle，并等待以完全相同的方式被新加入的site验证。

![加入交易](https://storage.googleapis.com/papyrus_images/64ed32a9baad4a0bd276960f56ba6f14e5d43cd9dab12941df3758c5ea0cab66.jpg)

加入交易

当然这里指示粗略描述加入tangle的过程，tip的选择，如何验证tip，tip未通过验证，怎样避免双花等诸多细节由于涉及专业领域并未提及，有兴趣的小伙伴可以阅读 [Tangle白皮书](https://assets.ctfassets.net/r1dr6vzfxhev/4i3OM9JTleiE8M6Y04Ii28/d58bc5bb71cebe4adc18fadea1a79037/Tangle_White_Paper_v1.4.2.pdf)。

#### 2.3.2 权重信任

区块链的核心就是群策群力的共识机制，上文也阐述了一个新交易site想加入tangle要验证两个site(tip)，但是你一人验证结果不能服众，万一验错了呢，那就大家一起来，然后把这个site被验证通过的次数累加转换作为该site的——权重。很显然，权重越大代表tangle中对该site的验证通过率越高，一般情况下也越可信。权重机制还有效解决了双重支付产生的分叉，即A发起两个site分别向B和C转账，但是A的资金只够发起一笔交易，于是确认哪笔就成了问题。在设置了权重之后，通过在Tangle游走会发现一个分支将比另一个分支权重大，而较轻权重的分支将被放弃。

![权重](https://storage.googleapis.com/papyrus_images/defa4c5717816bb7860bdf87439e35f003a19df752662c50be5b9841ac560fb9.jpg)

权重

每个site都会有初始的自权重，可以是1、3、6、9等(3的n次幂)，如下图所示，假设每个site的初始权重为1，site中心较大数字就是累计权重，一般较早的site具有较高的累积权重，因为已经被多次验证。

#### 2.3.3 不可能三角

所谓的区块链的不可能三角包括去中心化、效率和安全性。在一个区块链系统中，三个元素此消彼长，不能同时满足最高要求，好的区块链系统会在其中找到一个何时的平衡点。

![三元组](https://storage.googleapis.com/papyrus_images/beea60d907aa0b1f94044d292c8c508028b7ec8cdb0db6b43809776265496a8a.jpg)

三元组

作为一个基于DAG的记账结构，Tangle有其高效易扩展等诸多优势，这些会在下文与传统区块链对比提及，但是也有许多问题，如果只简单按照上述方案安全性上会有很大隐患。 由于DAG结构允许多重并行交易，理论上来说，如果用戶要掌握足够的散列能力(Hashing Power)就可能实现双重支付(Double Spending)和网络分支，该隐患被称为“影子链”攻击。尤其在Tangle网络初期，site的正确性有位重要，所以IOTA退而求其次，选择降低一部分去中心话的程度以弥补其安全性问题，采用了一个临时的中心化Coordinator机制。

![调节器](https://storage.googleapis.com/papyrus_images/a1813a99d0a6c4df8edbe8af63a46cd7b9445677a49c5f0d0f9b3f0604c60aca.gif)

调节器

该方案使用一个IOTA基金会控制的节点，也就是调节者(Coordinator)，其每两分钟会发出一个不包含任何价值的交易site，称之为里程碑(milestone)，所有被里程碑的交易都是被确认的，反之就是未被确认。虽然可以部分解决“影子链”的影响，但也提高了IOTA基金会的中心化优先权。

对DAG安全问题感兴趣的小伙伴可以参考 [IOTA Vulnerability: Large Weight Attack Performed in a Network](http://essay.utwente.nl/77602/1/30-TScIT_paper_28.pdf) 这篇论文。

三、Tangle VS 区块链
---------------

最后，来看看与传统区块链相比，Tangle有哪些优缺点。

![对比图](https://storage.googleapis.com/papyrus_images/0fe81c1fc55c849ecdc2f2744e4027cec5b026609ac4ef527746d92b2be9719c.png)

对比图

#### 3.1 Tangle的优势

*   **易扩展** IOTA提供了一个网络，每个新交易每秒交易量都在增加，这不仅解决了扩展问题，并且越多节点加入实际上是越多人来验证交易反而提高整体效率。理论上，对于Tangle每秒可以处理的交易数量是没有限制的。
    
*   **无矿工** 区块链通过工作量证明和权益证明，存在挖矿/验证交易，矿工只有在补偿金高于开采成本的情况下才会将其资源用于挖矿。而IOTA一般没有挖矿，用户之间互相验证交易，即实现了零手续费交易。
    
*   **效率高** 刚提及的交易速度快是效率高的一部分，另一个重要因素是数据存储。区块链往往需要整个链信息的完整复制，才能开始新的交易。比特币的存储空间呈指数级增长，并不是所有的IOT设备都可以存储处理如此大的数据，即使可以功耗也会明显增加。而Tangle比传统区块链要轻得多。创建和验证交易可以通过只访问一小部分的Tangle来完成，不需要存储整个交易链。
    

#### 3.2 Tangle(DAG)的问题

*   **安全性有待验证** 基于DAG的图记账结构存在诸多已知和未知的安全问题，包括但不仅限“影子链”攻击等。而解Tangle决其安全问题的调节方案中心化又相对严重。
    
*   **交易时长不可控** DAG本质是一种异步通讯，异步通讯最大的问题在于一致性不可控，在该模型中则表现为交易确认时间不可控。当然也出现了一些解决方案，比如XDAG采用了POW+64s固定出块的方式。
    
*   **智能合约开发难** DAG使用异步操作，使得智能合约节点间存储的数据在一段时间后可能会出现偏差，所以从实际来看，目前还没有基于DAG开发出的智能合约项目。
    

![智能合约](https://storage.googleapis.com/papyrus_images/b9f99e2aeb4ca499c45d07b0f092d3ae9c99bc46830dd2718a1a96781ccd6489.jpg)

智能合约

基于DAG结构的记账模式Tangle有其效率高易扩展的优势，在M2M等物联网领域颇具潜力。与此同时，DAG仍然存在一些缺陷和问题，并不能取代传统区块链的地位。 时至今日，区块链的概念早已不是连接区块的链那么简单，而是数字激励下的分布式 do whatever you like，早点投身其中，下一个爆款模式由你设计！

---

*Originally published on [XiaoShin](https://paragraph.com/@xiaoshin/tangle)*
