本文是官方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
如果一切顺利,你应该看到IRI现在已经启动。 您可以在控制台中使用CTRL + C返回到shell会话,IRI将继续在后台运行。
运行Compass
在我们生成Merkle树并安装IRI后,我们终于可以启动我们的协调器了。 但我们需要首先使用bazel来构建它。 返回到Compass目录并运行bazel:
cd ~/compass/
bazel run //docker:coordinator
接下来我们需要第一次运行Docker容器:
sudo ../../bazel-bin/docker/coordinator
现在我们准备好运行协调器了:
sudo ./03_run_coordinator.sh -bootstrap -broadcast
日志应该告诉你它正在发布里程碑,太好了! 我们现在已成功搭建一个完整功能可用的私有缠结! 请注意,如果您计算的里程碑用完了,协调器将停止工作,因此不要使用太低的深度,否则您可能需要尽快重新开始。
测试您的网络
您应该能够使用您喜欢的软件,这可以是钱包或客户端库,通过端口14265连接到您的IRI节点了。 一旦连接到您的节点并输入种子,您应该能够看到分配的完整2.7Pi(您可能必须手动附加第一个地址,具体取决于您使用的客户端库/钱包)。 随意发送测试交易,可以看到协调器确认工作了。
在输入bazel run //docker:layers_calculator时,总显示错误no such package'@java_base//image' 想请教一下如何解决?
去Discord直接问官方社区的技术专家吧,他们很热情~哈哈
同样的问题,您解决了吗,求解答
看一下这个网址https://github.com/bazelbuild/rules_docker/issues/196