长文 | 如何在波卡和 Kusama 上 Staking 和验证

由波卡的开发团队 Parity 制作的最新一集播客 「RelayChain」第三集出炉啦~

「RelayChain」主要讨论区块链开发和构建去中心化网络,专注于区块链技术的最前沿,讨论的内容包括 Substrate、Polkadot 和 Web3.0 等。

在这一期节目中,Parity 解决方案架构师 Gautam Dhameja 作为客座嘉宾,对话 Parity 研究分析师 Joe Petrowski,探讨 Kusama 和波卡上的 staking、验证和提名

如果你想知道 Kusama 和波卡的 NPoS(提名权益证明)系统是如何运作的,或者你对 Staking 或验证感兴趣,那么这期的节目一定是你的菜。

以下是本期播客的中文文字稿,由 PolkaWorld “超级探员” 童境之南和 Charlie Hu 翻译。

Joe Petrowski: 欢迎来到「Relay Chain」,这是一个由 Parity 科技制作的播客,我们在这里讨论所有事情,包括 Substrate、波卡和 Web3。

Joe Petrowski: 今天在 「Relay Chain」节目里我们请到了 Gautam,他是我们 Parity 的解决方案架构师。一会儿他将要采访我,所以我将让 Gautam 从这里开始我们的播客。

Gautam Dhameja: 大家好。欢迎来到新一期的「Relay Chain」播客。我是本期的主持人。我叫 Gautam Dhameja。正如 Joe 提到的,我是 Parity 的解决方案架构师。正如你所看到和听到的,很快就会有一个波卡的候选网络出现。或者我也不确定,也许大家听到这个播客发布的时候,它可能已经出现了,它就是 Kusama。还有一些重要的问题关于我如何成为一个验证节点?在那之前我应该学什么?提前准备是什么?有哪些误解?等等。

Gautam Dhameja: 我们想和 Joe 谈谈,他实际上也在朝这个方向工作,帮助验证节点启动和运行,并已经开始这些过程。他是最好的谈话对象,因为他对这些事情了解得更多,所以我今天要在他的播客上采访 Joe。让我们深入了解如何成为一个 Polkadot 或 Kusama 验证节点。Joe,欢迎你。

Joe Petrowski: 谢谢,Gautam

Gautam Dhameja: 让我们快速理解一点,然后我们就直接进入主题。我想了解一点关于验证节点在 Kusama 和 Polkadot 环境中做什么?

Joe Petrowski: 是的,我认为我们甚至可以离开区块链一分钟,然后讨论… 因为验证节点是帮助网络达成共识。那么什么是共识呢?共识算法往往是一系列定义好的信息,使计算机网络看起来像一台计算机。无论你是如何连接到计算机网络,还是与哪台计算机交谈,如果你问一个问题,你应该总是得到相同的答案。

Joe Petrowski: 这听起来有点抽象。但是如果你想一想,在一个物理空间,如果你有一架飞机,会配置有多台电脑,因为有人的环境,往往有多余的系统。如果你问飞机里的计算机,我正在往哪个方向走?不管你问的是网络的哪一部分,你都应该得到相同的答案,因为很明显飞机只能朝一个方向飞行。因此,共识只是一种算法,它是一系列信息,说明如何让计算机网络看起来像一台计算机。这确实就是我们的目标,验证节点正在传递这些消息。

Joe Petrowski: 在 Polkadot 和 Kusama 的环境下,我们有共同工作的算法。他们叫 BABE(宝贝)和 GRANDPA(爷爷)。BABE 是为了生产块,并提出下一阶段的变化应该是什么。而 GRANDPA 则是最后一个。我想我们会在这里谈论很多关于 staking、奖励和惩罚的事情。主要要记住的是,奖励和经济部分与共识不同。共识只是定义;这些是我们希望你做的行为。我们希望您生成有效的块,我们希望您检查它们是否实际有效。我们希望你们就哪些是最终的达成一致。不好的事情可能是签署或投票给两个实际相互冲突的区块,或者提议一个无效的区块。

Joe Petrowski: 当涉及到 staking、削减和奖励时,我们真的在讨论如何回应共识定义为好或坏的信息。

Gautam Dhameja: 有趣。在这种情况下,我如果正确地理解了这一点,那么我想为我们的听众重新表述它,在 Kusama 和 Polkadot 的环境中,验证节点将做两件事。一种方法是确保当有机会生成下一个块时,对后续块或前一个块的最终确定进行投票。因此,每当需要你的意见时,你就投一个区块的票,让这个区块成为最终被确定的区块。每当你有机会的时候产生一个区块,我认为这是一种循环的方法,或者这是一个随机的方法,对吧?

Joe Petrowski: 两者都是。它有一个循环回退的随机方法,这样我们可以得到一个恒定的阻塞时间。

Gautam Dhameja: 有趣,有趣。

Joe Petrowski: 我想说,实际上还有一件事我在这里遗漏了,这是 Polkadot 特有的,因为 Polkadot 验证节点负责在平行链之间传递消息,而这在单个区块链中是不存在的。但是,当您有多个区块链时,验证节点有额外的责任,在它们之间发送消息并使这些消息可用于重建。

Gautam Dhameja: 有趣。所以在这种情况下,验证节点现在可以做三件事。一种是在被选定执行此操作时生成一个块;对需要最终确定的前一个块进行投票,然后在不同的区块链之间传递消息?

Joe Petrowski: 对。我想说,我们这里有一个细微的差别,我们不是真的在 “块” 上投票,而是在 “链” 上投票。

Gautam Dhameja: 好滴,很有趣。所以我们正在考虑用一条链的 “块” 来完成而不是一个单一的“块”?

Joe Petrowski: 是滴。

Gautam Dhameja: 太令人惊叹了。太棒了,在进行最终确定区块方面效率太高了。

Joe Petrowski: 所以你可以投票给最后一个区块前的五个区块,它会在后面的区块添加签名和投票,然后我们可以同时确定所有的区块。

Gautam Dhameja: 如果我用另一种方式来看待它,那真是太不可思议了,因为你实际上是在真正利用区块链的特性来最终确定区块链。

Joe Petrowski: 是滴。

Gautam Dhameja: 哇哦!关于是个问题,我们的同事 Ben,他在向我解释 GRANDPA 的时候向我指出了这一点,所以,是的,相当酷。现在我们知道了验证节点的作用,我们还想了解更多关于帐户、密钥和 token 的信息。因为在我们投票提名之前,有一些事情要做。你的 stake 怎么样?你是怎么控制的?你是怎么拿到这些的?你如何签名你的信息和类似的一切?为此,在我们讨论这个话题之前… 因为给节点质押投票需要调用很多函数调用和消息等。所以在那之前,我们想了解这里的 “账户” 和 “钥匙”。

Gautam Dhameja: 所以,也许你能给我们简单介绍一下这些事情。

Joe Petrowski: 是啊。Polkadot 有两种常见的账户类型,一种是 Stash 账户,另一种是 Controller 账户。预先知道这里的区别完全只是 “叫法” 上的区别。实际上它们是相同类型的密码,相同类型的密钥对,它们实际上可以是相同的帐户,尽管我们不建议这样做。区别仅仅在于你如何使用它们,或者我们希望你如何使用它们。Stash 账户通常应保持离线状态。这就像你把你的生活储蓄或者你不打算搬家的大笔钱放在那里。

Joe Petrowski: 但是,如果你是治理或提名的参与者,你希望能够提名与此相关的人。但是你不想用这把钥匙签署很多信息,因为这本质上使它容易被别人捕获。你只需要在你的 stash 账户上签一条信息,那就是一张证书。所以你拿着另一个账户的公钥,我们称之为controller,你只需要在你的 stash 账户上签一条信息,上面写着,“你知道吗,这是另一个地址的公钥。我希望这是我的 controller。” 在这个控制者帐户中,你可以投入非常少量的资金,就像刚刚足够支付转币手续费,或者我猜那将是交易费,因为不是每次交易都是需要转移币。

Joe Petrowski: 这个 controller 的密钥可以告诉系统你想做什么。它可以说,我想提名这个验证人、我想验证我自己,或者我想对这个治理提案进行投票,因为它得到了这样做的许可,所以拥有 stash 帐户的权重。但这些资金并没有真正的风险,因为你没有用一个 stash 账户签署这些信息,而是用一个 controller 账户签署它们。只有这一小部分存在风险,如果你担心你的 controller 账户的钥匙可能被其他人拿走,你可以改变它,为你的 stash 账户指定一个新的 controller 账户。

Gautam Dhameja: 好吧,我们有两个账户,一个叫做 “stash账户”,我把大部分资金都关联在这里。第二个账户是 “controller账户”,基本上更像是控制或管理操作的操作账户,或者类似于链上的功能。这些帐户是通过调用或使用 stash 帐户签署调用而关联在一起的?

Joe Petrowski: 是哦。

Gautam Dhameja: Okay,有趣。然后,这使得整个事情变得更加安全,因为一旦你有了你的 stash 账户,你就可以通过把一个 controller 账户和它联系起来,把 stash 账户放在一边,把它放在一个非常安全的地方。然后,从那时起,你的 controller 帐户是你想要处理的主要事情。

Joe Petrowski: Yeah,是对滴。

Gautam Dhameja: 好的,很有趣。现在,我们来谈谈 “会话密钥”。因为这真的很有趣。我仍然无法将转过弯来它们是什么以及它们是如何工作的。所以让我们更深入地了解它们。在此之前,请告诉我们 “会话密钥” 到底是什么。

Joe Petrowski:  “会话密钥” 起初是一个非常抽象的概念。如果在 Polkadot 中演示如何使用它们将非常有助于我们进行讨论。然而,更抽象的是——你可以在区块链中使用 Substrate 声明很多你想要的 “会话密钥”,但是在 Polkadot 中我们有四个。这些密钥,您可以声明并说,我希望它们与验证节点执行的某种消息相关联。

Joe Petrowski: 应该注意的是,这些密钥并不意味着是帐户。因此,它们不必与账户使用的密码相同。它们可能完全不同,尽管目前还没有。这些只是用于签署消息,因此它们根本不与资金关联。在 Polkadot,我们有四个这类密钥。我们有一个为 BABE 准备的、生产新区块用的。我们为 GRANDPA 准备了一个,它是确定最终节点的,我们为 “I'm online” 准备了一个,这有点像是一条帮助消息,你每隔几个小时就会告诉这个链,比如,“嘿,我来了,我应该在这里。” 然后我们有一个叫 “平行链 ID” 的东西,它帮助验证人与平行链匹配,以便他们可以找到彼此。

Gautam Dhameja: 有趣。如果我理解正确的话,我们有四个 “会话密钥”,这些“会话密钥” 的基本功能是在不同的应用环境中,显示您的身份或证明您的身份。举个例子,比如说,你想给我的 BABE 和 GRANDPA 展示你的身份,“我在不同的环境下都是经过验证的。”然后,“I am online”,比如说,我会在我的邮件上签名,表明我在线上,或者通过使用这个特殊的密钥来显示我在线上。这样,在 “I am online” 应用环境中,我将再次被识别为的验证节点。

Gautam Dhameja: 最后,你提到了一些关于平行链 ID 或者类似的东西,对吗?

Joe Petrowski: 是啊。这也有助于平行链和验证节点找到彼此,并知道他们在和谁说话。

Gautam Dhameja: 好的,很有趣。所以,再一次,基本上,这是关于身份的。所以会话密钥,我会说,它们主要用于在不同的应用环境中证明验证节点的身份。它们彼此分开,这样就可以很容易地更换、维护它们,或者更好地控制它们,因为它们有四个不同的会话密钥,您如何维护这些会话密钥?

Joe Petrowski: 是啊。一般有两种的方法可以做到。我想首先,你是对的,就像这些连接你验证节点的密钥是为验证节点工作的。所以,就像你通过从你的 Stash 账户签名来分配你的控制器帐户一样,你要告诉整个网络你的与 “controller账户” 关联的会话密钥。

Joe Petrowski: 在你告诉所有人你想成为一个验证节点之后,你将获得你的全部四个会话密钥,其中一半是公开的,然后用你的控制器帐户签署这条消息。也就是说,“这些会话密钥是我要为我的验证节点签名的密钥,它与我的 stash 帐户绑定在一起。”所以当网络收到你的消息,说它已签名时,一个 GRANDPA 对一个链重点投票,然后它可以说,这个投票来自这个 stash 帐户,因为它链接到这个会话密钥。

Gautam Dhameja: 但是,为了让我们的听众理解,也为了我个人,当我有两个账户和四把钥匙时,我如何确保我没有做错什么,或者做我需要做的事情?

Joe Petrowski: 是的,这比普通用户可能做的要高级一点。所以这些绝对是针对验证节点的。如果你只是想提名,这不是你必须担心的事情。生成会话密钥的方法是在要作为验证节点中调用 RPC 端点。它将为您生成这四个密钥,并将它们放在客户机中包含的密钥存储区中。它将把所有四个公钥返回给您,然后您可以用将节点与控制器关联的那个控制器签署此消息。

Joe Petrowski: 这些密钥都可以在客户端进行管理。所以在你这么做之后,你就不必担心了。您已经告诉了链,这些是您的会话密钥,它们在客户端中,您的客户端实际上知道要使用哪些密钥。这是一个非常简单的例子,当你第一次开始的时候,你只需要做一次,然后你可以在每次会话中更改这些密钥。因此,您可以通过调用这个 RPC,然后将这个消息发送回链,来生成一组新的密钥,“嘿,这些是我的新会话密钥”,您的节点将实际检查链,您的会话密钥的最新声明是什么,它将使用这些声明。因为它已经提前记住了。

Gautam Dhameja: Okay。这就是我真正想要理解的,我不需要真正地管理或维护这些密钥中的任何一个,它将由节点为我完成。我所要做的就是基本上调用一个 RPC,它将为我生成这些键,然后返回所有四个键中的一半。我的意思是,为了更简单地说,我必须将这四个公钥作为参数传递给外部调用,然后它将这些公钥与我的 controller 相关联,因为消息将与我的 controller 密钥签名关联。从那以后,我就设置好了(以后再也无需设置了)。

Joe Petrowski:  是的,没错。有更多的高级验证节点想要在客户端之外生成会话密钥。因此,如果您想这样做,有一种方法可以将会话密钥注入到客户端,尽管… 这样做的一个动机是拥有备份验证节点。因此,您要两个拥有相同会话密钥对的验证节点,如果在其中一个离线时,另一个可以接收。如果你真的知道自己在做什么,我们真的只建议你这么做。

Joe Petrowski:  如果你正在听这个播客,那可能不适合你。你想在线并且有一个应变计划是很好的,但是分配两个冲突块的惩罚要比离线的惩罚高很多。如果你对你所做的事情没有 100% 的信心,你应该让客户端自己来管理它。但是,你可以用工具生成这些密钥并在客户端外部管理它们,并在您选择的时候将它们注入客户端。你也可以这样做。

Gautam Dhameja: 对于我们讨论的范围和本播客中讨论的概念,我认为我们将把这些放在一边,因为这些都是先进的东西。听众们,如果你真的想了解这些事情,就去找 Joe。

Joe Petrowski: 好滴。

Gautam Dhameja: 好吧,我们继续。我现在想了解一些密钥管理。此时,我明白我只需要管理我的 stash 和 controller 账户。stash 处可以类似于使用纸夹本身进行管理,因为在通过断开 controller 与它的链接签署初始消息后,我实际上并不需要它就可操作,所以我可以将它放在一边。

Gautam Dhameja: 因此,我认为,只需要对 controller 账户进行密钥管理。我们怎么做?

Joe Petrowski: 是的,现在我们的密钥是基于 SR 25519 的。你现在必须使用桌面钱包或纸质钱包,因为我们没有所有的硬件支持,尽管我们确实有人致力于集成 Ledger 和 Trezor。

Joe Petrowski: 对于 Kusama 来说,你只需要保存一个密码并把这个文件保存在你的电脑上。显然是加密的。如果您设置了密码,在我们启动 Polkadot 时,我们应该有 Ledger 和 Trezor 支持,这样您就可以用硬件钱包管理这些密钥。

Gautam Dhameja: 有趣。目前,我们没有HSM(硬件安全模块)支持或类似的硬件钱包支持,但我们正在做?

Joe Petrowski: 是对滴

Gautam Dhameja: Okay.

Joe Petrowski: 然后,HSM(硬件安全模块)被转移到验证节点中,因为它可以将它们用于会话密钥,一些其他的 proof-of-stake 协议可以做到这一点。但现在还没实现,因为我们有四个会话密钥,并且没有任何可以处理SR 25519的硬件钱包。

Joe Petrowski: HSM(硬件安全模块)背后的优势是它有…HSM 设计的内存非常有限。它是故意被这么设计的,因为他能限制攻击者做坏事的空间。所以我们不能真正地做出(在硬件钱包里)SR 25519 签名,当然不能用四个单独的密钥。目前,我们还没有HSM的支持,尽管我们正在研究一些替代它的方法。

Gautam Dhameja: Okay。我认为只要我们得到支持,这将众人皆知。我个人相信,无论是 HSM(硬件安全模块)还是硬件钱包。

Joe Petrowski: 是啊。作为路线图的一部分,我们不仅能够支持会话密钥的客户端内管理,而且能够支持外部管理,只需让客户端发送一个命令并说“我需要这个签名”,然后您就可以将它的签名返回给您想要的任何人。HSM 实际上倾向于提供一种虚假的安全感,因为它们只是一种虚假的签名文章,无论你发送什么,它们都会在上面签名,然后再发送给你。所以如果你真的发送了,比如说,两个不同的块,相互冲突,一个 HSM 会签署他们。但它什么都不知道,里面没有任何逻辑。

Joe Petrowski: 因此,一些更高级的方法实际上可以帮助我们,比如 SGX,或者仅仅是一个 x86 通用机器,它有一些签名逻辑,并且在这一点上说,你知道,我永远不会签署两个高度相同的块或其他东西。每个突然给 HSM 发送消息的命令都像第一次发送,但这并不是保护自己的最佳方式。通过围绕它实现一些逻辑,可以进行更多安全的设置。

Gautam Dhameja: Okay。有趣。在这种情况下,我想澄清的一点是,此时您可以自由的,轻松地进行密钥管理,使用客户端会话密钥和使用桌面钱包的 controller 密钥。或者我认为我们的 JavaScript 团队也在开发浏览器扩展。所以我认为现在有办法管理你的钥匙。

Joe Petrowski: 是的,对于真正的偏执狂,我们要做的是一旦我们有了我们的Polkadot JS,就像我们的 javascript 工具和网站生成这些为了与 Polkadot 生成的密钥,一旦我们为 Kusama 做好了准备,我相信我们会在 Polkadot 上再次这样做,我们要给 Polkadot JS 提交一个 commit。Parity 有自己的 GPG 密钥,我们认为,“这是一个好版本的 Polkadot JS,你可以使用。” 你可以把它放在一个 U 盘或什么东西上,然后在虚拟机或一个 “热启动机器” 或“airgapped机器” 或什么东西上使用它,然后以这种方式生成你的密钥。然后你就可以像这样签下你的有效载荷。把它放在一个连接的机器上,产生你的有效载荷,把它带到你 “airgapped 机器”、签名、最后带回来。

Joe Petrowski: 有各种硬件钱包解决方案。这比使用 “分类账本” 的方式要简单得多。

Gautam Dhameja: Okay。让我们继续讨论下一个我想和你们讨论的话题,是关于深入了解 staking 方面的一些细节和提名 proof-of-stake。当涉及到 stake 时,我们就有了 stake 奖励。然后我们在 Polkadot 和 Kusama 中也就有了一种叫做 “削减 (slashing)” 的东西。我们来谈谈这个。

Gautam Dhameja: 让我们从可能理解的 NPoS 提名的 proof-of-stake 开始。

Joe Petrowski: 是的,在 NPoS,你会有一系列想要成为验证者的人。有很多人,大多数人不想成为验证节点,因为要成为验证节点需要很多工作。但他们仍然想捕捉网络的通胀。这就是 proof-of-work 和 proof-of-stake 之间的区别,即只有在 proof-of-work 中捕获通胀的人才是实际的矿工,而在 proof-of-stake 中,根据网络配置的方式,许多人可以通过提名或授权捕获通胀的一部分。

Joe Petrowski: 但如果我们把重点放在波卡,这就是提名。将会有一个想要成为验证节点的人的列表。如果您不想成为验证节点,那么您可以提名某人。如果你愿意的话,你可以提名很多人。我们的目标是拥有平等的验证节点。因此,如果我们希望在网络中有 100 个验证节点,我们希望每个验证节点都拥有 1% 的 token。我们允许人们指定多个验证节点,并且我们有一个称为 fragment 的算法,它将以优化验证节点的方式自动分配提名 token。

Joe Petrowski: 实际上正在进行两种优化。一个是寻找验证者和提名者的最佳组合来产生最多的 DOT。第二个优化是,寻找这些投票者的回报分配最均匀的方式。

Gautam Dhameja: 我想更好地理解这一点。当你说算法自动决定如何分配投票者的回报时,我能控制我该提名谁吗?例如,有一件事是算法或网络允许我指定多个验证节点。然后,假设 A、B、C 和 D 或者四个验证节点,我想提名它们,我有 10 个 DOT,或者 10 个KSM。我想把这 10 个 KSM 投给这四个验证节点上。我有控制权说我想给两个 A,四个 B,一个 C,然后给 D 剩下的东西吗?或者算法会帮我决定吗?

Joe Petrowski: 不行,这个要你自己来定。

Gautam Dhameja: 好吧,我只想说,我要指定四个验证节点,然后这些就是我拥有的 DOT,然后剩下的事算法来定?

Joe Petrowski: 是哒.

Gautam Dhameja: 真是令人惊叹的。这使得它非常、非常、非常简单。我不必担心钱的去向。

Joe Petrowski: Yeah.

Gautam Dhameja: Okay, Cool。有些人担心这个,但这个算法会使它变得很简单。

Gautam Dhameja:  Okay,既然我们已经大致了解了提名 proof-of-stake 是如何工作的。让我为我们的用户重新表述一下,以便让他们理解,提名者是持有代币的任何人,都可以是持有代币的任何人。在这种情况下,被提名人实际上是等待被选择的验证节点或下一个验证节点的。。

Joe Petrowski:  那些想成为验证节点的人。

Gautam Dhameja: 想成为验证节点的人。你可以简单地选择和决定哪些是你想要提名的验证节点的子集,并把你的 stake 给它。然后他们会帮你决定如何运作。

Joe Petrowski: 是哒.

Gautam Dhameja: 现在,让我们继续讨论一下我如何提名以及如何申请提名。因为现在我们必须明确两个不同的角色。让我们继续讨论它的相关操作。如果我有代币,如果我知道我想提名 Joe 和 Joe 的朋友以及 Joe 的朋友的朋友作为我的三个验证节点。我如何告诉系统或告诉网络这些是我的三个被提名者?

Joe Petrowski: 这很简单。你用你希望提名的节点地址发一个签名信息。这个地址会是节点的 Stash 账号因为控制者在 session 密钥可以修改。所有的这些都可以通过 Polkadot UI 界面来处理。这个听上去比较复杂,比如签发一个针对节点地址的信息,但是在 Polkadot 的 JS 界面中,有一个按钮就是叫做 “提名”,你可以选择哪个节点你需要来提名。

Gautam Dhameja: OK,在这种情况下,如果我理解正确,里面有一个对外的 extrinsic call 发出,我想这个情况必须得在 staking 模块中吧?

Joe Petrowski: 是的

Gautam Dhameja: OK,所以有一个 extrinsic call 你可以 call 用任意的链接了网络的 UI,然后你可以设置你的提名设置。这个应该被你的控制者账户来签收?

Joe Petrowski: 是的,所有一个提名者,你仍然可以拥有一个 stash 和一个 controller 的账户。你不应该把你的 stash 基金处于风险之中。你只要用你的 controller 账户来签发哪个节点是你提名的。

Gautam Dhameja: OK,这比较简单。我可以通过发出一个 API 的终端指令,或者发出 extrinsic 在 Polkadot 或者 Kusama 上面。那让我们来讨论一下节点建立这块吧。

Gautam Dhameja: 我们讨论了staking,节点需要质押代币来变成验证者。验证者质押代币来获得节点反复收益,所以我如何来获得奖励呢?

Joe Petrowski: 这一点就是 Polkadot 跟其他很多 POS 网络在奖励机制上不同的地方。这边奖励并不是根据你所为个人所质押的数量来等比例做奖励。他们是按照所有在质押的代币数量来等比例做计算。在这个范围中,所有的验证者获得同样奖励,无论谁有最多的代币质押。我们希望有大概 50% 的网络中的验证者代币在 staking。这是我们的目标,另外的 50% 的网络是为了给平行链插槽做拍卖。所以我们预计平行链开发者有 DOT 代币绑定在他们的平行链插槽中,一小部分的流动性的代币可以用来交易,转账等。

Joe Petrowski:我们希望 50% 的验证者网络的资产安全,所以我们有一个曲线,从 0% 质押提升到 50% 质押,根据通货膨胀来调整。

Joe Petrowski: 一旦网络的通货膨胀成为事实,在任何时候 DOT 在所有的验证节点中被平均分配。所以即使一个验证节点的抵押的代币是另一个验证节点的两倍,他们也会得到同样的奖励。这么设置有两个理由,一种是 “第一性原则”,验证节点也在做同样的事情。他们有同样的责任。它们在(参与)投票、它们在出块,所以它们做同样的工作,也得到同样的报酬。

Joe Petrowski: 第二个理由是让所有这些验证节点都被同等抵押。如果你提名某人,你实际上会想提名最低抵押的验证节点。如果一个验证节点有 100 个 DOTs,另一个验证节点有 500 个 DOT。你作为一名提名者,将按照比例获得奖励。如果你投票给 100 个 DOT 的验证节点,你将获得更高比例的奖励。这种机制会激励人们来提名目前抵押很低的验证节点,而这很自然的导致整个网络均匀抵押。

Gautam Dhameja: 这真的很有意思,很酷,因为在这种情况下,我作为提名者被激励着,把我的投票放在目前已抵押最少的验证节点,这样每个人都是平等的。这也有助于我获得更多的奖励,因为我在那个特定的验证节点上有比例更多的抵押。

Joe Petrowski: 是滴。

Gautam Dhameja: 让我们来谈谈 slashing(削减).

Joe Petrowski: 没问题。

Gautam Dhameja: 如果一个节点得到了奖励,但却不公正的分配,那将会发生什么?

Joe Petrowski: 是的,如果不公正分配,那将会受到惩罚。

Gautam Dhameja: 好的。

Joe Petrowski: 作为一个验证节点,你有有很多责任,所以你应该尊重它。当然,从不同的标准上看也是变化的。这也与保持一个均衡的网络是一致的。削减的量与你的抵押成正比。Slash 是相对百分比的,而不是绝对的。

Joe Petrowski: 如果你给一个验证节点抵押了很多资金并处于危险之中,从绝对意义上讲,你实际上会比一个低风险的验证节点损失更多。当涉及到更大的验证节点时,把两件事结合在一起,您可以从某种程度上得到这样一个结论:您应该运行多个验证节点,而不是仅仅抵押给一个验证节点。但如果我们把重点放在Slashing 上,就会发现有几类严重程度不同的不当行为,稍轻的一点就是下线。

Joe Petrowski: 你应该对线上运行的节点负责,这是你的工作,但我们也认识到,每隔一段时间,你可能会有几分钟失去连接或其他的不好的事。我想如果你错过了一个线程,我们会认为有情可原。但如果你接二连三的出错,你就会被取消资格。这个概率真的很小,我想大概是你总抵押代币的 0.01% 或者 0.1%,就像一个小小的耳光(警告)。然后它会强迫举行一个新的选举,所以你会在下一次运营节点中被踢出出局,以上过程马上开始,然后你在稍晚时可能会希望回来。

Joe Petrowski: 惩罚会随着你做的更糟糕的事情而增加,所以我认为像是双重签名的区块,这意味着给两个相互冲突的区块签名,我认为这就像是 10% 的削减。然后是攻击网络的事情。就像在一个与已经确定区块的链冲突的链上投票一样,最多可以被削减到 100%。这三类坏事背后的部分动机是线下的事情,也就是线下发生的错误。双重签名的事。就像你可以运行一个好的软件,但也许你犯了一个基础设施的错误。你用相同的密钥建立两个节点,它们意外地签署了不同的东西。你真的不应该那样做,所以你会受到严厉的惩罚。

Joe Petrowski: 如果你投票给一个与已标记为确定出块冲突的块,这表明你实际上已经修改了软件。在 Polkadot 的机制中,你甚至不能导入与最终链冲突的块。如果导入和投票块与此链冲突,则显然没有运行标准软件。这不仅仅是一个错误,而是你在试图攻击网络。这将会得到最重的一种惩罚。

Joe Petrowski: 这还有另一个层面,那就是协调。如果,比如说 20% 的网络离线,它不会被削减 0.01%,就像只有一个验证节点离线一样,因为它看起来像是一个协调攻击,可以减慢网络的速度,甚至终止网络。这可能是一次协同攻击,也可能只是疏忽大意,比如,如果所有验证节点都在同一个数据中心,我们希望避免这种情况。我们希望验证节点有意识的把基础设施放在哪里,并确保它是真正独立的,这样我们就不会有大量的网络(节点)同时离线。

Gautam Dhameja: 好的。让我更好地理解这一点,我来重复一下你说的意思,如果我转述的不对,请直接打断我。当我得到奖励时,我基本上和其他验证节点一样得到同等的奖励。作为一个提名者,我会根据我在一个特定的验证节点中的投入得到奖励。例如,如果一个验证器获得 10 个代币作为奖励,如果我有一个 10% 的抵押,那么我会得到一个代币作为奖励。

Gautam Dhameja: 但是当涉及到 Slashing(惩罚)的时候,就有点不同了,因为我没有被公平的惩罚,因为是我犯了错误,而不是其他人。所以我会按百分比被惩罚。然后有不同的场景需要考虑,比如,如果这只是缺少一个块生产,那么就有不同的事情。如果只是缺少一张选票,那么就会有不同的削减(惩罚)。如果我试图通过签名两个区块或类似的方式来攻击网络,那么这将是一个完全不同类型的错误。

Joe Petrowski: 是的。

Gautam Dhameja: 是滴。所以,惩罚代币是非常非常严肃的事情,在这里公平竞争非常重要,否则我会损失很多钱。

Joe Petrowski: 是的,你应该小心你提名的人,因为提名者会被他们支持的验证节点惩罚。

Gautam Dhameja: 哦,好的。所以提名者,他们也会受到惩罚的影响?

Joe Petrowski: 是滴。

Gautam Dhameja: 哦哦。这个比例也一样吗?

Joe Petrowski: 是的,这个惩罚标准影响了提名者和验证节点。

Gautam Dhameja: 好的。我怎么知道有人已经被惩罚了、或者还是对有些人不公平?例如,是否有仪表板显示相关信息?或者有没有这样的计划,我可以去看看这些是当前的验证节点,他们信誉如何、他们一直在线或不在线,等等。这方面有什么计划吗?

Joe Petrowski: 这当然在计划之中了,甚至远超 Parity 的范畴,但我们肯定希望看到某种论坛或仪表板,实时报告验证节点的活动。因为像惩罚之类的事情都是在链上完成的。它可以将链上事件回放出来,让用户看看会发生什么。我不记得那些惩罚事件是否真的被储存起来了。我的意思是,你可以看到实际账户余额的变化,会展示相关的事件。我不知道我们是否计划这么做,但肯定的是,这些事情肯定会出现。

Gautam Dhameja: 是的,从这个现状来看,我认为这将对提名者很有趣,因为就像你提到的,你应该知道你提名的谁。然后应该有办法知道,比如我支持的节点,违规记录之类的东西,我可以说,看,这家伙做得不好。他被惩罚了那么多次,他没有始终发送 “我在线” 的信息。

Gautam Dhameja: 应该有…我的意思是,当然,如果没有人在做这件事(违规),我想这是一件好事。

Joe Petrowski: 是啊。

Gautam Dhameja: 对于听众来说,比如说如果有人(小散、不投入太多资金)愿意在 Polkadot 生态中做些事情,那能是什么呢?

Joe Petrowski: 是的,当然,尤其是你不能像那些真正的(投入很多硬件设备的节点)…因为在验证中需要很多硬件设备。如果你没有资金或硬件来做这件事,而且你对 Staking 和验证感兴趣,你完全可以把这作为一个软件项目来做。比如创建一个网站来显示各个节点是否在线,这也确保了表现良好的验证节点的利益。

Gautam Dhameja: 真的是这样。

Gautam Dhameja: 我们讨论了抵押奖励削减和 NPoS 方面的事情。我们还讨论了一些关于密钥管理、不同帐户密钥等的内容。然后我们开始验证节点的介绍。现在,让我们直接进入具体操作部分。让我们继续播客,当有人想成为一个验证节点,他应该做什么。到目前为止,我们基本上都是建立在这一部分,理解不同的概念,以及事物是如何工作的,以及一切。但现在,让我们进入真正的工作。比如说,如果我想成为一个验证节点,首先,与其他 PoS 网络相比,这对我来说有多大的不同?

Gautam Dhameja: 如果我想成为 Kusama或 Polkadot的验证节点,我应该考虑一些不同的东西,还是应该期待一些不同的内容?

Joe Petrowski: 我认为从设置的角度来看,这是非常相似的。我是说,DevOps 和基础设施在任何地方都是一样的。有一些不同之处,比如你是否是一个 HSM,但总体架构与其他  PoS 网络非常相似。没有什么大的不同,这是我们真正想要的,因为我们想要有验证能力的验证节点。现在,这是一个非常利基和新的行业,所以最有经验的验证节点正在其他的 PoS 验证。

Joe Petrowski: 对于最安全的设置来说,有一些类似的东西是很好的,这些原则比如在线而不是双重签名,这些原则在所有的 PoS 中都是通用的。

Gautam Dhameja: 好的。在这种情况下,听众们,别担心,这里没有什么真正复杂的事情。让我们单刀直入吧。如果我想在我选择的数据中心中创建一个验证节点或部署一个验证节点,那么我应该首先做什么呢?第一步是什么?

Joe Petrowski: 我只是在一两天前的 Web3 峰会上和一个正在为这些东西设计一键式部署的人聊天。希望你不用做那么多。但是如果我们稍微了解一下一键式部署的内容,您可能会看到云中的一些哨兵(sentry)节点。哨兵节点是什么,是你不想放弃你的实际验证节点的 IP 地址,因为这将是非常容易做到的,只是让它离线。它不会给攻击者带来任何利润,只会让你因为被惩罚而赔钱。

Joe Petrowski: 您不希望您的实际验证节点暴露在网络中,有很多工作要做。有一个叫做哨兵节点的概念,它只是云中运行的完整节点,它们是唯一有权连接到验证节点的节点。所以你的验证节点不在公共互联网上。它只有一个 VPN 接到云中的一些完整节点。这些可能就像 aws 或 azure 中的 ec2 实例之类的。他们会把信息转发到你的验证节点上。

Joe Petrowski: 如果有人试图通过发送一百万个相同消息的副本来攻击其中一个,哨兵节点会进行检查,并且他们只会向实际的验证节点发送一个副本。如果这些哨兵节点受到攻击,很容易把它们动态分配。您可以使用负载平衡或自动缩放,这有助于在不同的哨兵节点之间分配负载。一旦你越过了它,就有了真正的验证器。我们建议您在私人数据中心运行,或者如果您会灵活操作自己的服务器。这些连接到哨兵节点,最终在这里您可以实际添加第三层,比如签名或其他东西。

Joe Petrowski: 但从一个很高的层次上讲,我想我们可以说,口头上不讲有点像一个前线哨兵节点,它们生活在云中,可以负载平衡和缩放。他们是唯一有权与验证节点交谈并请求签名的人,验证节点通过他们发送消息。这样网络上就没有人知道你的验证节点在哪里了。

Gautam Dhameja: 好的。在这种情况下,我的验证节点可以在任何地方,比如,在同一个数据中心,在不同的数据中心、不同的云操作系统、云提供商、甚至在我的笔记本电脑上。

Joe Petrowski: 是啊。我的意思是,我们并不真的建议将实际的验证节点放在云上,因为这样你就可能把密钥交给了其他人,在大多数情况下… 我是说,这是一个脱离区块链的话题。但很多小企业甚至中型企业都认为 “我不想把我的信息放到云上,因为我怎么知道它是安全的?”。这就好像微软和亚马逊在保护他们的数据中心方面比你做得更好。但在这种情况下,因为一个 Polkadot验证节点将有(账号上显数百万美元的代币。如果你认为某项任务非常关键,也许你不想把它留给云,那么也许你想把它放在私有数据中心或让它自己运行。

Joe Petrowski: 但是当然啦,这是从 DevOps 的角度来看的。在云平台运行验证节点是可能的,甚至可能更容易。

Gautam Dhameja: 可以。我将把这个留给那些想成为验证节点的听众。让他们决定他们想把它放在哪里,但我认为他们的建议非常明确,他们应该考虑自己运行它们,或者在非(公共)云数据中心或私有数据中心运行,或者如果他们只想保持简单,他们可以在任何地方运行它。

Joe Petrowski: 是滴。

Gautam Dhameja: 好滴。现在更多的是关于基础设施和拓扑结构,就像哨兵节点,他们将与验证节点交谈,等等。但是我认为这里有一些关键的概念,我们之前已经讨论过了。让我们回到主题。

Gautam Dhameja: 如果我们从头开始,假设首先,我需要一个 stash 帐户?

Joe Petrowski: 是的。

Gautam Dhameja: 然后我需要一个验证节点,对不起(说错了),是 controller 帐户。然后,步骤是通过调用一个外部函数连接或关联这些帐户。签名,这个发起应该由 Stash 帐户签名。这就像把这两个账户连接在一起,所以在这个时候我有了我的两个账户。

Joe Petrowski: 是的。

Gautam Dhameja: 然后我将 Polkadot 或 Kusama 二进制文件、node 二进制文件和 supplier chain spec 文件下载到其中,我猜的对吗?

Joe Petrowski: 是的,如果你是在 Polkadot 或 Kusama,那区块链说明文件会有一个二进制文件。

Gautam Dhameja: 好吧,有趣。酷,听起来更简单了。所以我下载 Polkadot 二进制文件,运行节点并与网络同步。此时,我有一个完整的节点正在运行,我有两个帐户,它正在与正确的版本同步,且此时已经同步。现在我要做的是通过调用 RPC(一种远程调用方式)来创建会话密钥?

Joe Petrowski: 是的。

Gautam Dhameja: 现在返回所有会话密钥的公共部分。然后我用那些公共部分再调用外部函数,应该由我的 controller 帐户签名。这会把我的 controller 和会话密钥关联起来吗?

Joe Petrowski: 是的。

Gautam Dhameja: 酷。所以在这个时候,我的账户和密钥都准备好了吗?

Joe Petrowski: 是的,我认为介于两者之间的一件事是,您在 controller 上设置会话密钥之前,您还需要从控制器中签名引用一个外部函数,上面写着 “我想验证”。

Gautam Dhameja: 好的,那就是(关联 controller 和会话密钥)之前发生的?

Joe Petrowski: 是的。

Gautam Dhameja: 可以。我也想通过调用 “续期的验证函数” 来表明我想成为验证者的意图。所以现在我真的可以,无论何时都参加下一次选举?

Joe Petrowski: 是滴。

Gautam Dhameja: 如果我有足够的抵押,同时我有足够的提名者支持我,那么我会被选为一个验证节点。如果我不能成功当选一个验证节点,我该怎么办?

Joe Petrowski: 留着这些。是的,我的意思是,如果你运行多个验证节点,你可能只需要关闭一个验证节点,把更多的抵押代币放投给一个验证节点。从另一种角度讲,我觉得那更像是社交活动。找更多的人提名你。

Gautam Dhameja: 是的。基本上,这就是我想要理解的,因为验证节点的改变周期会是...

Joe Petrowski: 大约一天。

Gautam Dhameja: 大约一天,然后我可以尝试成为任何我想要参选的验证节点。

Joe Petrowski: 是的。

Gautam Dhameja: 是的。现在,我成为了一个验证节点,我开始验证,然后,例如,我想离线。离线时会被惩罚,所以当我是验证节点的时候我不应该这么做。但同时,我正在运行验证节点的服务器,或者可能是因为其他原因,我想离线一段时间。我想升级一些东西或者做一些维护,或者把所有的东西迁移到一个新的更好的地方,等等。为此,我将考虑一些停机时间,因为服务器等硬件就是这样工作的。我该怎么办?

Joe Petrowski: 是啊。如果你需要离线,那么你有两个选择,基本上。一是设置一个外在的备份。这叫做 “Chill(冷却)”,意思是我现在不想再验证了。我想你还是要完成你的当选周期。但在下一次选举中,你将被从验证节点集中移除,然后你可以离线,不受惩罚或其他任何事情。然后,一旦你完成升级并重新上线,你只要说“我想再次验证”,你就可以在下次选举中参加选举了。

Joe Petrowski: 如果您不想让验证节点集抛弃我当前运行的节点,那么你可以做的就是让第二个验证节点运行,在该验证节点上设置会话密钥。告诉网络你想使用这组新的会话密钥,我想我们已经讨论了很多次了,不要在两个不同的节点上放置同一个密钥。

Joe Petrowski: 告诉网络您要使用哪个会话密钥,然后您的新验证节点应该会接收,您可以更新旧的并切换回来。我认为您必须将它连接到同一个哨兵节点,因为这会进入网络,但是验证节点有这个 DHT,说明所有其他验证节点在哪里以及如何找到它们。

Joe Petrowski: 当然,这会随着你添加和删除哨兵节点而改变,DHT 会更新,但我认为如果你能保持相同的哨兵节点,那么大家都知道在哪里可以找到你。

Gautam Dhameja: 好吧,换个说法,对听众来说,第一个也是最简单的选择是,如果我必须下线,如果我必须临时离开或类似的事情,那么很明显,只要调用外在的 “Chill”,我就表明了我不想参选下一个参选周期。然后,一旦当前的任用周期结束,我将被暂时从验证节点集中移除。然后我可以离线,做我的事情,升级我的服务器和一切,然后回来,通过调用 validate 函数再次申请成为验证节点。

Joe Petrowski: 是的。

Gautam Dhameja: 是的。我认为这涵盖了我们讨论的具体操作部分,我们将要建立我们的帐户。我们要下载二进制文件,创建会话密钥。我们表明想成为一个验证节点的意图,或者实际上它是在这之前出现的,因为您清楚地提到,在下载二进制文件并进行节点同步之后,我们首先说我们想验证,然后我们想生成会话密钥并将它们与 controller 帐户关联。

Joe Petrowski: 是的。

Gautam Dhameja: 了解。这使我们成为下一次选举的竞争者。如果我们当选,我们就会成为一个整体(网络)。

Gautam Dhameja: 酷。最后一点也是(整个采访的)最后一个问题,我在这里只是为听众澄清一些关于误解的事情。因为有很多新的概念,这是我们第一次真正详细地讨论这些东西,并将它们对外公开。我还想谈一点关于误解的问题,比如这些概念可能是什么,或者这里的误解是什么?如果你想让听众知道这些…你应该避免那些。。。

Joe Petrowski: 我要说的是,就像我们讨论过的第一个错误观念一样,验证节点得到的回报是平等的,而与抵押无关。我觉得我几乎每天都有这样的谈话,因为这和其他 PoS 网络不同。

Joe Petrowski: 另一个,我不认为这是一个误解,关于 GRANDPA,你是在链上投票,而不是块上投票,我们也提到过,这与其他算法和区块链非常不同。它不是基于块的,而是基于链的。

Joe Petrowski: 我想没有其他的了。我是说,实际的硬件设备部分与其他类似,我是说,非区块链只是普通的基础设施。

Gautam Dhameja: 我认为主要的误解只是关于惩罚和奖励。奖励基本上在验证节点中平均分配,然后他们的提名者根据他们在某个验证节点中的持股比例来获得奖励,而惩罚(削减)实际上是按百分比进行的,我们之前已经讨论过了。

Gautam Dhameja: 是的,这是最大的区别,不应该被认为是误解,而是你本应该就关心它。

Joe Petrowski: 是的。

Gautam Dhameja: 可以。我想这涵盖了很多事情。最后,我想问你,对于候选的验证节点是否有什么应该做和不应该做的,他们是否应该注意什么,或者根本不应该做?

Joe Petrowski: 是的,我认为首要任务是,认真对待它,否则会有很多资金处于危险之中。Pos 网络,哦,不仅仅 Pos 网络,区块链网络甚至共识网络都是完全经济的(经得起考验的)。他们的安全性取决于风险的大小,而不是其他因素。

Joe Petrowski: 我们预期(在主网上线后)验证节点后面有很多资金。那不像你在测试网络上随便玩,然后在那里做实验。但是,当你在主网上时,一定要认真考虑一下你的(安全)设置,比如什么事情都想当然。

Joe Petrowski: 尽量不要搞砸。

Gautam Dhameja: 也不要离线。

Joe Petrowski:  是的,不要下线、不要双重签名、也不要做坏事,比如对与(已经最终确定)出块的链冲突的链进行投票。

Gautam Dhameja: 可以。酷。我希望听众听过并且明白了。现在,我想这基本上是我从我们的团队和我自己收集的问题。并希望这对我们的听众是有用的,他们希望在未来积极参与Kusama 或 Polkadot。

Gautam Dhameja: 非常感谢你,乔,和我们分享这些信息。

Joe Petrowski: 是的,谢谢你请我上播客,高谭。

Gautam Dhameja: 嗯嗯,开心。

Joe Petrowski: 感谢收听中继链。我们很希望与您保持联系。

Joe Petrowski: 请在 twitter@relaychain 或电子邮件 podcast@parity.io 上关注我们。Parity 团队包括一些 Parity 网络开发人员、一共识算法发明者、区块链创新者和 Rust 开发人员。如果您想了解更多关于我们工作的信息或想与我们合作,请访问我们的网站 parity.io 并在 parity.io/newsletter 注册我们的 newsletter。

翻译者:24min-26min Charlie;其他时间 童境之南

原文:https://relaychain.fm/3-staking-validating-kusama-polkadot

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章