IOTA私有缠结网络搭建教程

6 个月前 · IOTA埃欧塔
本文是官方Compass文档的翻译,在整理形成Doc的完整中文版之前,先在此发布。

Compass概述

Compass是IOTA网络协调器(COO)的开源实现。 它用于确保它所连接的Tangle在均一的方向上增长,并防止初始阶段的Tangle易受的各种攻击。

去除Compass


目前正在进行大量研究,以便为协调器提供可行的替代方案。 发布Compass,协调器COO的开源版本,以便进一步推动这项研究。

代码库


直接跳转到Github上的Compass源代码

发布


有关版本,请参阅Github页面

Compass快速安装

在本指南中,我们将设置一个最小的私有缠结网络,其中包含一个IRI节点和一个发布里程碑的Compass协调器。 完成本教程后,您应该能够使用自己喜欢的IOTA工具和相关API库与你搭建的私有缠结进行交互。

需求


对于此基本设置,我们将在同一服务器/虚拟机上安装IRI节点和Compass协调器。 以下就是您所需要的:
- 新安装的Ubuntu 18.04服务器/虚拟机
- 至少8GB RAM
- 最好是4个以上的CPU内核,内核越多,Merkle树生成的速度就越快
- 至少10GB SSD

设置依赖项


Compass使用Bazel构建和Docker来运行,因此我们需要确保两者都已经安装。 首先,我们安装Bazel安装所需的依赖项:

sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python


接下来,我们获取Bazel的最新安装程序:

wget https://github.com/bazelbuild/bazel/releases/download/0.18.0/bazel-0.18.0-installer-linux-x86_64.sh

接下来,我们需要确保在实际运行之前执行此脚本:

chmod +x bazel-0.18.0-installer-linux-x86_64.sh

执行此操作后,我们可以安装Bazel,我们将使用--user 参数以便在您当前活动的用户下安装它:

./bazel-0.18.0-installer-linux-x86_64.sh --user

现在已经完成Bazel的安装,下面我们需要安装Docker:

sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
sudo apt install docker-ce

在安装Docker之后,我们需要确保我们有一个名为jq的工具,这个工具可以在Ubuntu Universe存储库中找到,所以我们先添加它:

sudo add-apt-repository universe
sudo apt install jq

以上就是我们开始所需要的一切。

计算里程碑Merkle树


在我们开始协调器设置之前,我们需要生成一个Merkle树。 此树将确保Compass引用的每个里程碑都返回到缠结中每个IRI实例已知的协调器的固定地址(在此示例中只是一个节点)。 这样,只有具有正确种子的Compass协调器才能为此缠结发出有效的里程碑。 Compass存储库包含一个生成此Merkle树的简单工具。

首先,我们需要克隆Compass的GitHub代码库:

git clone https://github.com/iotaledger/compass.git
cd compass

接下来我们需要构建将为我们生成Merkle树的layers_calculator工具:

bazel run //docker:layers_calculator


接下来我们需要考虑Merkle树的深度。为了使用树,我们需要首先为这棵树计算所有可能的分支,“越深”我们将拥有越多的分支。您可以发布的里程碑数量基于2^depth的简单公式,因此深度16,即2^16,最多可达65536个里程碑,如果您每分钟发出一个里程碑,您可以在用完里程碑之前运行2分钟,因此深度需要足够高,以便完成您的测试。另一方面,深度越高,生成树所花费的时间越长。为了我们的演示目的,我们将使用16的深度,这允许我们以1分钟的里程碑间隔连续45天运行Compass。为此计算树不会花费太长时间。为了进行比较:深度为24将允许您运行Compass超过31年,但生成该树需要大量的CPU时间。如果您不想等待15-30分钟生成树,您也可以选择深度为8,这只需要几秒钟即可完成,但在您用完里程碑之前您只能运行协调器几个小时。

首先,我们需要为协调器生成一个新种子,我们使用以下命令执行此操作:
cat /dev/urandom |LC_ALL=C tr -dc 'A-Z9' | fold -w 81 | head -n 1 

复制此命令的结果,我们稍后将其添加到我们的配置文件中。

Compass存储库附带了一组脚本,使我们可以更轻松地启动和运行此设置。 让我们来看看:
cd docs/private_tangle

在这个文件夹中有一个示例配置文件,在我们编辑之前复制它:

cp config.example.json config.json

用您喜欢的编辑器打开config.json文件,并用您生成的种子替换其中的种子。

nano config.json

您应该将深度参数替换为您要为其生成Merkle树的深度(在我们的示例中,我们将其更改为16)。 完成的config.json应如下所示:

{
  "seed": "MYSEEDHEREPLEASEREPLACEMEIMMEDIATELYWITHSOMETHINGSECURE99999999999999999999999999",
  "powMode": "CURLP81",
  "sigMode": "CURLP27",
  "security": 1,
  "depth": 16,
  "milestoneStart": 0,
  "mwm": 9,
  "tick": 60000,
  "host": "http://localhost:14265"
}

我们需要确保Docker知道layers_calculator ,让我们先运行它:

sudo ../../bazel-bin/docker/layers_calculator

现在我们准备生成我们的Merkle树,为此我们在docs / private_tangle中执行脚本:

sudo ./01_calculate_layers.sh

这个过程需要一段时间(使用4核虚拟机需要大约15分钟,深度为16),完成后它应该告诉你树的根是什么:

[main] INFO org.iota.compass.LayersCalculator - Calculating 65536 addresses.
...
[main] INFO org.iota.compass.LayersCalculator - Successfully wrote Merkle Tree with root: JMRTYHMGNZGNOLPSSBVLWRPMGIAMOXPLURNDIBKXIFTCJCLOYKH9FMVNKPBVFVMGSUFEYVUUIEARFQXAK

此脚本将您的树存储在数据目录中,以便Compass在运行它后将使用它。

运行IRI


现在我们需要第一个IRI节点才能打开Compass,这是一个非常简单的过程,我们有一个脚本,同时考虑我们生成的Merkle树根。 此脚本实际上使用默认的IRI Docker容器和一些其他参数。 我们的IRI节点使用快照文件来设置缠结的初始状态,在此我们为简单起见,我们把IOTA的所有供应量2.7Pi放入到种子为'SEED99999999999999999999999999999999999999999999999999999999999999999999999999999'所对应的第一个地址中,这个地址是FJHSSHBZTAKQNDTIKJYCZBOZDGSZANCZSWCNWUOCZXFADNOQSYAHEJPXRLOVPNOQFQXXGEGVDGICLMOXX(不包括地址校验和)。 用您喜欢的编辑器打开新文件snapshot.txt:

nano snapshot.txt

并添加以下行:

FJHSSHBZTAKQNDTIKJYCZBOZDGSZANCZSWCNWUOCZXFADNOQSYAHEJPXRLOVPNOQFQXXGEGVDGICLMOXX;2779530283277761

请不要超过这个最大供应量,如果你那样做的话可能不起作用,分配较少的量应该没有问题。

这就是我们现在需要做的全部,让我们开启IRI吧!
sudo ./02_run_iri.sh

sudo ./02_run_iri.shsudo ./02_run_iri.shsudo ./02_run_iri.shsudo ./02_run_iri.sh如果一切顺利,你应该看到IRI现在已经启动。 您可以在控制台中使用CTRL + C返回到shell会话,IRI将继续在后台运行。

运行Compass


在我们生成Merkle树并安装IRI后,我们终于可以启动我们的协调器了。 但我们需要首先使用bazel来构建它。 返回到Compass目录并运行bazel:

cd ~/compass/
bazel run //docker:coordinator

cd ~/compass/
bazel run //docker:coordinator
接下来我们需要第一次运行Docker容器:

sudo ../../bazel-bin/docker/coordinator

现在我们准备好运行协调器了:

sudo ./03_run_coordinator.sh -bootstrap -broadcast

日志应该告诉你它正在发布里程碑,太好了! 我们现在已成功搭建一个完整功能可用的私有缠结! 请注意,如果您计算的里程碑用完了,协调器将停止工作,因此不要使用太低的深度,否则您可能需要尽快重新开始。

测试您的网络


您应该能够使用您喜欢的软件,这可以是钱包或客户端库,通过端口14265连接到您的IRI节点了。 一旦连接到您的节点并输入种子,您应该能够看到分配的完整2.7Pi(您可能必须手动附加第一个地址,具体取决于您使用的客户端库/钱包)。 随意发送测试交易,可以看到协调器确认工作了。


IOTA

重新定义信任、价值和所有权