IOTA科普系列(3): IOTA地址如何工作?

教程及支持 blaise 2周前 (12-01) 1691次浏览 0个评论

对于IOTA新手来说,IOTA的地址工作原理可能让您感到困惑。 为了解除这个困惑,以下内容将涵盖您需要了解的IOTA地址的所有专业知识。

不可重复使用的地址

传统的以区块链为基础的系统,例如比特币,你的钱包地址是可以被多次重复使用的。但与之相反,IOTA的地址(在进行对外转账时)只能被使用一次。也就是说,一个IOTA地址如果只用来收账,可以使用无限次。但一旦当你使用这个地址向外转账完成后,就不应该再使用改地址了。这是因为,当你对外进行转账的时候(如果你发送的是IOTA),这个特定地址中的部分私有密钥被暴露,进而给了其他人(例如黑客)暴力破解全部密钥,进而最终获得存储在这个地址中的所有IOTA 的可能性。你通过同一个IOTA地址向外转账的次数越多,黑客就越容易暴力破解你的密钥。需要注意的是,获得一个地址的密钥不会暴露你的IOTA种子或是在你的种子(账户)中的其他地址的密钥。

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

您可以参考下图存钱罐的示意图以加深理解。

也许你现在会想“如果我向某人付款,我需要担心我IOTA账户中剩余部分的安全吗?”答案也许是,“不,钱包掌管一切,你的所有IOTA代币都是完全安全的。”

地址索引

当一个新地址被生成时,它是由一个种子和地址索引组合而成的,地址索引可以是任何一个正整数(包括“0”)。IOTA钱包通常从地址索引0开始生成地址(通过IOTA种子和地址索引0)。如果钱包发现这个地址没有被附加到缠结(Tangle)中,钱包会用这个地址作为一个新的地址。但是当它发现某个地址如果已经被连接到缠结(Tangle)中,它会跳过这个地址索引,继续生成并直到找到新的未被使用的地址为止。

附加到缠结(Tangle)”是什么意思?

转账交易的过程可以分为两个主要步骤:

  1. 对转账交易进行本地签名,这一步需要使用您的IOTA种子进行签名操作。
  2. 把准备好的转账交易数据,从缠结中选择两个尚未进行的交易,然后做POW, 这一步也被称为“附加”。

下面的比喻让人更容易理解:

第一步,就像写一封信。 你拿一张纸,在上面写一些信息,在底部签名,证明确实是你写的,放在一个信封里,然后写上收件人的地址。

第二步,为了附加上我们的“信”(转账交易),我们去缠结随机挑选两封最新的“信(转账交易)”,并在我们的“信”和参考两封“信”直接建立链接。

为什么地址要被附加到缠结(Tangle)

在钱包中生成新地址的时候,我们应该在使用之前始终将其附加到“缠结”。原因是这个钱包并没有在本地保存任何账户相关的数据,而是从缠结中获得所有必要的数据。 因此,如果一个地址还没有附加到缠结,则它可以安全地接收IOTA,但是你不一定能在你的账户中看到这个地址中的余额,因为这个钱包可能还没有把这个地址与你的账户相关联。 现在,如果我们想完全理解这个,那么它就会变得更复杂一些,所以如果你不想深入挖掘,可以跳到下一章节。

有趣的是,如果我们向尚未附加到纠缠的地址发送转账交易,那么这个地址将通过这个交易自动地被附加到缠结。但是,如果他们在接收交易时自动附加,为什么我们还需要附加这个地址到缠结中?正如我们前面介绍的,地址是从索引0开始产生的。现在当钱包在缠结中寻找相关的地址时,它将首先在索引0处寻找地址。如果它发现匹配,继续在索引1处查找地址,然后在索引2,3等处查找地址,直到找不到与当前索引号匹配的地址。我们假设地址0,1,2和3已经被附加到缠结,地址4没有被附加,但地址5中存在一些IOTA余额。当钱包找到地址4时,钱包将停止搜索相关的地址,因此不会看到地址5中的余额。为了避免这种情况,在钱包允许我们产生一个新地址之前,我们需要将已有的地址附加到缠结 。

下面这个动画演示了当我们向一个钱包转账时的工作流程。

我们一开始有174 IOTA余额,然后我们发给Bob 24 IOTA。这笔交易发生的顺序如下:

  1. 从我们钱包的第一个地址中扣除所有的174个IOTA,然后把它分为两份(150 + 24)
  2. 发送150个IOTA到我们的下一个未被使用的地址
  3. 发送另外的24个 IOTA到Bob的地址

这样一来,我们钱包的第一个地址现在就被视为已经使用过了,其余额为0,而我们钱包的余额则存放在了新地址中。同样的事情也发生在我们给Alice转账60个IOTA的过程中。

在快照之后发生了什么?

现在我们知道了IOTA钱包如何使用地址,我们也可以了解为什么在快照之后我们的余额显示为0。

当一个快照发生时,所有的转账交易将从缠结(Tangle)中删除,只留下每个地址拥有多少IOTA的记录。如果快照是在我们给Alice转账之后发生的,快照将会记录我们的地址“EJMQH…”拥有90个IOTA。然而,当钱包在下一次扫描缠结(Tangle)查找已经被使用过的地址的时候,这个转账交易将会因为快照而消失,所以,钱包不会再知道“EJMQH…”这个地址属于我们。

当快照发生后,我们需要重新生成3个地址(地址索引0,1和2),以便钱包可以从缠结(Tangle)查询并检查每个地址的余额,从而知道这90个IOTA是我们的。 所以,如果我们在快照之前创建的转账交易越多,拥有IOTA余额的地址索引就离地址索引0越远,我们也就需要在快照之后 (重新)生成更多的地址来进行查找。

原文链接

https://kb.helloiota.com/KnowledgebaseArticle50015.aspx

https://iotasupport.com/how-addresses-are-used-in-IOTA.shtml

https://forum.helloiota.com/996/IOTA-Address-Reuse-Explained-for-Laymen


IOTACHINA遵守BY-NC-SA协议 , 翻译文章仅供参考,建议用户参考原文为准!
喜欢 (8)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址