区块链 · 2019年1月30日 0

IOTA-Tangle简介

简述

IOTA的共识基于weighted random walk,即MCMC(Markov Chain Monte Carlo technique)。
Tangle使用的TAG形式的数据结构,使用MCMC算法将大分支变大,小分支变小,直到它们被抛弃。
与区块链非常相似:区块链建立在最长的链上,Tangle建立在最重的分支上。

Tangle生成工具:

https://public-qnbiiqwyqj.now.sh/
https://public-rdsdavdrpd.now.sh/
https://public-krwdbaytsx.now.sh/

一图看懂Tangle

  1. 一个方块代表了一笔交易,有且仅包含一笔;
  2. 方块中左下角数字表示当前交易的权重,由权重算法计算得出;
  3. 左上角数字表示了累计权重,累计权重会随时变动;
  4. 箭头指向表示当前交易引用了哪个交易,理论上每个交易必须要引用之前的两个交易(创世的情况下除外)。;
  5. 白色块表示tip(末梢交易),即最新的交易;
  6. 当同时被所有最新的tips应用则认为这笔交易是完全可信的(理论上存在,实际上不存在),比如图中[A,B,C,D,E,G];
  7. 每个节点都有一个信任度,它是通过权重、时间、引用其tip的数量等条件计算所得(tangle中不存在完全可信任的交易,因为新的tip不断变化、增加,老交易的信任度也会随之变动);

详解介绍

基本概念

交易-transaction

在Tangle里,共识的最小单元为交易,一般的区块链系统最小单元为区块;也就是说每次在IOTA上发起一笔交易即会产生这样一个方块。

末梢交易-tip

即新加入网络的交易,且尚未被其他任何交易引用。

权重-weight

一个网络节点发起一笔新的交易时,除了需要找Tangle里2笔其他交易去验证之外,还需要做一个POW计算。这个POW计算比比特币的POW计算要简单很多,一台普通电脑可能只需要5-10分钟就能完成计算。IOTA设计POW这一步是为了防止有人恶意发很多transaction从而阻塞整个网络,或者更进一步通过更改整个DAG的形状而达成一些攻击。这个weight是和POW所付出的计算量相关的。在IOTA里,weight的取值范围是3^n,也就是weight的取值只可能是1,3,9,27…

权重的计算

IOTA中的PoW类似于Hashcash;MWM是PoW的难度系数,指的是所得到的hash结尾为0的个数:
简单的解释:假定MWM=4
Hash(tx data + counter) = … 9f86d659 (PoW不满足条件)
Hash(tx data + counter) = … 883f0000 (PoW满足条件)
目前IOTA主网 MWM = 14; 测试网络 MWM = 9。

累积权重-cumulative weight

计算一个交易有多少个批准者,即引用此交易的,后将所有批准者的权重累加(自身也算一个)。

代表了这笔交易的重要程度,累积权重的使用,可以避免垃圾交易以及其他类型的攻击,其基本假定是没有其他人能够在短时间内发起大量累积权重足够大且可以被网络所接受的交易。

分数-score

累积权重是后续节点的权重总和,分数则是当前交易直接或间接验证过的交易(包含自身)的权重总和。score是一个确定值,不会改变

高度

定义为自创世交易至当前这个交易的所有路径中最长的长度。

深度

定义为自这个交易到某个tip尖端的最长路径。

确认信任度-confirmation confidence

交易的确认信任度计算如下:

  1. 运行tip selection算法100次。
  2. 计算100个tips中有多少认可我们的交易,并称之为A.
  3. 我们交易的确认信任度即为“A的百分比”。

在IOTA-Tangle的模型中,实际情况不会出现100%确认交易,只会有较高的信任度。而且一笔交易的信任度会随着新的交易的进入而变化,可能会降低,也可能会增加。另外一点,个体节点的交易数据必然不是全量的,也就是说确认信任度此概念仅仅是局部的,每个个体之间同一笔交易的确认信任度是可能出现不一致,不过由于可信度高的节点都是相对老一点的,受到新数据的同步问题会小一点。

离线交易(交易分区)-offline transactions(Partitioning)

离线交易也算是IOTA一个重要特点,可以随意的让交易从网络中剥离出来或者合并回去。这种异步处理的能力在物联网的实践中尤为重要,因为我们不能保证每个节点永远在线。

weighted random walk

之前我们看到了一笔交易必须引用其他两笔交易,但是到底引用谁呢?如果没有对此限制,甚至可以引用创世交易。这样做就不需要同步新的交易,不需要与主网保持同步,这显然不符合区块链的设计目的。最终行成的网络可能就是这样,如下图:

同样的,如果只引用最新的交易也是不可取的,这和去中心化是冲突的;对于个体节点来讲最新的交易,很大可能就是自己内部的,自己完全或者大部分引用自己更不可取。我们需要不同节点之间相互背书,相互校验。

没有相互之间的引用,也就没有互相的背书,所以需要一种方法来解决新建交易该引用谁?,这个问题换一句表达方式就是说:如何将Tangle主分支扩大,小分支减弱?就如比特币需要维持一条链,是一样的性质。

weighted random walk就是为了解决这个问题诞生的一个算法。

首先就是引入了累计权重的概念,将表示当前交易的重要程度,其次引入了新参数α:交易累积权重的重要程度系数。

可以使用Tangle模拟器动态调整α、λ等参数实验不同的效果。至于该算法的确定形态官方尚未给出,只是说:确定Tangle形态的重要参数α依然在研究中,没有确切的定论。

关于weighted random walk、MCMC的详细说明可参阅:https://blog.iota.org/the-tangle-an-illustrated-introduction-f359b8b2ec80

协调者-Coordinator

在初期IOTA网络目前还未成熟,所以官方设立一个中心化的协调者,验证并确立哪些交易是合法的,然后告诉其他节点。

协调者是中心化的,而且关于协调者的细节也没有全部公开,这也引发了很大争议,因为这不是开源社区项目的常规做法,跟区块链的去中心化套路有所不同。

IOTA的创始人SergeyIvancheglo曾提到协调者角色主要是防止34%的攻击。34%的攻击是说攻击者可以拿出1/3的网络处理算力,可以制造冲突的交易。虽然从普通逻辑来说,IOTA基金会自己不会破坏自己的网络,但人们难免会说,如何保证协调者本身不会发起34%的攻击

重要提示

  • 对于一个IOTA地址,只要我们不对外进行转账操作(“向外发送”的操作),我们可以使用这个地址进行无限次的安全收账。但一旦你使用这个地址向外转账后,这个地址不应该再被使用了!

  • 请勿使用任何在线形式的种子生成工具!

  • IOTA使用哈希签名(curl)而不是椭圆曲线密码学(ECC)。哈希签名不仅仅在速度上胜过ECC,还能大大简化整个协议(签名和验证)。IOTA能够实现量子安全是因为采用了文格尼茨签名。IOTA的三进制哈希函数称为Curl(编程语言)。但机构认为此自研的签名算法尚有很多BUG。

  • IOTA总供应量为(3 ^ 33-1)/ 2 或2,779,530,283,277,761个。所有IOTA都是在初始块创建的,总数不便,也不用开采, IOTA是非通货膨胀的。

.
.
.
.
.
.
.
.
.

【本文章出自NM1024.com,转载请注明作者出处。】






>>转载请注明原文链接地址:IOTA-Tangle简介