简介:本文翻译自IOTA的官方博客,这是给IOTA初学者讲述纠缠技术的系列文章中的第四篇。本篇文章主要介绍:1.交易是怎么被验证的 2. 双花是什么,如何解决双花问题。(本文授权BH好文好报群摘编、转载以及相关转授权推文行为)
我们已经讨论了DAGs
、随机漫步
、以及各种tip选择方法。今天我们谈谈钱
。到了解释验证是什么意思了。
在本系列的第一篇我们提到,每一笔交易包含类似这样的信息:“Alice转了10个IOTAs给Bob”。验证者的作用就是要确保Alice原本的账户中有10个IOTAs。
你可能心生疑问:这些IOTAs从哪儿来的?这个问题的答案是,它们在第一个交易中就被创建了出来,称为创世交易
。之后再也不会创建新的IOTAs。创世交易中的IOTAs,按照一定的比例,转移到了投资者的账户中。之后,他们向别人卖掉了一些IOTAs,于是一个交易网络就被建立起来了。
回到Alice和Bob,我们看一个简单的例子。下面这个方框图代表一个交易。为了表述方便,我们把Alice和Bob的账户余额也写了下来。我们先从开始看起,Alice有10i,然后把它转给了Bob,而后,Bob就有了10i,而Alice有0i。
再后来,另外一个人Charlie,也想付款。他开始执行他的tip选择算法,结果他需要验证Alice的交易,他必须检查一下Alice是否有10i,同时Charlie必须认真对待的验证:如果他验证通过了这一笔有问题的交易,他自己的交易也将不能被验证。
为了能万无一失,Charlie必须列出所有直接或者间接被Alice验证的交易,一直追溯到创世交易。他得到一个很长的列表,类似于这样:
- 创世交易创建了15i
- 创世交易给了Bob 2i
- 创世交易给了Alice 8i
- 创世交易给了Charlie 5i
- Charlie给了Donna 3i
- Bob给了Alice 2i
这只是一个例子;如果列表最后能计算出Allice有10i而Bob有0i,就是OK的。Charlie同时要跟踪系统中所有的其他账户,确保他们的余额不会小于0
:如果有任何一个余额是负的,他的交易就是非法的。
我们看一个Alice试图超额转账给Bob的例子:
Alice付给了Bob100i
,而她原本只有10i
。Alice的这笔交易,以及未来验证了她的交易,都会被网络认为是非法的。负的余额是不允许的。
下面的情况更有趣了,我们看看验证两笔交易的情况:
Bob验证Alice的两笔交易是正确的,Alice刚好有足够的钱,并且在两次付款后,她的余额没有变成负数。
如果转出总额大于她的余额会怎样?如下图所示。在这里,Bob不能同时验证Alice的两笔交易。因为这两笔交易会使Alice的余额变成负数。如果Bob验证通过了,他就破坏了IOTA的规则,那么将没有人会验证他的新交易了。
这种情况,也被称为双重花费。因为Alice把她的钱花费了两次。注意,Alice没有破坏协议,因为每一个单独交易她都有足够的余额。也可能她不是存心想双花的,只是不小心做了两次交易。不管怎样,她都创建了两个不可调和的分支。这就给诚实的IOTA用户带来一个问题:应该支持那个分支呢?
这个问题的解决方法还是我们上篇文章中提到的有权重漫步。最终,这两个分支中,会有一支的权重大于量外一支,那个较轻权重的分支将会被丢弃。这也就是说,一个交易产生之后不能马上被确认,即使它有一些验证者,这个分支仍可能被丢弃。为了确保你的交易被验证了,你需要等待它的确信指数达到一定程度才行。这正是我们下篇文章的主题。
译者注:和往常一样,如果你对这篇文章有疑问,请留言给我,我们一起探讨。
早赞声明:为方便早赞、避免乱赞,“BH好文好报群”为点赞者、写作者牵线搭桥,实行“先审后赞、定时发表”的规则,也让作品脱颖而出、速登热门!加群微信:we01230123(天平)。