最新教程:如何设置波卡验证人节点
本文来源: PolkaWorld
以下信息适用于当前处于软启动阶段的 Polkadot 网络。在软启动期间,网络在转换为 PoS (权益证明) 之前先作为 PoA (权威证明) 网络启动。你可以按照本指南设置验证节点,但验证节点的首次选举和奖励将会晚一些开启。如果要在 Kusama 上设置验证节点,请查看 Kusama 指南 [1] 。
本指南会指导你如何在 Polkadot 网络上设置验证节点。
预备知识
在实时网络上运行验证节点需要承担非常多的责任!你不仅要对自己的权益负责,而且还要对当前的提名人的权益负责。如果你因为一些操作失误被 slash,你的利益和名誉都会受到威胁。但是,运行验证节点也会有很多好处,在获得更多收益的同时,你也为去中心化网络的安全做出了贡献。
由于安全性对于成功运行验证节点至关重要,你可以查看相关信息安全验证节点 [2] 来了解构建基础结构时要考虑的因素。Web3 基金会还维护了一个安全验证人设置的参考文档 [3] ,你可以通过自己部署来使用 (点击这里 [4] 查看视频操作过程)。在你成为验证人的不断积累过程中,你可能会把这个存储库作为起点,做适当的修改和自定义。
如果你需要帮助,请在 Riot 上点击访问 Polkadot Validator Lounge [5] 。
我们团队及其他验证人会在这里提供帮助和解答,或者根据经验分享一些小提示。
我需要多少 DOTs ?
你可以在查看这里 [6] 粗略估算至少需要多少 DOT。验证节点的筛选是通过 Phragmen 算法 [7] ,要被选入验证人节点池,也就是成为验证节点,你需要一笔最小质押。这部分质押可以是你自己也可以来自提名人 [8] 。这意味着,作为最小质押,你必须拥有足够的 DOT 存款来设置 Stash 和 Controller 账户 [9] ,以及一些额外的用于交易的手续费。其余的 DOT 可能来自提名人。注意: 你为验证节点投入的任何 DOT 都有可能被 slash,这意味着不安全或者不正确的设置可能会直接导致 DOT 丢失!如果你没有信心可以成功运行一个节点,建议将 DOT 提名给受信任的验证节点。
初始设置
要求
初学者运行验证节点的最常见方法是运行在 Linux 的云服务器上。你可以选择自己喜欢的 VPS [10] 供应商, 以及任何你喜欢的操作系统来使用。本指南中我们将使用 Ubuntu 18.04 ,但其他平台的说明应该与此类似。Polkadot 中的交易权重以标准硬件为基准。建议验证节点至少运行标准硬件,以确保他们能够及时处理所有块。以下内容不是 最低要求 但如果你决定以低于此的速度运行,则可能会遇到性能问题。
标准硬件
有关硬件标准的完整详细信息,请参见这里 [11] 。-
CPU - Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -
储存 - NVMe 固态驱动器。应该合理调整大小以应对区块链增长。Polkadot 的前 6 个月,大约可以使用在 30GB - 50GB 之间,但需要每 6 个月重新评估一次。 -
内存 - 64 GB。
安装 Rust
在选择云服务提供商并设置在新服务器上后,要做的第一件事就是安装 Rust 。如果你从未安装 Rust, 则首先进行安装。该命令可以获取 Rust 最新版本并安装。
curl https://sh.rustup.rs -sSf | sh
另外,如果已经安装了 Rust,请运行以下命令确保你使用的是最新版本。
rustup update
最后,请运行此命令以安装必要的依赖项,以便编译和运行 Polkadot 节点软件。
sudo apt install make clang pkg-config libssl-dev build-essential
注意:如果你使用的是 OSX 并且安装了 Homebrew
[12]
,则可以使用下面这个同等效果的命令,而不要用上面的那个:
brew install cmake pkg-config openssl git llvm
安装和配置网络时间协议 (NTP) 客户端
NTP [13] 是一种旨在同步时间的网络协议, NTP 允许你同步网络中所有系统的时间。当前,验证人的本地时间需要保持合理的同步,因此你应该运行 NTP 或者类似的服务。你可以通过运行以下命令检查是否具有 NTP 客户端:如果你使用的是 Ubuntu 18.04 / 19.04, 则应该默认安装了 NTP 客户端
timedatectl
如果已经安装并且正在运行 NTP, 则应该看到 System clock synchronized: yes (或者类似的系统通知),如果你没有看到,可以执行以下命令并安装:
sudo apt-get install ntp
ntpd 将在安装后自动启动 。你可以查询 ntpd 以获得状态信息,以验证是否一切正常:
sudo ntpq -p
构建和安装 polkadot 二进制文件
创建和安装 polkadot 二进制文件
你将需要从 GitHub paritytech/polkadot [14] 储存库中,使用 v0.8 分支中提供的源代码来创建 polkadot 二进制文件。通常应使用最新的 0.8.x 标签。在撰写本文的时候,它是 0.8.2 ,但你应该查看 "git tag" 命令 (git tag | grep "$v\0\.8") 的输出,来检查所有潜在的 0.8 版本列表。你应该将 v0.8.2 替换为最新版本(即最新编号)。你还可以在 release [15] 标签上找到 Polkadot 最新版本。
“
注意:如果你更喜欢用 SSH 而不是 HTTPS,则可以将下面的第一行替换为 git clone [email protected]:paritytech/polkadot.git.
git clone https://github.com/paritytech/polkadot.git
cd polkadot
git tag | grep "$v\0\.8"
git checkout v0.8.2
./scripts/init.sh
cargo build --release
此步骤将花费一些时间(通常需要 10 到 40 分钟,具体取决于你的硬件)。
请注意,如果遇到编译错误,则可能必须切换到一个更近的 nightly 版本。这可以通过运行以下命令来完成:
rustup install nightly-2020-05-15
rustup override set nightly-2020-05-15
rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-15
如果你有兴趣在本地生成密钥,你可以从同一目录安装 subkey 。然后,你可以获取生成的 subkey 可执行文件,并将其传输到 air-gapped 计算机中以提高安全性。
cargo install --force --git https://github.com/paritytech/substrate subkey
同步链数据
注意: 默认情况下,验证人节点需要处于归档模式。如果你已经以非存档模式同步了链,则必须首先使用 polkadot purge-chain 删除数据库,然后确保使用 --pruning=archive 选项运行 Polkadot。
你可以通过添加以下标记,在非归档模式下运行验证节点,:-unsafe-pruning --pruning OF BLOCKS>,但是请注意,归档节点和非归档节点数据库彼此不兼容,要进行切换,并且需要清除链数据 。
你可以通过运行以下命令开始同步节点:
./target/release/polkadot --pruning=archive
如果你不想立即以验证节点模式启动。
--pruning=archive 标记是由 --validator 和 --sentry 标记编译而来,因此只有在没有这两个选项之一的情况下启动节点时,才一定需要它。如果你没有将 pruning 设置为存档节点,即使未在验证节点和哨兵模式下运行,切换时也需要重新同步数据库。
注意: 验证节点应使用 RocksDb 后端进行同步。默认情况下,这是隐藏的,但可以通过传递 --database RocksDb 标记来显示。不过之后,建议切换到使用更快,更有效的 ParityDb 选项。在数据库后端之间切换将需要重新同步。
如果要测试 ParityDB ,可以添加标记 ---database paritydb。
根据执行此操作时链的大小,此步骤可能需要几分钟到几个小时不等。
如果你想要确定需要运行多长时间,服务器日志 (从polkadot 过程打印到 STDOUT) 将告诉你节点已处理和验证的最新数据块。你可以通过 [Telemetry](https://telemetry.polkadot.io/#list/Polkadot CC1 "Telemetry") 或者 PolkadotJS 区块浏览器 [16] 将其与当前最高的块进行比较。
注意: 如果你并不持有 DOT , 则可以在软启动期结束之后再进行尝试。你仍然可以运行节点,但你需要一笔最小持有量的 DOT 才能继续,因为在软启动期间,转账是被禁用的。需要了解的是,即使对于那些拥有 DOT 的人,他们也只能表明其 意图 进行验证;在 NPoS 阶段开始之前,它们也将无法运行验证人节点。
Bond DOTs
注意: 在 Polkadot 的软启动阶段,转账功能被禁用。这意味着,如果你在这段时间内设置验证人,则可能无法按照建议的方式将 stash 和 controller 设置为两个单独的帐户。你不得不使它们成为同一帐户,这意味着你将把该帐户绑定到其自身。但是,强烈建议你尽快更换 controller。
强烈建议你将 controller 帐户和 stash 帐户设为两个单独的帐户。为此,你将创建两个帐户,并确保每个帐户至少有足够的资金来支付进行交易的费用,因为你的大部分资金都将用作抵押资金进行托管。
请确保不要将所有 DOT 余额作为保证金,因为那样会使你无法从保证金余额中支付交易费用。
接下来设置我们的验证节点,我们将执行以下操作:
-
绑定 Stash 账户中的 DOT。这些 DOT 将会用于质押以确保网络安全,并且可以被 slash。 -
然后选择 Controller,这是决定何时开始或停止验证的帐户。首先转到 Staking [17] 部分。点击 "Account Actions" 然后点击 "New stake" 按钮。
dashboard bonding
-
Stash 账户 - 选择你的 Stash 账户。在此示例中,我们将绑定 100 milliDOTs - 确保你的 Stash 账户里 至少 有这么多 DOT。当然,你可以质押更多金额。 -
Controller 账户 - 选择之前创建的 Controller 账户。该帐户还需要少量的 DOT 才能开始和停止验证。 -
Value bonded - 你希望从 Stash 账户中绑定或者质押多少 DOT。请注意,你不需要绑定该账户中的所有 DOT。并且你要知道,之后始终可以绑定 更多 DOT 。但是,从任何已经绑定的账户中 提取 都需要一个解除绑定的期限。在 Kusama 网络中,解除绑定时间为 7 天。在 Polkadot 网络中,计划解除绑定时间为 28 天。 -
Payment destination - 接收 staking 奖励的帐户。点击这里 [18] 了解更多。
几秒钟后,你应该会看到 "ExtrinsicSuccess" 消息。你应该会看到一张包含所有账户的新卡 (注意: 可能需要刷新当前界面)。右边的保证金金额对应于 Stash 账户的保证金。
设置 Session key
注意: Session key 是共识关键,那么,如果不确定节点是否具有当前的 Session key,你可以使用 setKeys 交易来使用两种可用的 RPC 方法之一来查询你的节点: hasKey [19] 检查特定密钥,或 hasSessionKeys [20] 检查完整的 session key 公钥字符串。
节点完全同步后,请按 Ctrl-C 停止该过程。在终端提示下,你现在将开始在验证人模式下运行该节点,并带有允许进行一些高级操作所需的不安全 RPC 调用的标记。
./target/release/polkadot --validator --name "name on telemetry"
你可以给验证人取一个你喜欢的名字,但是你需要了解,其他人也可以看到这个名字,并且该名字将包含在使用同一 telemetry 服务器的所有服务器的列表中。由于很多人在使用 telemetry,因此更建议你选择更独特的方法。
生成 Session Key
你需要通过签名并提交外部密钥来告知 Session Key。这就是将验证节点与 Polkadot 上的 Controller 帐户相关联的方法。方法 1: PolkadotJS-APPS
你可以通过应用 RPC 在客户端中生成 Session Key [21] 。如果执行此操作,请确保已将 PolkadotJS-Apps 资源管理器附加到验证节点。你可以在 “设置” 标签中将应用程序仪表板配置为连接到验证节点的端点。如果你连接到由 Web3 基金会的 Parity 托管的默认终结点,则将无法使用此方法,因为对此节点发出 RPC 请求将影响托管在 public node 上的本地密钥库,并且你需要确保自己与 your node 的密钥库进行交互。确保连接到节点后,设置节点 session 密钥的最简单方法是调用 author_rotateKeys RPC 请求在验证者的密钥库中创建新密钥。导航到 “工具箱” 选项卡,然后选择“ RPC调用”然后选择 author > rotateKeys() 选项,并记住保存你返回的输出以用于后续步骤。
Explorer RPC call
方法 2: CLI
如果你使用远程服务器,则在同一台机器上运行此命令更加容易(在节点运行时配置了默认的 HTTP RPC 端口时):
curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}' http://localhost:9933
输出将有十六进制编码的 "result" 字段。结果是四个公钥的串联。保存此结果以备后用。
此时你可以重新启动节点, 省略 --unsafe-rpc-expose 标记,因为不再需要它了。
提交 setKeys 交易
你需要通过签名并提交外部信息来告诉链上的 Session key。这就是将验证人与你的 Controller 帐户相关联的工具。转到 Staking > Account Actions [22] ,然后在你之前生成的绑定账户上单击 "Set Session Key" 。在字段中输入 author_rotateKeys 的输出,然后单击 "Set Session Key"。
提交这个外部信息,你现在就可以开始验证了。
验证
要验证你的节点是否在线并且已同步,跳转至 [Telemetry](https://telemetry.polkadot.io/#list/Polkadot CC1 "Telemetry") 并找到你的节点。请注意,这将显示 Polkadot 网络上的所有节点,这就是为什么选择唯一名字很重要的原因。如果一切正常,请继续并单击 "Validate" 。
Polkadot UI.
-
Payment preferences - 你可以指定将支付给你的奖励比例。其余的将在提名人之间分配。
如果转到 "Staking" 选项卡,你将看到当前在网络上运行的活跃验证人的列表。在页面顶部,它显示了可用的验证人插槽的数量,以及已发出信号表示希望成为验证人的节点的数量。你可以转到 “Waiting” 选项卡仔细检查以查看是否在此处列出了你的节点。
staking queue
验证人集在每一个新的 era 进行刷新。在下一个周期开始的时候,如果有可用插槽,并且选择了你的节点加入验证人节点池,你的节点将会成为活跃的验证节点。在此之前,它会保留在 waiting 队列中。如果没有选择你的验证节点成为验证人节点池的一部分,它将一直保留在 waiting 队列中,直到成为验证人。如果未选择特定周期的 validator set ,则无需重新启动。但是,可能需要增加质押 DOT 的数量或为验证人寻找提名人,以便加入验证人节点池。
恭喜! 如果你已按照所有这些步骤进行,并被选为验证人节点池的一员,那你已经成功开始运行 Polkadot 验证节点了!如果你需要帮助,请联系 Polkadot Validator chat [23] 。
FAQ
为什么在无对等方时我无法同步链?
zero-peer
确保启用 30333 libp2p 端口。最后 ,在网络上发现其他对等方需要花一点时间。
如何清除我的所有链上数据?
如何清除我的所有链上数据?
./target/release/polkadot purge-chainVPS 列表
-
OVH [24] -
Digital Ocean [25] -
Vultr [26] -
Linode [27] -
Contabo [28] -
Scaleway [29]
使用 Docker
如果你已经安装了 Docker ,则可以使用它来启动验证节点而无需构建二进制文件。你可以使用一个简单的单行命令来执行此操作:
$ docker run parity/polkadot:latest --validator --name "name on telemetry"
参考链接
[4]这里: https://www.youtube.com/watch?v=tTn8P6t7JYc
[5]Polkadot Validator Lounge: https://matrix.to/#/!NZrbtteFeqYKCUGQtr:matrix.parity.io?via=matrix.parity.io&via=matrix.org&via=web3.foundation
[6]这里: https://wiki.polkadot.network/docs/en/learn-faq#what-are-the-ways-to-find-out-the-minimum-stake-necessary-for-the-validators
[7]Phragmen 算法: https://wiki.polkadot.network/docs/en/learn-phragmen
[8]提名人: https://wiki.polkadot.network/docs/en/maintain-nominator
[9]账户: https://wiki.polkadot.network/docs/en/learn-keys
[10]VPS: https://wiki.polkadot.network/docs/en/maintain-guides-how-to-validate-polkadot#vps-list
[11]这里: https://github.com/paritytech/substrate/pull/5848
[12]Homebrew: https://brew.sh/
[13]NTP: https://en.wikipedia.org/wiki/Network_Time_Protocol
[14]paritytech/polkadot: https://github.com/paritytech/polkadot
[15]release: https://github.com/paritytech/polkadot/releases
[16]PolkadotJS 区块浏览器: https://polkadot.js.org/apps/#/explorer
[17]Staking: https://polkadot.js.org/apps/#/staking/actions
[18]这里: https://wiki.polkadot.network/en/latest/polkadot/learn/staking/#reward-distribution
[19]hasKey: https://polkadot.js.org/api/substrate/rpc.html#haskey-publickey-bytes-keytype-text-bool
[20]hasSessionKeys: https://polkadot.js.org/api/substrate/rpc.html#hassessionkeys-sessionkeys-bytes-bool
[21]Session Key: https://wiki.polkadot.network/en/latest/polkadot/learn/keys/#session-key
[22]Staking > Account Actions: https://polkadot.js.org/apps/#/staking/actions
[23]Polkadot Validator chat: https://matrix.to/#/!NZrbtteFeqYKCUGQtr:matrix.parity.io?via=matrix.parity.io&via=matrix.org&via=web3.foundation
[24]OVH: https://www.ovh.com.au/
[25]Digital Ocean: https://www.digitalocean.com/
[26]Vultr: https://www.vultr.com/
[27]Linode: https://www.linode.com/
[28]Contabo: https://contabo.com/
[29]Scaleway: https://www.scaleway.com/
- 欢迎学习 Substrate: https://substrate.dev/
- 关注 Substrate 进展: https://github.com/paritytech/substrate
- 关注 Polkadot 进展: https://github.com/paritytech/polkadot
翻译:PolkaWorld