IOTA的共识机制是建立在加权随机漫步上。透过端点选择(tip selection)的机制,tangle上加权值较大的分支加权值会越来越大,反之加权值较小的分支加权值会越来越小,小到最后就会被放弃。这个现象其实很直观的就会发现跟区块链很像,在区块链上我们会把区块接在最长的链上,而缠结就是把交易接在加权值最大的分支上。
但我们不会完全都只接在加权值最大的分支上。在随机漫步的过程中,我们是允许适度的随机性,这样可以使加权值较小的分支尔偶也能被认可(approve)到。会这样做的动机是为了让整个网络有比较高的交易率(transaction rate);若是只有加权值最大的分支被认可,这样的结果会造成所有被认可的交易只能构成一个很瘦的链,这样很瘦的链意味着,大部分的交易都会被缠接遗落,接不上缠结。可以试着用很大的α值去跑模拟,就能可视化这种状况下的纠缠型态。会发现大部分的交易是没有被确认(comfirm)的。必须记住一件事情;很小的α值代表随机漫步的时候有很大的随机性,而很大的α值代表随机漫步每一步都会很肯定地(deterministic)走到加权值最大的分支上。
不过我们在这边必须强调,交易被缠结遗落(left behind),并不代表你的钱会消失。他只代表你的交易没有被确认(comfirm),所以你需要再附加(re-attach)或者振兴(promote)这笔交易。这样的动作最后的结果通成就是造成整个网络的确认时间(confirmation time)变久。
所以α值应该要多大呢?这个问题是IOTA基金会的研究人员Bartosz Kusmierz一直在研究如何回答的。我们的目标是在一个给定的α值时,量化估计(quantitative estimate)有多少的交易被缠结遗落。透过上面的估计,我们可以得到α值的上限(upper bound),如果超过这个上限,代表说这时候缠结上被遗落的交易比率就会高的我们无法接受。
为了得到被缠结遗落的机率,Bartosz透过跑缠结的模拟,去测量在不同时间点下,有多少比例的交易有被确认到。必须注意到,交易确认率(confirmation rate)和被缠结遗落的机率是非常紧密相关的,这两个值相加要等于100%。这是因为,每笔交易不是被缠接确认就是遗落。
为了定义一笔交易是不是被确认,我们会用下面这个启发式的方法:「用非常大的α值跑一次端点选择算法。这等同于,我们的随机漫步总是走在加权值最大的分支上。最终在你到达某一个端点后,这个端点认可的所有交易都会被认为是被确认的(comfirmed),其他所有交易就是被遗落。」虽然这个定义跟我们之前提到的确认信心并不完全一样,但是在长时间运作之后,他们会收敛到几乎一样的结果。所以用这样的方法可以更简单地用是或否回答我们分析的问题。
图标如何测量被确认的交易。上图大红圈是用非常大的α值去随机漫步所得到的端点,所以其他红圈就是被确认的交易。
这是根据不同α和λ所做出交易被遗落的机率图。λ是交易率(rate of transactions),透过测量每单位时间h有多少单位的交易被发布。透过阅读这篇文章可以得知更多细节。但在本质上h就是POW所需的平均时间。假设POW需要花一分钟(实际上可能更多或更少),在这种状况下λ就是每分钟有多少笔交易。
结果没有让人特别意外,α越高会造成交易被遗落的机率越高,并造成比较低的交易确认率(confirmation rate)。但会发现很有趣的是,交易率(λ,rate of transactions)会动态的影响交易确认率。如果交易率λ变高α必须变低,这样才能维持交易确认率在一个定值。
这是一个十分有用的结果,因为这个结果提供了一个测量合理α值大小的方法,并且确保在给定的交易率下,现在的α会不会大超过合理的范围(上面有提到,这个方法是测量α的上限)。比如说,如果我们要得到至少80%的交易确认率,α的大小需要根据上图的紫色部分去设定,或者低于紫色的部分。
一旦我们给出了α的上限,那么很自然的,我们就会问说:「要如何求得α的下限呢?」通常来说,越低的α会造成整个IOTA网络更容易遭受双花攻击,或者有懒惰节点的行为。为了了解下限为何,我们还需要对于攻击和一些错误行为作出更多研究才行。只要整个社群有得到一个确切的答案我们就会尽快地与大家分享。