如何加入Algorand测试网络

简介

Algorand项目是由图灵奖得主、MIT教授Silvio Micali于2017年提出,旨在通过加密抽签的方法实现拜占庭共识算法的大规模扩展,结合Pure PoS共识算法,以解决区块链“不可能三角”问题。

2019年4月16日,Algorand宣布向公众开放其TestNet测试网。在拥有数百名参与者的内测时期之后,Algorand现在邀请所有企业,开发人员和用户参与测试网TestNet,并欢迎提供有关TestNet协议的质量,功能和整体体验的反馈。

和EOS,BTC,ETH不同,Algorand最大的特点是所有人都可以参与出块流程,如果幸运的话,普通人也可以获得出块奖励。

Algorand出块流程

Algorand出块流程主要分为3步,提案, 预投票, 确定投票,如果投票环境出现问题,那么网络进入恢复模式。

第一步:提案

每个节点会遍历节点上的账号,选出一个账号并且把要生成的区块广播到网络中。

第二步:预投票

节点之间会互相通信,选出最小VRF哈希值的区块。在一定时间之内,如果没有选出最小VRF哈希值的区块,网络就会出现超时问题。

第三步:确定投票

一群新的节点会开始检查第二步预投票选出的区块,这些节点会验证这个区块是否合法,如果合法则写入账本,如果不合法,网络会进入恢复模式。

恢复模式

在这个模式中的节点会发消息给网络中的其它节点,在以下两种情况中做出选择:

1. 继续上个流程中未处理完的区块

2. 重新创造一个新的区块

以上两个选择中,任意一个选择的投票数达到要求之后,网络就会恢复到正常模式继续出块。

如何运行Algorand测试网络节点

节点中各模块介绍

不同操作系统中节点程序的模块是差不多一样的,具体详情可以查看 https://developer.algorand.org/docs/node-overview

以下是各个模块的简介:

  1. goal:命令行程序,用于和algod进程、kmd进程进行交互

  2. kmd:用于管理密钥的后台进程,为了安全一般不和节点运行在一台机器上

  3. algokey:命令行程序,用于生成、导入、导出密钥,可用于交易签名

  4. algod:Algorand节点的主程序,用于处理区块以及和网络中的其它节点通信

  5. algoh:用于监控以及上传日志

  6. carpenter:一个调试工具,通过读取节点日志来显示可视化的数据

  7. update.sh, updater和 updatekey.json:用于升级以及安装节点程序

节点的类型

Algorand节点分为两种类型:中继(Relay)节点参与节点

中继节点会存储所有的日志,通常其它所有节点都会连接到中继节点上,它相当于网络中转中心。运行中继节点需要机器有比较高的性能以及较强的网络。如果你想申请运行中继节点可以在 Algorand 的 SRV 表中注册,申请流程:https://developer.algorand.org/docs/configure-your-node-relay

参与节点和中继节点不同,参与节点上会管理一个或者多个账号,每个账号都有一个参与Key。

安装节点

我们可以直接去 https://developer.algorand.org/docs/introduction-installing-node 上下载节点的运行程序到本地电脑上。

配置Telemetry

如果你顺利的在你的电脑上安装了节点,那么接下来可以配置Telemetry。

如果你完全按照上一节的教程安装节点程序的话,节点目录应该是~/node。

首先我们进入节点目录:

cd ~/node

Telemetry是一个用于收集节点运行状况和日志的程序。默认情况下,日志收集是打开的。

你也可以选择将它关闭:

./diagcfg telemetry disable

运行节点

在运行上一个步骤后,我们现在可以开始运行节点程序:

./goal node start -d data

上面有个参数是data,其实就是节点目录下的data目录。我们也可以通过设置环境变量$ALGORAND_DATA来省略这个参数。

我们可以通过下面的命令来查看节点程序是否运行正常:

pgrep algod

上面这行命令可以得到algod的进程ID,如果节点运行正常,那么上面的命令会返回一个数字。

注意:刚开始运行algod可能需要一段时间同步Algorand网络中的数据,你可以通过:

./goal node status -d data

来查看节点运行状况,或者通过:

./carpenter -d data

来可视化的查看日志。carpenter程序会一直运行,可以通过 Ctrl-C退出carpenter。

节点更新

你可以通过以下命令来查看节点是否有更新:

./update.sh -d ~/node/data

它会从AWS S3上下载最新的节点程序。

创建一个钱包

在创建账户之前,我们需要创建一个新的钱包:

./goal wallet new <wallet_name> -d data

注意将命令中的<wallet_name>替换成你的钱包的名字。

创建钱包的过程中会提示输入钱包密码,记住这个密码,后面的操作我们都会用到。

创建新账号

创建完钱包之后,我们可以新建账户了:

./goal account new -d data

我们可以通过以下命令来查看刚刚新建的账户:

./goal account list -d data

你可以看到你的账户的状态,账户名称以及账户地址。

默认的账户状态是[offline],默认名称是Unnamed-0,地址是随机生成的。

记下这个账户地址,每个账户的地址都不一样,在这里我们先假设它是6JOFHCVUJKZJJKX3T3CA6MVISWXHBVWCZXNO2PLPQVLYBMCXHPTD4KXYNM。

你可以通过

./goal account rename Unnamed-0 <new_name> -d data

来给账户设置一个好记的名字。

为账户创建参与Key(Participation Key)

接下来我们需要给账户创建一个参与Key(Participation Key),有这个Key,我们的账户才能参与出块。

./goal account addpartkey -a 6JOFHCVUJKZJJKX3T3CA6MVISWXHBVWCZXNO2PLPQVLYBMCXHPTD4KXYNM --roundFirstValid 100 --roundLastValid 3000 -d data

上面的命令中,记住将参数6JOFHCVUJKZJJKX3T3CA6MVISWXHBVWCZXNO2PLPQVLYBMCXHPTD4KXYNM替换成你自己的账户地址。

给新账号转账

接下来这步是在测试网络上给你刚创建的账户转账,我们打开网页:https://bank.testnet.algorand.network/ ,然后填入刚刚我们创建的账户地址,然后点击Dispense按钮。

转账交易发起之后网页会显示这笔转账交易的ID。例如,我点击Dispense之后,显示的是

Status: Code 200 success: "QK4TN75KN62FPF4JCGPHJ4JLM6KQDYSV2DXETCMD6JTUDZJEBXPA"

这里的QK4TN75KN62FPF4JCGPHJ4JLM6KQDYSV2DXETCMD6JTUDZJEBXPA就是我的交易ID。

我们可以去 https://algoexplorer.io/ 上查看交易信息。例如刚才我的交易信息地址是 https://algoexplorer.io/tx/QK4TN75KN62FPF4JCGPHJ4JLM6KQDYSV2DXETCMD6JTUDZJEBXPA ,显示转账已经完成并且出块。

注意:要完成这笔交易需要我们自己的节点一直运行并且同步测试网络中的出块信息,否则交易永远也无法完成。

新账户上线

你可以通过./goal account list -d data命令查看账户余额。

账户必须有一定数量的Algo代币才能上线。我们必须等待节点从测试网络同步数据,一直到上个步骤的转账交易完成,才能让账户上线。

当账户中有足够的余额时,我们可以通过:

./goal account changeonlinestatus -a 6JOFHCVUJKZJJKX3T3CA6MVISWXHBVWCZXNO2PLPQVLYBMCXHPTD4KXYNM -o true -d data

来将账户上线。

账户上线过程也是一笔交易,我们需要等待交易完成才能完成账户上线过程。

等待出块

账户上线之后,我们的节点可以参与出块,如果幸运的话,应该能领取出块奖励了。