IOTA是如何完成一个钱包对钱包免费交易的

本站曾发表过一篇“深入讲解 IOTA 如何发起一笔交易”,相比本文略显难懂,可以与本篇相互参照阅读,以更好的加深理解。另外,本文原作者还发布过一篇姊妹文章“ 比特币是如何完成一笔交易的 ”,可以用来对照Tangle与区块链之间交易的区别。

1.概述

这篇文章将给大家展示IOTA钱包与钱包之间是如何转移iota资金的。 我们会首先搞明白IOTA钱包的工作原理,并了解如何实现免费交易。最后,我们来讨论一下这个交易以及它是如何存储在分布式账本(IOTA Tangle)中的。

在这个设置中使用了IOTA Testnet,并为IOTA Testnet的访问设置IOTA Light Wallet。节点控制台(node console)用于访问IOTA API以便更深入的了解细节。

2.设置

在这个场景中我们使用两台电脑,每台电脑都安装一个IOTA Light Wallet。每个钱包用一个不同的种子登录,我们将它们指定为钱包A和钱包B。

注意,在IOTA中,address是由种子决定的。

IOTA是如何完成一个钱包对钱包免费交易的

3.资金转移

3.1资金转移之前

我们设置钱包A上有资金 1000 iota,钱包B是空的(余额为0),以下是我们在两个Light Wallet中看到的内容。

IOTA是如何完成一个钱包对钱包免费交易的

如果我们在钱包A中更深入的发掘细节,我们会看到这1000 iota是如何组成的。

IOTA是如何完成一个钱包对钱包免费交易的

如上所述,每个钱包都有一个明确的address列表。为了计算iota的数量,每个钱包都要搜索分类账,并从这些address的记录中统计余额。在这里我们看到了钱包A中有4个有余额的输入(input)记录,4个address上分别有不同的余额,这4个address的余额加起来就是钱包的总余额1000 iota。

我们保持钱包B为空(余额为0)。

IOTA是如何完成一个钱包对钱包免费交易的

下图就是目前两个钱包的分别的总计金额。钱包A上有带有不同数量IOTA的4个address(A0,A1,A2,A3),4个address相加总额为1000。钱包B上只有一个address(B0),余额为0。

IOTA是如何完成一个钱包对钱包免费交易的

3.2资金转移

在钱包A上,我们输入一个钱包B的接收address(这里是上图右侧表格中的address:B0),并发送650 iota。

IOTA是如何完成一个钱包对钱包免费交易的

3.3等待交易确认

在钱包A发送金额后,我们看到资金转帐(交易)出现在两个钱包中(查看钱包中的历史),钱包A支出650 iota,钱包B收入650 iota,此交易尚待确认。由于交易尚待确认,因此钱包内显示的余额不会更新。

IOTA是如何完成一个钱包对钱包免费交易的

3.4 交易已确认

一旦此交易被确认,如交易历史中所示,余额也会更新(钱包A支出650 iota,钱包B收入650 iota)。

IOTA是如何完成一个钱包对钱包免费交易的

4. 交易细节

4.1 交易后两个钱包中的帐户数据

在钱包A中,我们现在只能看到一个“entry”(entry,我理解为是一个数组结构),除了先前的4个address外,多了一个新address,里面有350个iota。

IOTA是如何完成一个钱包对钱包免费交易的

在钱包B中,我们现在看到一个新的“entry”(钱包B之前是空的),有650个iota。

IOTA是如何完成一个钱包对钱包免费交易的

下图交易后的金额总计。

IOTA是如何完成一个钱包对钱包免费交易的

4.2 如何交易资金

正如我们之前所看到的,在交易之前,钱包A有4个输入(input),每个输入都有一个address和一个余额。很明显,在此次交易中,所有4个输入都被花费掉了(资金设置为0),并且剩下的350个iota被转移到一个新的“entry”中。这就是IOTA如何处理交易的。

我们首先看一下钱包A中的bundle细节(与钱包B中的相同)。点击历史中的 Show bundle 链接。

IOTA是如何完成一个钱包对钱包免费交易的

现在我们对发生的事情有了一个清晰的了解。

  • 一个650 iota的“entry”到(钱包B的)address B0。
  • 4个“entry”变为负值,即表示花费掉了。 我们从100,200等开始,它需要所有4个“entry”来提供650 iota。我们可以验证上面钱包A上的address。
  • 在每个负值“entry”下面都另外增加了一个0值“entry”,这是签名部分。 我们可以在细节上忽略它们,它们可以被认为是负值“entry”的“一部分”。
  • 最后,我们看到一个新的“entry”上有350 iota。这是钱包A中的新address。这是向钱包B支付650 iota后剩余下的那350 iota。
  • 所以这个bundle是平衡的,即正值和负值是相等的。
  • 更重要的是,这笔交易没有交易费用,IOTA的方法(称为DAG)可以实现小金额的交易。如果我们熟悉基于区块链的分布式账本技术,比如比特币,如果你转移小额资金,可能手续费都要比转移的金额本身要高。

4.3 了解bundle的内部

我们可以在bundle中获取更多的细节,探索每个“entry”。在这个bundle中,总共有10个“entry”。在IOTA中,“entry”的术语是“交易”,我觉得这有点困惑,因为我们可以把转账看作是“交易”。下面我将继续使用“bundle”进行资金转移,“entry”显示每个bundle的内部。

注意当前索引(currentIndex),显示的是“entry”的索引。请注意,索引0(#0)是bundle的尾部,索引9(#9)是bundle的头部。 在这个bundle中共有10个“entry”(从#0到#9)

下图是“entry”#0。

IOTA是如何完成一个钱包对钱包免费交易的

在这里我们从output中看到:

  • 这个“entry”的散列 (HIIFXH ...)也是这个bundle的散列。
  • address和value与我们在bundle屏幕截图中看到的一致(章节4.2的配图的第一个“entry”)。
  • signatureMessageFragment具有不同的含义。 对于不带消息(message)的正值 ,它全部是9,意思是空的。

下图是“entry”#1。

IOTA是如何完成一个钱包对钱包免费交易的

从“entry”的output看到:

  • address和value与我们在bundle截图中看到的一致(章节4.2的配图的第二个“entry”)。
  • 对于负值,signatureMessageFragment是签名的存储位置。签名是钱包如何花费这笔钱。除非提供正确且经过验证的签名,否则无人可以使用这笔钱(100 iota)。在我们的案例中,只有钱包A可以创建此签名。
  • 请注意,这只是签名的第一部分。 见下面的“entry”#2。

下图是“entry”#2。

IOTA是如何完成一个钱包对钱包免费交易的

从“entry”的output看到:

  • address和value与我们在bundle截图中看到的一致(章节4.2的配图的第三个“entry”)。具体来说,address与“entry”#1的相同,并且该值为0。
  • 对于0值, signatureMessageFragment是先前“entry”(#1)的签名的其余部分。合并的signatureMessageFragment是使用此金额(100 iota)的完整签名。

其他“entry”遵循与前三个类似的逻辑,也就是说,

  • (#1,#2)类似于(#3,#4),(#5,#6),(#7,#8)
  • #9类似于#0

4.4 bundle保留在哪里?

在这里,我们谈谈IOTA中使用的数据结构Tangle。它是一种有向无环图(DAG)方法,不同于常见的区块链实现(比如比特币)。每个bundle(一个正方形)在附加到“tangle”之前需要批准另外两个未批准的bundle(称为Tips)。而这个bundle后来也会以同样的方式被其他新的bundle批准,这就是tangle如何增长的。

下面一个Tangle的图示。

IOTA是如何完成一个钱包对钱包免费交易的

来源:IOTA白皮书

灰色方块代表未经批准的bundle(Tip)。

如果我们看看bundle的头部,即最后一个“entry”(#9),我们在这里看到两个项目: trunkTransaction(KLVRDC ...)和branchTransaction(NEYTTF ...)。他们是这个bundle批准的 其它两个tips。

IOTA是如何完成一个钱包对钱包免费交易的

至于bundleTransaction和branchTransaction是如何指向bundle的,我们就不详细讨论,下图是我的bundle在Tangle内的位置。

IOTA是如何完成一个钱包对钱包免费交易的

5、 总结

我们已经探讨了在IOTA的钱包之间资金的转移方式,以及这种转移背后发生了什么。我们还讨论了一些非常基本的交易组合结构,以及它是如何在tangle中定位的。其间跳过了一些细节,但是这应该足以使您了解IOTA的更多信息。

 

原文链接:https://medium.com/@kctheservant/how-fund-transfer-is-done-in-iota-3acdb66a17ca

inhuman

专栏作者:inhuman

个人简介:我共发表了 113 篇文章,总计被阅读了57,831 次,共获得了 951 个赞。

作者邮箱 作者主页 Ta的文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注