开发者问题

开发者问题

内容提要:

  1. 我在哪里可以下载客户端?
  2. 我可以运行一个私有的缠结网络吗?
  3. 我在哪里可以找到邻居以运行全节点?
  4. 运行全节点的系统要求是什么?
  5. IOTA中的种子和私钥有什么区别?
  6. 什么是交易包?

我在哪里可以下载客户端?
在撰写本文时,IOTA有一个用Java编写的实现版本,以及所有的安装说明存储在此链接:https://github.com/iCargetger/iri C++和Rust版本目前正在开发中。

我可以运行一个私有的缠结网络吗?

在撰写本文时,暂时没有办法运行私有缠结网络,但是,IOTA基金会目前正在搭建一套包含一系列工具的框架,将使您可以运行自己的私有缠结网络。目前,您可以使用Mainnet和Testnet,它们应该非常适合您所需要的任何测试。

我在哪里可以找到邻居以运行全节点?

您可以在我们的社区Discord聊天室中寻找邻居节点。

运行全节点的系统要求是什么?

  • 4GB以上的内存
  • 8GB以上的存储空间
  • Java 1.8.0_151或更高的版本
  • 对于Windows用户,请从此处下载并安装最新版的Visual C++ redistributable。

IOTA中的种子和私钥有什么区别?
通常在不对称加密的情况下,有一个独一无二可公开传播的地址,以及只有所有者才知道的私钥。在已知私钥的情况下,公开地址(公钥)可以通过散列函数(即安全散列函数,sha256函数)进行简单明确的生成,但是在已知公开地址(公钥)的情况下,没有可能得出私钥。(即没有sha256函数的反函数)。

简单明确可得出的结果:

sha256(私钥) = 公开地址(公钥)

不可能得出的结果:

inverseSha256(公开地址(公钥)) = 私钥

散列函数具有总是得到相同长度输出结果的特征,在sha256函数的情况下是256位。因为散列函数的输入和输出之间没有明显的相关性(即它看起来完全是随机的,尽管事实上它是完全确定的),这意味着为了猜出已知公共地址(公钥)的私钥 ,平均需要猜测2^256次,这个数字大概相当于宇宙中所有氢原子的数量。为了对该数字建立更直观的印象,可以观看3Blue1Brown制作的视频

在IOTA中,因为使用了Lamport一次性签名方案的变化形式,所以其工作原理有所不同。取而代之的是使用独一无二需要保密的种子,与一个索引(包括零的任何正整数)相结合,确定一个独有的秘密私钥,继而生成一个可以广泛传播且独有的公共地址(公钥)。这就生成了与同一种子相关的一系列私钥和公共地址(公钥)。而这一系列私钥和公共地址组成一个IOTA钱包。IOTA中使用的哈希函数称为Curl。

  • Index 0: Curl(secret seed + 0) = Private Key 0 → Curl(Private Key 0) = Public Address 0
  • Index 1: Curl(secret seed + 1) = Private Key 1 → Curl(Private Key 1) = Public Address 1
  • Index 2: Curl(secret seed + 2) = Private Key 2 → Curl(Private Key 2) = Public Address 2
  • Index 3: Curl(secret seed + 3) = Private Key 3 → Curl(Private Key 3) = Public Address 3
  • .... and so on.

使用Tangle中的公共地址(公钥)发送IOTA通证时,私钥用于对消息进行数字签名,以证明该地址上的通证所有权,但签名的过程会泄露部分私钥(平均大约50%)。 因此,一旦用与公共地址(公钥)相关联的私钥对消息进行数字签名后,则该公共地址就不能再用于任何其他目的。当从地址发送IOTA时,通过增加索引并将地址上剩余的IOTA通证发送到钱包中的下一个公共地址,所有余额都自动转移到下一个公共地址。

开发者问题

有关IOTA签名方案的更多信息,请参见如何使用地址。有关如何购买和保护IOTA的更多信息,请参阅购买并保护IOTA。

什么是交易包?
交易包的必要性与上一个问题中描述的一次性签名方案有关。由于账户地址无法安全地签署多个交易,因此必须清空每笔交易地址中的余额,即将余额存入钱包中的不同地址中。一旦两笔交易被选定验证,它们将被捆绑到交易包中,分别称为trunkTransaction和branchTransaction。为了使交易包被认为是有效的,包中输入和输出的总和必须为零。假设Alice有100个IOTA并且想要发送给Bob 10个,典型的交易包如下所示(关于符号注释:包中的交易从0到N被索引出. Tx(M,N)表示包中交易M的N):

Tx(3,3):从Alice的地址A中减去100个IOTA;验证指向两笔外部交易,branch tip和trunk tip.
Tx(2,3):增加10个IOTA到Bob的地址B; trunkTransaction指向Tx(3,3),branchTransaction指向外部trunk tip。
Tx(1,3):增加10个IOTA到Alice的新地址A; trunkTransaction指向Tx(2,3),branchTransaction指向外部trunk tip。
Tx(0,3):交易包具有签署附加到支付元数据的有用属性,这可以在交易包中提供附加的零值交易。Tx(0,3)只包含这样的元数据; trunkTransaction指向Tx(2,3),branchTransaction指向外部trunk tip。

开发者问题

注:本文参考了IOTA官方网站相关内容。