什么是验证者游戏或“如何启动权益证明区块链”

因此,您的团队已经完成了区块链的 alpha 版本,是时候启动测试网,然后启动主网了。 你有一个真正的区块链,有独立的参与者,良好的经济模型,安全性,你已经设计了治理,现在是时候在行动中尝试这一切了。 在理想的加密无政府主义世界中,您在网络上发布创世块,节点和验证器的最终代码自行启动所有内容,启动所有辅助服务,然后一切都会自行发生。 但这是在虚构的世界中,但在现实世界中,团队必须准备相当多的辅助软件和各种操作来帮助验证者启动稳定的网络。 这就是本文的主题。

启动基于“权益证明”类型共识的网络,其中验证者由系统代币持有者的投票决定,是一个相当具体的事件,因为即使启动拥有数十和数百台服务器的传统集中管理系统也不是一件容易的事任务本身,区块链需要忠诚但独立的参与者的努力来启动。 而且,如果在公司中,在启动时,管理员可以完全访问所有机器、日志、一般监控,那么验证器将不允许任何人访问他们的服务器,并且很可能更愿意独立构建他们的基础设施,因为它控制访问验证者的主要资产 - 投票者的权益。 正是这种行为使得构建分布式安全网络成为可能 - 所使用的云提供商的独立性、虚拟和“裸机”服务器、不同的操作系统,所有这些都使您对此类网络的攻击极其无效 - 差异太大使用软件。 例如,以太坊使用 Go 和 Rust 两种主要节点实现,对一种实现有效的攻击对另一种实现无效。

因此,启动和操作区块链的所有流程都必须以这样的方式组织:任何验证者,甚至一小群验证者,都可以随时将他们的计算机扔出窗外并离开,而不会出现任何问题,其余验证者也应该继续有效支持运营网络并连接新的验证者。 当启动一个网络时,当一个验证者在欧洲,第二个验证者在南美洲,第三个验证者在亚洲时,要实现几十个独立团体的协调工作并引起他们的兴趣是相当困难的。

验证者

让我们想象一下假设的现代区块链的推出(所描述的大部分内容都适用于基于任何现代区块链家族的区块链:以太坊、EOS、Polkadot、Cosmos 等,它们提供了权益证明共识。这样的区块链是验证者团队,负责安装自己的独立服务器来验证和产生新的区块,并获得网络为参与共识的人提供的奖励。要启动新网络,需要几十个验证者(现在可以有很多验证者)或多或少在几秒钟内有效地达成共识),因此该项目宣布注册,其中验证者与用户共享有关自己的公共信息,让他们相信他们将为启动的网络提供高质量的服务。

验证是一门业务,可以让你极其准确地评估验证者的潜在收入,在项目之间快速转移权力,如果他选择的网络成功,验证者可以作为 DAO 的正式参与者和负责人,开发项目,或者只是提供优秀的技术服务以获得完全透明、诚实的赚钱。钱。 在计算验证者的奖励时,项目会尝试考虑验证者的成本,并为区块提供奖励,以使该业务有利可图,但同时不允许验证者通过向验证者注入大量金钱和资金来拖垮经济。剥夺其他网络用户的使用权。

验证者的业务需要确保服务的高容错性,这意味着对 DevOps 和开发人员的高水平培训以及昂贵的计算资源。 即使不需要在工作量证明网络中挖掘哈希值,区块链节点也是一个大型服务,占用大量内存,消耗大量计算、验证、写入磁盘并向网络发送大量数据。 为了存储一个区块中包含数千个小交易的区块链的交易日志和区块链,现在需要 50 GB 或更多的存储空间,并且对于区块来说,它必须是 SSD。 支持智能合约的区块链状态数据库已经可以超过 64Gb RAM。 具有所需特性的服务器非常昂贵;以太坊或 EOS 节点的成本可能为 100 到 200 美元/月。 除此之外,开发人员和开发人员全天候工作的工资也增加了,他们在发布期间甚至在晚上也能解决问题,因为一些验证器很容易位于另一个半球。 然而,在适当的时候,拥有验证者节点可以带来可观的收入(就 EOS 而言,每天高达 10 美元)。

验证只是企业家和公司新的潜在 IT 角色之一;随着程序员想出越来越复杂的算法来奖励诚实并惩罚欺诈和盗窃,出现了执行发布重要数据(预言机)、执行监督等功能的服务(通过发布欺骗证据来削减存款和惩罚作弊者)、争议解决服务、保险和期权,甚至垃圾收集都是智能合约系统中潜在的巨大市场,需要支付数据存储费用。

启动区块链的问题

区块链的开放性使得任何国家的计算机都可以自由参与网络,并且可以根据 GitHub 上的说明轻松地将任何脚本小子连接到网络,但这并不总是一个优势。 对新代币的追求往往迫使验证者“一开始就开采新代币”,希望价格会上升,并有机会迅速摆脱收入。 另外,这意味着你的验证者可以是任何人,甚至是匿名者,你可以像投票给其他验证者一样投票给他(但是,匿名者很难为自己收集利益相关者的选票,所以我们'将把有关匿名加密货币的可怕故事留给政治家)。 尽管如此

项目团队有一个任务——以某种方式进入其网络,那些未来能够确保节点稳定运行、了解安全性、知道如何快速解决问题、与其他验证者合作并共同行动的人——这个质量一切都完全取决于这些品质——网络参与者将在其中投入时间和资源的代币。 足够的创始人在评估风险的时候,很清楚,在推出这种规模的软件时,肯定会遇到代码和节点配置的错误,而网络的稳定性取决于开发者和验证者共同解决的问题。此类问题。

团队已准备好在主网上对任何验证者进行投票,只是为了知道哪些验证者是好的? 最大的投资组合? 现在几乎没有人拥有它。 基于团队的 LinkedIn 个人资料? 经验丰富的开发人员或安全专家不会为您提供任何 Linkedin 个人资料。 根据聊天、帖子中的陈述以及在准备阶段帮助他人的情况? 很好,但主观且不准确。

在这种情况下,仍然存在一件事 - 能够很好地解决每个人的问题 - 可以选择最好的验证者的游戏,但主要的是测试区块链的强度并对区块链进行全面的实战测试区块链在积极使用的情况下,共识的变化,错误的出现和纠正。 这个过程首先由 Cosmos 项目的人员以游戏的形式提出,这个想法无疑是为网络启动可靠且容错的主网做好准备的绝佳方式

验证者游戏

我将描述验证者的游戏,因为我们为基于 EOS 分叉的 DAO.Casino (DAOBet) 区块链设计了它,它被称为 Haya 并具有类似的治理机制 - 验证者是通过从任何帐户投票来选择的,其中一部分用于投票给验证者的余额被冻结。 任何余额中有主要 BET 代币的账户都可以用其余额的任何部分投票给选定的验证者。 投票结果会被汇总,并根据结果建立顶级验证者。 在不同的区块链中,这个过程的组织方式不同,通常正是在这一部分,新的区块链与父区块链有所不同,我必须说,在我们的例子中,EOS 完全证明了其名称中的“OS”,我们真正使用 EOS作为为 DAOBET 任务部署区块链修改版本的基础操作系统。

我将描述个别问题以及如何在游戏中解决这些问题。 让我们想象一个网络,您的服务器可以在其中受到公开攻击,为了维持验证器的位置,您需要不断与网络交互,推广您的验证器并确保它生成块并将它们传递给网络上的其他验证器时间,否则验证器将被从列表中剔除。

如何选出最佳获奖者?

游戏的主要技术要求是其结果可以公开验证。 这意味着游戏的结果:TOP获胜者,必须严格根据任何参与者都可以验证的数据来形成。 在中心化系统中,我们可以衡量每个验证者的“正常运行时间”,并奖励那些在线最多或通过最大网络流量的验证者。 您可以收集有关处理器和内存负载的数据,并奖励那些表现良好的人。 但任何这样的指标收集都意味着收集中心的存在,并且节点都是独立的,可以按照自己的意愿行事并发送任何数据。

因此,自然的解决方案是根据区块链中的数据来确定获胜者,因为它可以用来查看哪个验证器生成了哪个区块以及其中包含哪些交易。 我们将这个数字称为验证者积分(VP),赚取验证者积分是游戏中验证者的主要目标。 在我们的例子中,验证者“有用性”的最简单、易于公开验证且有效的指标是 VP = 验证者在给定时间段内生成的块数。

这个简单的选择是因为 EOS 的治理已经解决了许多新出现的问题,因为 EOS 是三代实际运行的区块链的继承者,在复杂的网络管理方面拥有丰富的经验,并且几乎解决了网络、处理器、网络等方面的任何验证器问题。磁盘只会导致一个问题 - 他签署的区块较少,收到的工作报酬也较少,这再次导致我们简单地了解签署的区块的数量 - 对于 EOS 来说,这是一个极好的且简单的选择。

对于其他区块链,验证者积分的计算方式可能有所不同,例如,对于基于 pBFT 的共识(Tendermint/Cosmos、Parity Substrate 的 Aura 共识),每个区块必须由多个验证者签名,因此计算单个验证者是有意义的签名而不是区块。考虑不完整的共识轮次可能是有意义的,这会浪费其他验证者的资源,一般来说,这很大程度上取决于共识的类型。

如何模拟真实操作条件

创始人的任务是在接近现实的条件下测试验证器,而无需任何集中控制。 这个问题可以使用水龙头合约来解决,它将等量的主代币分配给验证者和其他人。 要在您的余额上接收代币,您需要创建一笔交易并确保网络将其包含在区块中。 因此,为了获胜,验证者必须不断用新的代币补充余额并为自己投票,从而将自己提升到顶端。 此活动会在网络上创建恒定负载,并且可以选择参数,以便请求流对于完整的网络测试来说足够严重。 因此,提前规划水龙头合约作为启动网络的重要工具,并提前开始选择其参数。

从水龙头请求令牌并验证投票仍然不能完全模拟弹头的操作,特别是在极端负载的模式下。 因此,区块链团队仍然需要以一种或另一种方式编写额外的基准来加载网络。 专门创建的智能合约在其中扮演着特殊的角色,它允许测试单独的子系统。 为了测试存储,合约在区块链中存储随机数据,为了测试网络资源,测试合约需要大量的输入数据,从而夸大交易量——通过在任意时间点启动此类交易流,团队同时测试代码的稳定性和验证器的强度。

另一个问题是更新节点代码和进行硬分叉。 要求在出现错误、漏洞或恶意验证者串通的情况下,验证者应该有一个已经在验证者游戏中制定的行动计划。 这里你可以想出一些积累VP的方案来快速应用硬分叉,例如对所有尚未推出新版本节点代码的验证者进行罚款,但这实现起来很困难,而且计算也很复杂。 您可以通过人为地“破坏”给定区块上的区块链来模拟紧急使用硬分叉的情况。 区块生产停止,最终获胜者将是那些最先加入并开始签署区块的人,因此基于签名区块数量的 VP 在这里很合适。

如何通知参与者网络状态并修复错误

尽管验证者之间存在不信任,但及时接收有关网络状态的最新信息对每个人都有利,以便更快地做出决策,因此项目团队正在推出一项服务,用于从验证者服务器收集和可视化许多指标,它可以让您同时看到整个网络的情况,让您快速确定发生了什么。 此外,项目团队快速纠正发现的错误对验证者和项目都有好处,因此除了收集指标之外,立即开始从可访问区块链的机器上的验证者机器收集日志和错误数据也是有意义的开发商。 在这里,歪曲信息对任何人都没有好处,因此这些服务是由项目团队开发的,可以信任。 从验证器收集系统指标是有意义的,当然,对于 DAOBET 来说,区块链本身最重要的指标是最终确定时间和最后确定区块的滞后。 因此,团队发现运行基准测试时节点上的内存消耗增加,以及各个验证器的问题

进行验证者游戏的要点

事实证明,如果你想正式允许验证者攻击彼此的机器(非正式地他们无论如何都可以这样做),你需要单独将其合法地制定为安全测试,因为根据某些国家的法律,DDoS 或网络攻击可能是受到惩罚。 另一个重要问题是如何奖励验证者。 自然的奖励是项目代币,这些代币将被转移到主网,但向任何能够启动节点的人大量分发代币也不是最佳选择。 您很可能必须在两个极端选择之间进行平衡:

根据获得的 VP 分配整个奖池
它非常民主,让每个在验证器游戏中投入时间和资源的人都可以赚钱
但在没有准备好基础设施的情况下吸引了随机的人加入游戏

根据游戏结果将top-N奖池分配给验证人
获胜者很可能是在游戏中坚持得最稳定并且非常坚定获胜决心的验证者
一些验证者不想参与,低估他们获胜的机会,特别是如果参与者包括受人尊敬的验证者

选择哪个选项取决于您

还有一点 - 数十个验证者会在你的召唤下急于参与游戏,这根本不是事实,而在那些决定尝试的人中,并不是所有人都会安装和启动节点 - 通常,在这个阶段,项目的文档相当稀疏,会遇到错误,并且在时间压力下工作的开发人员不能很快回答问题。 因此,在启动游戏之前,还需要规定如果未达到所需验证者数量时的操作。 在这种情况下,在游戏开始时,缺失的验证者由项目组启动,参与共识,但不能成为获胜者。

结论

总之,我尝试根据上面的内容编制了一份清单,列出了有效进行验证者游戏需要思考、制作和启动的内容

运行真正的验证器游戏需要做什么:
开发自己的区块链:)

  • 制作并提出一个 Web 界面,并提供一个 CLI 用于为验证者投票
  • 确保来自正在运行的验证器节点的指标可以发送到集中式服务(例如 Prometheus)
  • 为验证器游戏建立一个指标收集服务器(Prometheus + Grafana)
  • 弄清楚验证者积分 (VP) 的计算方式
  • 开发一个公共脚本,根据区块链数据计算验证器 VP
  • 开发一个Web界面来显示排名靠前的验证者,以及验证者的游戏状态(距离结束还剩多少时间,谁有多少VP等)
  • 开发并自动启动任意数量的您自己的节点,设计将验证器连接到游戏的过程(何时以及如何断开节点的连接,提交和删除它们的投票)
  • 计算需要发行多少代币并开发水龙头合约
  • 制作基准脚本(令牌传输、大量存储使用、大量网络使用)
  • 将所有参与者集中在一次聊天中以便快速沟通
  • 比游戏开始早一点启动区块链
  • 等待起跑器,开始游戏
  • 使用多种类型的交易测试网络
  • 推出硬分叉
  • 更改验证者列表
  • 以不同顺序重复步骤13,14,15、XNUMX、XNUMX,保持网络稳定性
  • 等待最后一个区块,结束游戏,计算VP

必须指出的是,验证者游戏是一个新故事,只进行过几次,因此您不应该将本文视为现成的指南。 现代 IT 行业中没有类似的情况 - 想象一下,银行在推出支付系统之前,会相互竞争,看看谁最擅长进行客户交易。 传统方法不太可能帮助您创建大型去中心化网络,因此请掌握新的业务模型,运行您的游戏,识别有价值的游戏,奖励他们并保持您的分布式系统快速稳定地运行。

来源: habr.com

添加评论