LLC POLYUS
黄金矿业市场的区块链平台
黄金标准
黄金数字项目和AUR令牌的创新是这个加密货币提供了黄金。 一个普通人可以通过购买这些代币成为黄金开采过程的参与者。 黄金交易市场和黄金采矿业的未来取决于黄金数字项目组件提供的分散解决方案。
技术项目
内容
导言
摘要
本文档的目的是提供黄金数字开放网络及其相关区块链、点对点、分布式存储和托管服务技术的第一个描述。 为了将本文件的大小缩小到合理的大小,我们专注于Gold数字平台的独特和明确的功能,这些功能对于实现我们的目标非常重要。
简介
Gold数字开放网络是一个快速,安全和可扩展的区块链和网络项目,能够在必要时每秒处理数百万笔交易,方便用户和提供商网络。 我们努力确保它可以接受目前提供的所有合理的应用程序。 您可以将Gold Digital视为一台巨大的分布式超级计算机,或者更确切地说,是一台旨在托管和提供各种服务的"超级服务器"。 对于所有实施细节,本文并不是最后的。 在开发和测试阶段,某些数据可能会发生变化。
1. 黄金数字组件简介
黄金数字开放网络(Gold)是由以下组件组成的组合:
*灵活的多区块链平台(Gold Blockchain,见第2章),能够每秒处理数百万笔交易,具有图灵完整的智能合约,可更新的正式区块链规范,多加密货币价值转移,支持小额支付渠道和支付网络。 黄金区块链引入了一些新的和独特的功能,如垂直区块链机制的"自愈"(见2.1.17)和即时超立方体路由 ,这使得它能够快速,可靠,可扩展和自
*点对点网络(黄金P2P网络或黄金网络,见第3章),用于访问黄金区块链,发送客户交易,并仅在客户感兴趣的区块链部分接收更新(与他的账户和智能合约相关的部分), 该网络能够支持与区块链相关的任意分布式服务。
*分布式文件存储技术(黄金看门狗存储,见4.1.8),可通过黄金网络访问,黄金区块链用于存储块和状态数据(快照)的存档副本,以及为平台上
•*网络代理/匿名者级别(黄金代理权限,请参阅4.1.11和3.1.6), 类似于i2p(无形的互联网项目),用于隐藏黄金网络节点的身份和IP地址,如有必要(例如,从大量加密货币账户进行交易的节点,或区块链验证验证器的节点,希望隐藏其确切的IP地址和地理位置作为防止DDoS攻击的措施)
*一个Kademlia类型的图形哈希表(Gold DHT)用作黄金存储的"洪流跟踪器",作为"输入隧道", 黄金代理代理服务器的定位器 ,以及黄金服务的服务定位器 。
*存在一个任意服务的平台Gold服务见第4章可通过Gold网络和gold代理访问并具有正式接口见4.3.14允许您使用浏览器或智能手机进行应 这些正式接口和持久入口点服务可以在Gold Blockchain中发布, 在任何给定时间提供服务的实际节点可以通过黄金DHT查看,从黄金区块链中发布的信息开始 。该服务可以在黄金区块链中创建智能合约,并为其客户提供一些保证(见4.1.7)。
*Gold DNS,一种为账户,智能合约,服务和网络节点分配易于阅读的名称的服务。
*黄金支付(见第5章),一个小额支付渠道网络的平台。 它可以用于快速转移网络外的成本,以及支付黄金服务。
*黄金数字项目将允许与第三方消息和社交网络应用程序轻松集成,这使得区块链技术和分布式服务可供普通用户使用 ,而不仅仅是少数加密货币追随者。
黄金区块链是黄金数字项目的核心,其他组件被认为是区块链的辅助组件, 但它们变得有用和有趣。 通过使用它们,平台上的应用程序可以变得比仅依赖黄金区块链更通用(见6.2.13和4.1)。
2. 黄金区块链
让我们从项目的主要组成部分开放黄金区块链网络的描述开始。 我们的方法是"自上而下":我们给出一切的一般描述,然后提供每个组件的更详细的信息。 为了简单起见,我们正在谈论黄金区块链,这个区块链协议的几个实例可以独立和独立地运行(由于硬分叉)。 我们只考虑其中一个。
2.1黄金区块链,作为一套2-Blockchain
黄金区块链实际上是一个区块链的集合和注册表(将在2.1.17中澄清),因为没有普通的区块链能够实现每秒处理数百万笔交易的目标,与今天存在的标准区块链不同,交易速度不超过每秒十几次。
2.1.1。 区块链类型的列表。 介绍:
*一个独特的主区块链或masterchainmasterchain,包含有关协议及其参数的当前值的一般信息,一组验证器及其共享,一组当前活跃的工作链及其"段",最重要的是,一组所有链和段的最后块的哈希值。
•几个(最多2个32)工作链,简称工作链区块链,是包含智能合约交易价值转移的"主力"。 不同的工作链可以有不同的"规则",这意味着不同的账户地址格式,不同的交易格式,不同的智能合约虚拟机,不同的主要加密货币等等。 但是,它们都需要满足不同工作区之间交互的一些基本互操作性标准,并且应该相对简单。 在这方面,黄金区块链是异构的(见6.1.8),类似于EOS(见6.2.7)和PolkaDot项目(见6.2.8)。
60块段,或shardchains简称,具有与工作链本身相同的块规则和格式,但仅负责帐户,取决于帐户帐户地址的前几个(最重要)位。 换句话说,分割形式被内置到系统中(见6.1.12)。 由于所有这些段共享一个共同的块格式和规则,因此AUR区块链在这方面是同质的(见6.1.8),类似于以太坊扩展提案中讨论的内容。1
1https://github.com/ethereum/wiki/wiki/Sharding-FAQ
*shardchain(和masterchain)中的每个块实际上不仅仅是一个块,而是一个小的区块链。 通常这个"区块链"或"垂直区块链"由一个区块组成,然后我们可以认为它只是相应的shardchain区块(在这种情况下也称为"水平区块链")。 但是,如果有必要纠正不正确的shardchain块,则新块固定在"垂直区块链"中,其中包含无效块的替换"水平区块链"或"块差异",只包含该块之前版本中需要更改的部分的描述。 这是用于替换检测到的无效块的特定机制,而不创建所有段的真正分叉;这将在2.1.17中更详细地解释。 现在,我们只注意到每个分片链(和主链)段不是一个普通的区块链,它是侧链的区块链或3D区块链。
2.1.2。 无限范式。 几乎所有的区块链细分提案都是"自上而下"的:首先,提出一个单一的区块链,然后讨论如何将其分成几个互动的细分,以提高性能和可扩展性。 Gold Digital的自下而上分割方法解释如下。 想象一下,该段已经被推到了极限,因此每个分片链中只保留一个帐户或智能合约。 然后,我们有大量的"账户链",每个都描述了只有一个账户的状态和状态转换,并通过传输成本和信息向对方发送有价值的消息。 当然,拥有数亿块并不实际,更新(即新块)通常在每个块中很少出现。 为了更有效地实现它们,我们将这些"帐户"分组到细分中,以便每个分片块本质上是分配给该细分的帐户链的集合。 因此,"会计链"在"段"中只有纯粹的虚拟或逻辑存在。 我们称这种观点为无限分割范式。 这解释了黄金区块链的许多设计决策。
2.1.3。 留言 即时超立方体路由。 无限细分范式指示我们将每个帐户(或智能合约)视为自己的帐户。 然后,一个帐户可以影响另一个帐户的状态的唯一方法是发送消息(这是所谓的Actor模型的一个特殊实例,帐户作为Actor 于黄金区块链等可扩展系统至关重要。 事实上,黄金区块链的一个新功能,称为即时超立方体路由,允许您将在一个分片链的块中创建的消息传递并处理到与系统中段总数无关的下一块。
2.1.4。 主链、工作链和碎片链的数量。 黄金区块链只包含一个主链。 但是,该系统最多可容纳2个32个工作链,每个工作链被细分为最多2个60个碎片链段。
2.1.5。 工作链可以是虚拟区块链,但不是真正的区块链。 由于工作链被细分为碎片链,因此工作链的存在是"虚拟的",这意味着它不是下文第 段中给出的一般定义意义上的真正的区块链,而只是碎片链段 当只有一个分片链段与工作链相匹配时,这种独特的分片链可以与工作链一起识别,在这种情况下,至少在一段时间内成为"真正的"区块链,从而获得与通常的单链区块链的超级相似性。 然而,无限分割范式(见2.1.2)告诉我们,这种相似性确实是肤浅的:这只是一个巧合,因为潜在的大量"账户"可以暂时分为一个链和一个区块链。
2.1.6。 工作链的识别。 每个工作链由其自己的编号或工作链ID(workchain_id:uint32)标识,这只是一个无符号的32位整数。 工作链工作是由masterchain中的特殊事务创建的,它定义了一个(以前未使用的)工作链ID和工作链的正式描述,至少足以让这个工作链与其他工作目标的交互和这个工作链块的表面验证。
2.1.7。 创建和激活新的就业机会。 几乎任何愿意在masterchain中支付发布新工作链正式规范所需的(高)交易费用的社区成员都可以启动新工作链的创建。 然而,为了使新的工作链成为活跃的工作链,需要三分之二的验证者的同意,因为他们需要更新他们的软件来处理新的工作链的块,并声明他们准备在与masterchain的特殊协议下与新的工作链一起工作。 有兴趣激活新工作链的一方可以为验证者提供激励,通过通过智能合约分配的一些奖励来支持新的工作链。
2.1.8。 段标识。 每个分段由一对(w,s)=(workchain_id,shard_prefix)标识,其中workchain_id:uint32标识对应的工作链,而shard_prefix分段:20。.. 60位字符串不超过60,定义了该分片链段负责的账户子集。 也就是说,所有account_id以shard_prefix开头的帐户(即以shard_prefix为最高有效位)将被分配到此链段。
2.1.9。 链账户的识别。 回想一下,帐户网络具有虚拟存在(见2.1.2)。 然而,他们有一个自然标识符,即:(workchain_id,account_id),因为任何账户链都包含有关一个账户(简单账户或智能合约)的状态和更新的信息,差异在这里并不重要)。
2.1.10。 动态段拆分和合并;见2.7。 不太复杂的系统可以使用静态分段-例如,使用account_id的前八位来选择256个预定义分段之一。 黄金区块链的一个重要特点是它实现了动态分割,这意味着链段的数量不是固定的。 如果满足一些形式条件(基本上,如果初始段上的事务负载足够长的时间),则分片段(w,s)可以自动细分为段(w,s.0)和(w,s.1)。 相反,如果负载在一段时间内保持太低,则段(w,s.0)和(w,s.1)可以自动合并回段(w,s)。 最初,只为工作链w创建一个段(w,θ)。当有必要时,这将被细分为大量的段(分片)(参见2.4.6和2.4.8)。
2.1.11。 主要工作链是工作链或工作链零。 虽然最多可以定义2个32个workchains,但我们最初只定义一个,workchain_id=0。 这个工作链,称为Workchain Zero或主要工作链,是用于处理黄金智能合约和转移金币的工作链,称为AUR(见附录A)。 大多数应用程序可能只需要工作链零。 主工作链的部分将被称为基础碎片链。
2.1.12。 块生成间隔。 我们预计每五秒钟在shardchain和masterchain中创建一个新块。 这将导致相当短的交易确认时间。 所有段的新块大约同时生成;一个新的主链块大约在一秒钟后生成,因为它必须包含所有段的最后一个块的哈希值。
2.1.13。 使用masterchain workshop创建工作链链和碎片链段密切相关。 在主链区块链中包含分片链区块的哈希之后,该分片链区块及其所有祖先被认为是"规范",这意味着它们可以从所有段的后续区块中引用为固定和不可 事实上,每个新的shardchain块都包含来自最后一个masterchain块的哈希值,并且该masterchain主链块引用的所有shardchain块都被认为与新块保持不变。 从本质上讲,这意味着提交给分片链块的事务或消息可以安全地用于另一个分片链的下一个块,而不必等待20确认(即在同一块链中的原始块之后生成 这种在提交事务和消息后仅五秒钟就在其他段中使用事务和消息的能力,是我们声称我们的"紧密耦合"系统能够提供前所未有的性能的原因之一(见6.1.12和6.1.14)。
2.1.14。 主链块的哈希作为全局状态。 根据第2.1.13条,最后一个区块链的哈希从外部观察者的角度完全决定了系统的整体状态。 您不需要单独监视所有shardchains段的状态。
2.1.15。 使用验证器生成新块;请参阅2.3。 黄金区块链使用权益证明(PoS)方法在碎片链和主主链段中产生新块。 这意味着有一组,比如说,多达几百个验证器-使用与masterchain的特殊交易存入股票(大量AUR硬币)的特殊节点,以获得创建和验证新块的权利。 然后,每个段(w,s)被分配一个较小的验证器子集,在确定性伪随机路径中,大约每1024个块发生变化。 这个验证者的子集通过收集客户关于新的有效块候选者的合适建议交易来提出并达成下一个shardchain块的共识。 对于每个块,验证器上有伪随机选择的顺序,以确定哪些块候选在每个步骤中具有最高优先级。
验证器和其他节点验证所建议的块候选的有效性;如果验证器标志无效的块候选,它可以通过失去部分和所有的份额,或者通过暂停验证器集合一段时间来自动惩罚。 之后,验证者必须就选择下一个块达成共识,基本上是一个有效的BFT选项(拜占庭拒绝宽容,见2.8.4),类似于PBFT[4]或蜂蜜獾BFT[11]的协议。 如果达成共识,就会创建一个新的区块,验证者之间共享交易费用,包括交易以及一些新创建的("铸造")硬币。 可以选择每个验证器以参与多个验证器子集;在这种情况下,所有验证和匹配算法都预期彼此并行运行。 创建新的shardchain块或超时后,会生成一个新的masterchain块,包括所有段的最后一个块的哈希值。 这是由所有验证者的BFT共识完成的。2有关黄金PoS方法及其经济模型的更多信息,请参阅第2.3节。
2事实上,三分之二的出价足以达成共识,但正在努力收集尽可能多的签名
2.1.16。 叉(叉)主链。 我们紧密耦合的方法带来的复杂性是,切换到masterchain中的另一个分支几乎肯定需要切换到某些分链段的另一个分支。 另一方面,只要主链主链中没有分叉,分链中的分叉甚至是不可能的,因为分链段的替代分叉中没有块可以成为"规范",并且包含在主链中的哈希值。 一般规则是,如果主链块B0是b的前身,B0包括块(w,s)的哈希(B0w,s)-碎片链段B0w,s和B包括哈希(Bw,s),那么B0w,s必须是bw,s的前身;否则,主链块B无效。 我们预计操纵器叉将是罕见的,旁边不存在,因为在黄金区块链采用的BFT范式中,只有当大多数验证器行为不正确(见2.3.1和2.3.15)时,它们才会发生,这将意味着罪犯的重大损失。 因此,您不应该期望碎片链段中的真正叉。 如果检测到无效的shardchain块,将使用"垂直区块链"2-区块链机制(见2.1.17)进行纠正,该机制可以在不施加"水平区块链"(即shardchain)的情况下实现这一目标。 可以使用相同的机制来消除主链块中的非关键错误。
2.1.17。 更正无效的分片链块。 通常情况下,只能创建有效的shardchain块,因为分配给shardchain的验证者在创建新块之前必须达到拜占庭共识的三分之二。 但是,系统必须能够检测先前提交的无效块并纠正它们。 当然,一旦发现了无效的分片链块-无论是由验证器(不一定是这个分片链)还是由"渔夫"(系统的任何节点已经进行了一定的存款,以便能够询问关于块的有效性的问题; 见2.3.4),无效及其证明的申请提交给masterchain,签署无效块的验证者将受到惩罚,损失部分份额和/或临时暂停验证者的工作(后一种措施在攻击者窃取另一个好验证者的私人签名密钥的情况下很重要)。 然而,这还不够,因为共享系统(黄金区块链)的状态由于无效的分片链段而变得无效。 此无效块必须替换为有效版本的新块。 在大多数系统中,这是通过"回滚"到面对这个分片链中的无效块的最后一个块来实现的,而不受消息影响的最后一个块从其他每个分片链段中的无效块传播,并从这些块创建一个新的分叉。 这种方法有一个缺点,即大量其他正确和已提交的事务会突然进行回滚,并且不清楚以后是否会包含这些事务。
黄金区块链通过使每个"块",每个shardchain和masterchain段("水平区块链")成为一个小型区块链("垂直区块链")来解决这个问题,包含这个"块"的不同版本或它们的"差异"。 通常,垂直区块链由一个区块组成,分片链段看起来像经典区块链。 然而,一旦块的无效被确认并传递给主链,无效块的"垂直区块链"允许新块在垂直方向上增长,替换或编辑无效块。 新块由分片链段的当前验证器子集生成。 新的"垂直"块的规则应该相当严格。 特别是,如果无效区块中包含的虚拟"账户区块链"(见2.1.2)本身有效,则必须与新的垂直区块保持不变。 一旦在无效块上创建了一个新的"垂直"块,它的哈希就会发布在新的masterchain块中(或者更确切地说,在原始masterchain块上方的新的"垂直"块中,无效shardchain块的哈希最初发布
这是通过在垂直区块链中输入新的"垂直"区块来修复的,对于所有引用"错误"区块的区块;新的垂直区块将链接到最新(更正)版本。 同样,严格的规则禁止更改未实际受影响的帐户链(即接收与以前版本相同的消息)。 因此,修复错误的块会产生一个"波纹",最终大部分扩散到所有受影响段的最后一个块。;这些变化反映在新的"垂直"区块链中。 在"重写历史"的纹波到达最近的块之后,新的段块仅在一个版本中生成,仅作为最新块版本的继承者。 这意味着它们将从一开始就包含指向正确(最新)垂直块的链接。 Masterchain主链的状态隐式定义了一个映射,该映射将每个"垂直"区块链的第一个块的哈希转换为其最新版本的哈希。 这允许客户端使用其第一个(通常只)块的哈希来识别和查找任何垂直区块链。
2.1.18。 黄金和多货币工作链。
黄金区块链最多支持2个32个不同的"加密货币","硬币"或"代币",它们在32位currency_id中有所不同。 您可以在masterchain workshop中为特殊交易添加新的加密货币。 每个工作链都有一个基础加密货币,并且可以有几个额外的加密货币。 有一个特殊的cryptocurrency与currency_id=0,即:黄金,也被称为AUR(见附录A)。 这是Workchain Zero的基本加密货币。 它也用于支付交易和验证器出价。 基本上,其他工作链可以为其他令牌中的交易收取佣金。 在这种情况下,应该提供一些智能合约来自动将这些交易费用转换为AUR。
2.1.19。 消息传递和值传递。 属于相同或不同workchains的Shardchains段可以相互发送消息。 允许消息的确切形式取决于接收工作链工作链和接收帐户(智能合约),工作链工作链之间存在一些可能消息的公共字段。 特别是,每条消息可以以一定数量的AUR硬币和/或其他注册加密货币的形式具有一定的价值,如果它们被宣布为接收工作链的可接受加密货币。 这种消息传递的最简单形式是将价值从一个帐户转移到另一个帐户。
2.1.20。 黄金虚拟机. Gold虚拟机,也简称为Gold VM或GVM,是用于在主链和工作链主工作链中执行智能合约代码的虚拟机。 其他工作链可以使用其他虚拟机而不是GVM。 这里列出了它的一些功能。 它们在 和其他地方进一步讨论。
*GVM将所有数据表示为一组单元格(GVM)(参见2.3.14)。 每个单元格包含多达128个字节的数据和多达4个引用到其他单元格。 由于"细胞包"理念(见2.2.14),这使得GVM可以在必要时处理与黄金区块链相关的所有数据,包括区块和区块链的全局状态。
*GVM可以处理任意类型代数数据的值,表示为GVM单元格的树或有向无环图。 但是,代数数据类型的存在是不可知的;它只适用于单元格。
*GVM内置了对所有哈希映射的支持。
•GVM是基于堆栈的计算机。 它的堆栈存储64位整数或单元格。
建议。
•支持64位、128位和256位算术。 所有n位算术运算有三种变体:无符号整数,有符号整数和整数模2N(在后一种情况下没有自动溢出检查)。
•GVM具有从n位到m位的无符号和带符号整数转换,对于所有0≤m,n≤256,具有溢出检查。
•*默认情况下所有算术运算都通过溢出检查进行,大大简化了智能合约的开发。
*GVM具有"乘然后移位"和"移位然后除"算术运算,中间值以较大整数类型计算;这简化了定点算术的实现。
•GVM支持位字符串和字节字符串。
*支持某些预定义曲线的256位椭圆曲线加密(ECC),包括Curve25519。
•在一些椭圆曲线上支持Weyl配对,用于快速实现zk-SNARKs,也存在。
*支持流行的哈希函数,包括sha256,存在。
*GVM可以使用Merkle证明。
*GVM为"大型"或"全球"智能合约提供支持。 这种智能合约应该知道分段。 常规(本地)智能合约可以与细分无关。
•GVM支持闭包。
•"无限无卤素G-machine"[13]可以在GVM中轻松实现。 除了"GVM汇编"之外,还可以为GVM开发几种高级语言。 所有这些语言都将具有静态类型,并将支持代数数据类型。 我们假设以下可能性:
*类似Java的命令式语言,每个智能合约类似于一个单独的类。
•懒惰的功能语言(想想Haskell)。
•渴望一种功能语言(想想ML)。
2.1.21。 可配置的参数。 黄金区块链的一个重要特点是它的许多参数都是可配置的。 这意味着它们是masterchain主链的一部分,可以通过一些特殊优惠/投票/改变masterchain状态,而不需要硬叉。 更改这些参数将需要收集三分之二的验证人的选票和希望参与投票过程的所有其他参与者的一半以上的选票以支持本提案。
2.2分段的全局状态。 "细胞包装"理念
2.2。 分片链段链的全局状态。 "细胞包"的理念。现在我们已经准备好描述黄金区块链的全局状态或主要工作链工作链中最小的碎片链段。 我们从一个"高级"或"逻辑"描述开始,它表示全局状态是分片链结构的代数类型的值。
2.2.1。 分片链的状态为一组帐户状态。 根据无限分片范式(参见2.1.2),任何分片链都只是一组(临时)虚拟"账户链",每个账户都包含一个账户。 这意味着,在本质上,分片链的全局状态应该是一个哈希映射
ツ闭スツ青ャツ2ツ9ツ年ツ1ツ0ツ个篠1ツ0ツ秃コツ(ツ凝ツ)ツ-ツ闭スツ青ャツ3ツ0ツ年ツ1ツ1ツ个篠1ツ秃コツ(ツ青ツ)ツツツツツツ
如果我们正在讨论段(w,s)的状态,那么作为哈希映射索引显示的所有account_id必须以前缀s开头(参见2.1.8)。 在实践中,我们可能需要将AccountState拆分为几个部分(例如,保留一个单独的帐户输出消息队列以简化相邻分片链的验证),并在分片链结构中具有多个哈希映射(account→Part of The Account Statei)。 我们还可以向分片链结构添加少量"全局"或"积分"参数(例如,属于该段的所有账户的总余额,或所有输出队列中的消息总数)。 然而,(23)是全局分片链状态的良好第一近似,至少在"逻辑"("高级别")方面。 代数类型AccountState和ShardchainState的正式描述可以使用TL模式(请参阅2.2.5)进行,应该在其他地方提供。
2.2.2。 拆分和合并分片链状态。 请注意,无限分片链状态描述分段范例(23)显示了分割或合并分段时应如何处理此状态。 事实上,这些状态转换结果是非常简单的哈希映射操作。
2.2.3。 帐户状态。 帐户的(虚拟)状态只是单个帐户的状态,由帐户状态类型描述。 它通常具有 中列出的全部或部分字段,具体取决于所使用的特定构造函数。
2.2.4。 工作链的全局工作状态。 同样(23),我们可以通过相同的公式确定工作链的全局状态,但使用account_id-任何值,而不仅仅是属于单个段的值。 2.5.1中的评论也适用于这种情况:我们可以将这个哈希映射拆分为多个哈希映射,我们可能需要添加一些"积分"参数,例如总余额。 从本质上讲,工作链的全局工作状态应该设置为与shardchain状态相同的Shardchain状态,因为这是如果工作链的所有现有段突然合并为一个,我们会得到shardchain的状态。
2.2.5。 低级别视角:"细胞包"。 Shardchain帐户或网络的状态有一个"低级"描述,补充了上面的"高级"描述。 这个描述非常重要,因为它非常通用,提供了一个通用框架,用于表示,存储,序列化和通过网络传输几乎所有黄金区块链使用的数据(块,分片链状态,存储智能合约,Merkle证明等)。). 与此同时,这样一个普遍的"低级"描述,明确和实施,使我们能够将注意力只集中在"高级别"上。 回想一下,GVM表示任意代数类型的值(例如,包括ShardchainState(23)),使用GVM树的单元格,或简称单元格。 任何这样的信元由两个描述符字节限定,它们的特定标志和值为0≤b≤128,原始字节数,和0≤c≤4,引用其它信元的数目。 后面是b原始字节和c单元格引用。17单元格引用的确切格式取决于实现以及单元格是否在RAM中、磁盘中、网络数据包中、块中等等。 一个有用的抽象模型是想象所有单元都存储在地址存储器中,单元的地址等于其(sha256)散列。
回想一下,一个单元格的哈希(Merkle)是通过将对其子单元格的引用替换为其(递归计算的)哈希并对结果字节字符串进行哈希计算的。 因此,如果我们使用单元格哈希来引用单元格(例如,在其他单元格的描述中),系统会稍微简化,单元格的哈希开始与表示它的字节字符串的哈希匹配。 现在我们可以看到,任何由GVM表示的对象,全局shardchain启用状态,都可以表示为"单元格包"-一组单元格以及对其中一个的"根"引用(例如,使用哈希)。 重复的单元格将从此描述中删除("单元格包"是一组单元格,而不是多组单元格),因此抽象树表示实际上可以成为有向无环图(dag)。 您甚至可以将此状态存储在磁盘上的B-或B+树中,其中包含由单元格哈希索引的所有(可能包含一些额外的数据,例如子树的高度或引用计数)。 然而,这种想法的天真实现将导致在磁盘文件的已删除部分中分解单个智能合约的状态,我们希望避免这种情况。18现在,我们将详细解释黄金区块链所使用的几乎所有对象都可以表示为"单元格包",这表明了这种方法的多功能性。
17可以看出,如果存储在单元格树中的所有数据都需要Merkle校样,那么b+ch≈2(h+r)的单元格应该同样经常使用,以最小化平均Merkle校样大小,其中h=32是以字节为单位的哈希大小,r≈4是单元格引用的"字节大小"。 换句话说,单元格必须包含两个引用和几个原始字节,或者一个引用和大约36个原始字节,或者根本不引用72个原始字节。
18最好的实现是将智能合约的状态存储为序列化字符串,如果它很小,或者如果它很大,则存储在单独的B树中;表示区块链状态的顶级结构将是一个b树,其叶子被解析并包含对其他B树的引用。
2.2.6。一个分片链块,作为一个"细胞包"。 Shardchain块本身也可以用代数类型描述,并存储为"细胞袋"。 然后,可以通过简单地组合表示"单元格袋"中的每个单元格的字节串来获得块的朴素二进制表示形式,以任何顺序。 这种表示可以改进和优化,例如,通过在块的开头提供所有单元格的偏移列表,并在此列表中尽可能用32位索引替换对其他单元格的哈希引用。 然而,应该假设该块本质上是一个"单元包",并且所有其他技术细节都是优化和实现问题。
2.2.7。 将对象更新为"单元包"。 想象一下,我们有一个旧版本的一些对象表示为"单元格包",并且我们想要一个新版本的相同对象的表示,大概与前一个没有太大的不同。 您可以简单地将新状态表示为具有自己根的另一个"单元包",并从中删除来自旧版本的所有单元。 剩余的"单元包"是对象的更新。 更确切地说,有这个对象的旧版本,更新可以计算新版本,合并两个单元包,并删除旧根(减少其引用计数并突出显示它,如果引用计数变为零)。
2.2.8。 更新帐户状态。 帐户状态或分片链或任何hashmap存储的全局状态的更新可以使用2.5.7中描述的想法来表示。 这意味着,当我们得到一个新的shardchain块(这是一个"单元包"),我们不仅解释这个"单元包"本身,而且首先将它与代表shardchain先前状态的"单元包"结合起来。 在这个意义上,每个块都可以"包含"区块链的整个状态。
2.2.9。 更新块。 回想一下,块本身是一个"单元包",所以如果你需要编辑一个块,你也可以定义一个"块",更新为一个单元包解释中存在一个"单元包",这是这个块的以前版本。 这是2.1.17中讨论的"垂直块"概念的一个例子。
2.2.10。 Merkle的证明是一个"细胞包"。 请注意,(广义)Merkle的证明,例如,指出x[i]=y,从已知的哈希值(x)=h 开始,也可以表示为"单元格包"。 也就是说,您只需要提供从根x:Hashmap(n,X)到其索引为i:2n和值y:x的所需叶的路径对应的单元格子集。 您还可以同时提供Merke的证明,例如x[i]=y和x[i1]=y1,方法是在"单元格包"中包括位于从x根部到与索引i和i1相对应的叶子的两条路径
2.2.11。 Merkle证明作为来自完整节点的查询响应。 本质上,具有完整分链状态(或帐户)副本的完整节点可以根据轻节点(例如运行Gold Blockchain客户端的轻型版本的网络节点)的需求提供Merkle证明,允许接收方执行简单的查询,而无需外部帮助,只使用此Merkle证明中提供的单元格。 轻节点可以将其序列化格式的查询发送到完整节点,并使用Merkle证明获得正确的响应,因为查询必须能够仅使用Merkle证明中包含的单元格来计算响应。 这个Merkle证明将简单地包含一个"单元数据包",其中只包含在执行轻节点查询时由完整节点访问的属于段状态的那些单元。 这种方法尤其可以用于执行"获取请求"智能合约。
2.2.12。使用 Merkle 证明有效性的扩展更新或状态更新。回想一下(参见 2.2.7),我们可以通过“更新”来描述对象从旧的 x: X 到新的 x 1 : X 的变化,这只是“一批单元格" 包含那些在代表新 x 1 的子树中的单元格,但不在代表旧 x 的子树中,则假定接收者拥有旧 x 及其所有单元格的副本。但是,如果接收者没有 x 的完整副本,而只知道它 (Merkle) hash h = Hash (x),则他将无法检查更新的有效性(更新中的所有悬空单元格引用均指到树中存在的单元格 x) ...我们希望有“可验证的”更新,并辅以 Merkle 证明所有提到的细胞在旧状态下都存在的证据。然后任何只知道 h = Hash (x) 的人都可以检查更新是否正确并计算新的 h 1 = Hash (x 1 )。我们的 Merkle 证明是“细胞包”(参见 2.2.10),有人可以构建扩展更新,例如包含旧根 x、它的一些后代以及从根 x 到新根的路径的“细胞包”根 x 1 及其所有不属于 x 的后代。
2.2.13。 分片链块中的帐户状态更新。 特别是,分片链块中的帐户状态更新必须填充,如2.2.12中所述。 否则,有人可能会提交一个包含无效状态更新的块,该块指的是旧状态中丢失的单元格;证明这样的块的无效将是有问题的(挑战者如何证明该单元格不). 现在,如果块中包含的所有状态更新都被填充,那么它们的有效性很容易被检查,并且它们的无效性也很容易被揭示为违反(广义)Merkle哈希的递归定义属性。
2.2.14。 "细胞包"的理念。 前面的考虑表明,我们需要存储或传输的所有内容,无论是黄金区块链还是网络,都表示为"单元数据包"。 这是黄金区块链设计理念的重要组成部分。 一旦定义了"单元包"和"单元包"的一些"低级"序列化,您可以简单地定义所有内容(块格式,分片链和帐户状态等)高级抽象(依赖)代数数据类型。 "Cell package"理念的统一效果大大简化了看似无关的服务的实施;参见5.1.9以支付渠道为例。
2.2.15。 黄金区块链的"标题"块。 通常,区块链中的一个区块以一个包含前一个区块的哈希值的小头开始,其创建时间,该区块中所有交易树的Merkle哈希值等等。 然后将块哈希定义为这个小块标题的哈希。 由于块头最终取决于块中包含的所有数据,因此您无法在不更改其哈希的情况下更改块。 在Gold Blockchain块使用的"单元包"方法中,没有分配的块头。 相反,块哈希被定义为块的根单元的(Merkle)哈希。 因此,该块的顶部(根)单元可以被认为是该块的小"头"。 但是,根单元可能不包含通常预期来自此类标头的所有数据。 基本上,您需要头包含在块数据类型中定义的一些字段。 通常,这些字段将包含在多个单元格中,包括根。 这些单元格共同构成有关字段值的"Merkle证明"。 人们可以坚持认为,该块在一开始就包含这些"标题单元格",在其他单元格之前。 然后,您只需要加载块序列化的前几个字节,以获取所有"头单元"并检查所有预期字段。
2.3创建和检查新块
黄金区块链最终由碎片链和主链块组成。 这些块需要创建,验证,并在网络上分布给所有利益相关者,以便系统能够顺利和正确地运行。
2.3.1。 验证器。 新块由称为验证器的特殊节点创建和验证。 本质上,任何希望成为验证器的节点都可以成为一个,如果它可以对主链进行足够大的出价(以AUZ硬币,即克,见附录A)。 验证者获得一些"奖励",以获得良好的工作,即在新创建的区块和一些新铸造的硬币中进行的所有交易(消息)的交易,存储和天然气费用,反映了整个社区对验证者保持黄金区块链运行的"感谢"。 这笔收入将根据所有参与验证者的出价比例分配给他们。 但是,作为一个验证者是一个很高的责任。 如果一个验证器签署一个无效的块,它可以通过失去部分或全部的份额,并通过暂时或永久地从验证器集中排除来惩罚。 如果验证器不参与创建该块,则不会收到与该块相关联的奖励份额。 如果验证器长时间不创建新块,它可能会失去部分份额,并被暂停或永久排除在验证器集合之外。 所有这一切都意味着验证者不会"白白"得到他们的钱。 事实上,它应该监控所有或某些段的状态(每个验证器负责检查和创建碎片链的某个子集中的新块),执行这些段中智能合约请求的所有计算,接收其他段的更新等。 此活动需要大量的磁盘空间、计算能力和网络带宽。
2.3.2。 验证器而不是矿工。 回想一下,黄金区块链使用"股权证明"方法,而不是比特币,当前版本的以太坊和大多数其他加密货币的公认"工作证明"方法。 这意味着你不能通过提供一些工作证明(计算大量无用的哈希值)来"创建"一个新的块,并因此获得新的硬币。 相反,您需要成为验证器,指导您的计算资源在区块链上存储和处理请求和数据。 你需要成为新硬币的验证者。 在这方面,验证器是新的矿工。 但是,除了作为验证者之外,还有其他方法可以赚取硬币。
2.3.3。 提名者和"采矿池"。 要成为验证者,您通常需要购买并安装多个高性能服务器,并为它们提供良好的互联网连接。 这并不像目前比特币挖掘所需的ASIC硬件那么昂贵。 然而,在家用电脑上创造新的金币绝对不可能,更不用说智能手机了。 在比特币,以太坊和其他加密货币工作证明算法社区中,有采矿池的概念,许多计算能力不足的节点自行创建新块,并在之后分享奖励。
在"份额证明"的世界相应的概念是提名人的概念。 本质上,它是一个提供资金帮助验证者提高其出价(份额)的节点;验证者然后将其奖励的适当份额(或一些预先约定的份额,例如50%)分配给被提名者。 被提名人可以参与"区块挖掘",并获得与他想要为此目的贡献的金额成比例的奖励。 它只获得验证者奖励的相应份额的一小部分,因为它只提供"资本",不需要购买计算能力,存储和网络带宽。 但是,如果验证人因不当行为而失去其份额,则提名人也会失去其份额。 从这个意义上说,被提名人分担风险。
他必须明智地选择指定的验证器,否则他可能会赔钱。 从这个意义上说,提名人做出明智的决定,并为他们的资金的一些验证者"投票"。 另一方面,这种促销或计入系统可以让您成为验证者,而无需投入大量资金(AUR硬币)。 换句话说,它可以防止大量AUR的存储垄断验证器的供应。
通过指出别人的错误来获得报酬。 另一种获得一些奖励而不是验证者的方法是成为一名渔夫。 从本质上讲,任何节点都可以通过在masterchain中进行少量存款来成为渔夫。 然后,它可以使用一个特殊的事务主链来发布(Merkle)一些先前由验证者签名和发布的(通常是shardchain)块的无效证明。 如果其他验证者同意这种无效证明,则有罪的验证者将受到惩罚(失去部分份额),渔夫将获得一些奖励(从侵权验证者处没收的部分硬币)。 纠正无效的masterchain块可能涉及在以前提交的masterchain块之上创建"垂直"块(参见2.1.17);没有必要创建masterchain的分叉。
通常,渔夫应该成为至少一些分片链的完整节点,并花费一些计算资源运行一些智能合约代码。 虽然渔夫不需要有很多的计算能力作为验证器,但我们认为,成为渔夫的自然候选人是一个未来的验证器,准备回收尚未被选择为验证器的新块(例如,由于未能贡献足够大的份额)。
2.3.5。 分拣机:通过为验证器提供新块来赚钱。 另一种获得一些奖励而不是验证者的方法是使用分拣器。 这是准备并提供验证器新shardchain块候选的节点,补充(映射)来自该链的状态和其他(通常是相邻的)shardchain的数据,以及相应的Merkle证明。 (这是必要的,例如,当某些消息需要从相邻的分片链发送时。)验证器可以轻松地验证建议的块候选的有效性,而不必加载这个或另一个shardchains段的完整状态。 由于验证者必须为该块提交新的(匹配的)候选者,获得一些("挖掘")奖励,因此将部分奖励支付给想要为该块提供合适候选者的分拣员是有意义的。 在这种情况下,验证器可以通过将其传递给分拣器来摆脱监视相邻分片链状态的需要。 但是,我们预计在系统的初始安装过程中,不会有单独分配的分拣器,因为所有验证器都可以自己充当分拣器。
2.3.6。 整理器(分拣器)或验证器:接收资金以使用交易的用户。 用户可以向一些分类器或验证器打开小额支付渠道,并支付少量硬币,以换取将他们的交易包含在shardchain中。
2.3.7。选举全局验证器。每月选举一次“全局”验证器集(实际上,每 2 19 个主链块)。这一套是提前一个月确定并公开的。要成为验证者,节点必须将一些 AUR 代币转移到主链主链,然后将它们作为投标报价发送到一个特殊的智能合约。与速率一起发送的另一个参数是 l ≥ 1,该节点愿意接受的最大检查负载可能相对最小。还有一个全局上限(另一个可配置参数)L 乘 l,等于 10。然后通过这个智能合约选择一组全局验证器,只需选择最多 T 个具有最大推断出价的候选者并发布他们的身份。最初,验证器的总数为 T = 100;我们预计它会随着负载的增加而增长到 1000。这是一个可配置的参数(见 2.1.21)。每个验证者的实际份额计算如下:如果提议率的最高 T 是 s 1 ≥ s 2 ≥ s T ,实际份额是第 i 个验证器等于 s I i : = min (s i , l i S T )。所以 s I i / s I T ≤ l i ,所以 i -th 验证者不会收到超过 l i ≤ L 倍最弱验证者的负载(因为负载最终与速率成正比)。
选择验证者然后可以提取其未使用的部分权益,s i - s I i 。不合格的验证人候选人可以撤回他们的所有股份。每个验证者发布一个公共签名密钥,不一定等于付款账户的公钥(即发现由这些验证者之一签名的无效块)。之后,将返回费率,以及验证者的铸造硬币份额和这段时间内处理的交易佣金。
19为每个验证器选择生成和使用新的密钥对是有意义的。
2.3.8。选举验证者的“目标群体”。整个全球验证器集(其中每个验证器都被认为具有等于其份额的基数,否则验证器可能会接受多个凭证并在它们之间分配它们的份额)仅用于验证新的主链块。分片链段块仅由从 2.3.7 中所述选择的全局验证器集中特别选择的验证器子集进行检查。为每个段定义的验证器或“任务组”的这些“子集”每小时更改一次(在事实上,每 2 个 10 个主链块)并且它们提前一小时已知,因此每个验证者都知道他需要检查哪些部分并可以为此做好准备(例如,通过加载丢失的分片链数据)。用于为每个段 (w, s) 选择验证任务组的算法是确定性伪随机。它使用嵌入的伪随机数作为每个主链块上的验证器(通过使用阈值签名的共识生成)来生成随机种子,然后计算例如哈希(代码(w)。代码(s)。Validator_id.rand_seed)对于每个验证器。然后按照这个hash的值对验证者进行排序,选择前几个至少有验证者投注总数的20/T,但至少有5个验证者。可以使用专用的智能合约进行此选择。在这种情况下,选择算法可以很容易地更新,而无需 2.1.21 中提到的投票机制的硬分叉。到目前为止提到的所有其他“常量”(例如,2 19 、2 10 、T、20 和 5)也是可配置参数。
2.3.9。 每个任务组的优先级交替。 段任务组的成员有一定的"优先级"顺序,具体取决于前一个主链块的哈希和块号序列(shardchain)。 这个顺序是通过如上所述生成和排序一些哈希来确定的。 当需要创建一个新的分片链块时,选择创建该块的验证器任务组段通常是第一个,相对于这个旋转的"优先级"顺序。 如果它无法创建块,第二个或第三个验证器可以这样做。 本质上,他们都可以提出自己的候选块,但具有最高优先级的验证者提出的候选者必须由于共识拜占庭拒绝宽容(BFT)协议而获胜。
2.3.10。 分片链块候选的分布。 由于shardchain在任务组中的成员是提前一小时知道的,所以当需要创建新的shardchain块时,他们的成员可以使用通用的Gold网络机制(参见3.2)来创建一个专用的"组播验证器验证复盖网络"-通常在最新的masterchain块分发后一到两秒钟-每个人都知道谁具有最高优先级来生成下一个块(参见2.3.9)。 这个验证器将为新的排序块创建一个候选项,无论是自己还是使用collator(见2.3.5)。 验证器必须检查(确认)这个(特别是如果它是由一些整理者准备的),并用你的私钥签名。 然后,块候选使用预先设置的组播复盖网络传播到任务组的其余部分(任务组创建自己的复盖网络,如3.2所述,然后使用所描述的组播流协议的版本( 3.2 15)传播块候选)。 BFT算法使用拜占庭组播分发协议来实现这一点,类似于Honey Bft[11]中使用的协议:通过(N,2N/3)-随机码对候选块进行编码,将接收到的数据的1/N直接发送到组的每个成员,并期望将其部分数据直接组播到组的所有其他成员。
然而,一个更快更简单的方法来做到这一点(参见3.2.15)是将块候选分割成一个序列的有符号的1千字节块("片段"),用Reed-Solomon或喷泉代码(例如RaptorQ代码[9][14])补 一旦验证器接收到足够的碎片来恢复块候选,它就会签署确认收据,并通过整个组的邻居分发。 然后它的邻居停止发送新的片段,但可以继续发送这些片段的(原始)签名,考虑到这个节点可以生成后续片段本身,应用Reed-Solomon或fountain代码(具有所有必要的数据),将它们与签名相结合,并将其分发给尚未准备好的邻居。 如果"组播网格"(复盖网络)在所有"坏"节点被删除后保持连接(回想一下,拜占庭变体允许多达三分之一的节点是坏的-行为随意恶意),该算法将尽可能快地传播块候选。 不仅可以为整个组指定高优先级块创建者一个候选块。 第二和第三优先级验证器可以立即或在拒绝接收来自最高优先级验证器的块候选之后开始多播它们的块候选。 但是,通常只有具有最高优先级的候选块将由所有(实际上至少三分之二的任务组)验证器签名,正如新的分片链块所提交的那样。
2.3.11。 检查块的候选人。 验证器收到候选区块及其发起验证器的签名后,接收验证器验证该候选区块的有效性,执行其中的所有交易,并验证结果是否与先前批准的区块匹配。 所有从其他块导入的消息必须在匹配的数据中使用合适的Merkle证明来支持,否则候选块被认为是无效的(如果这个证明是针对masterchain主链提交的,已经签署该候选块的验证者可能会受到惩罚)。 另一方面,如果找到的块候选是有效的,接收验证器对其进行签名,并通过"组播网络"或直接消息网络将其签名分发给组中的其他验证器。 我们想强调的是,验证器不需要访问这个或邻近段的状态来验证候选(映射)的有效性。20这允许您快速检查正确性(无需磁盘访问),便于计算,并减少验证器的负载(特别是如果他们愿意接受外部整理器(分类器)的服务来创建块的候选者)。
20一个可能的例外是满足2.4.21中描述的消息顺序要求所需的相邻段的输出队列的状态因为在这种情况下Merkle校样的大小可能会变得非常大。
2.3.12。 块的下一个候选人的选举。 一旦块候选者在目标组中收集至少三分之二(以速率)验证器有效性签名,他就可以被分配到下一个分片链块。 运行BFT协议是为了就选定的块候选达成共识(可能有多个建议),所有"好"验证者都喜欢该轮中具有最高优先级的块候选。 因此,在启动该协议时,该块将补充至少三分之二的验证器的签名(按速率)。 这些签名不仅表明有问题的块的有效性,而且还表明其对BFT协议的选择。 之后,块(没有映射数据)与这些签名相结合,以确定性的方式序列化,并跨网络分发给所有相关方。
2.3.13。 验证者必须保留他们签署的区块。 在他们成为目标组的成员期间和至少一个小时(而不是 2 10 个区块),验证者应该存储他们签名和提交的区块。 验证者可能会因未能向其他人提供已签名的区块而受到处罚。
2.3.14。 为所有验证器分配新shardchain块的标头和签名。 验证器使用类似于为每个任务组创建的多播网络将新创建的shardchain块的标头和签名分发到一组全局验证器。
2.3.15。 生成新的主链块。 创建新的分链块后,可以生成新的主链块。 该过程与shardchain块基本相同(见2.3.12),不同之处在于所有验证器(或至少三分之二的验证器)都必须参与此过程。 由于新分片链块的标头和签名都分发给所有验证器,因此每个分片链中最新块的哈希值可以而且应该包含在新的主链块中。 一旦这些哈希被传递到主链,观察者和其他段可以将新的shardchain块视为完美和不可变的(见2.1.13)。
2.3.16。 验证器必须保持主链状态。 值得注意的是,masterchains和segments之间的区别在于,所有验证器都需要跟踪masterchains的状态,而不依赖映射的数据。 这很重要,因为验证者的目标群体的知识是从主链主链的状态推断出来的。
2.3.17。 Shardchain块是并行生成和分布的。 通常,每个验证器是多个shardchain任务组的成员;它们的数量(因此验证器的负载)与验证器的份额大致成正比。 这意味着验证器并行运行新分片链块生成协议的多个实例。
2.3.18。 阻止阻止攻击的缓解。 一组常见的验证器在看到段块的标题和签名后,将一个新的段块哈希插入masterchain,但是生成该块的验证器很可能会串通并试图完全避免发布新块。 这将导致相邻段的验证器无法创建新块,因为一旦新块的哈希被提交到主链,他们必须至少知道新块的输出消息队列。 为了减轻这种情况,新块必须从其他一些验证器(例如,相邻段的目标组的三分之二)收集签名,表明这些验证器具有此块的副本,并准备在必要时将其发送给任何其他验证器。 只有在提交这些签名后,新块的哈希才会包含在masterchain中。
2.3.19。 主链块生成晚于分片链块。 主链块大约每五秒钟生成一次,就像shardchain块一样。 然而,所有段中的新块的生成基本上是在同一时间执行的(通常会触发新的masterchain块的发布),新的masterchain块的生成被故意延迟以启用masterchain中新创建的段块的散列。
2.3.20。 慢验证者获得较低的奖励。 如果验证者是"慢"的,它可能不会批准新的块候选者,并且提交新块所需的签名的三分之二可以在没有其参与的情况下收集。 在这种情况下,他将获得与此块相关联的奖励的较小份额。 这为验证器优化其硬件、软件和网络连接以尽快处理用户事务提供了激励。 但是,如果验证器不能在提交之前对一个块进行签名,则其签名可以包含在以下块之一中,然后将奖励的一部分(根据创建的块数呈指数递减,例如如果验证器稍后创建k个块,则0.9到)将颁发给该验证器。
2.3.21。 验证器签名的"深度"。 通常,当验证器对一个块签名时,签名只指示该块的相对有效性:该块是有效的,前提是在此段和其他段中的所有先前块都是有效的。 验证器可能会因先前块中记录的数据无效而受到惩罚。 但是,块验证器签名有一个名为"深度"的整数参数。 如果它是非零,这意味着验证器断言(相对)先前块的指定数量的有效性。 这是"慢速"或"暂时禁用"验证器赶上并签署一些没有签名的块的方法。 然后,块奖励的一部分将像以前一样给予他们(见2.3.20)。
2.3.22。 验证器负责签名段块的相对有效性;绝对有效性如下。 我们想再次强调,Shardchain b块上的验证器签名只表示该块的相对有效性(或者之前的块的d,如果签名的"深度"为d,请参阅2.3.21;但这不会影响下面的讨论)。 换句话说,验证器指出,该段的下一个状态sI是通过应用2.2.6中描述的块评估函数ev_block从以前的状态s获得的:
ツ闭スツ青ャツ2ツ9ツ年ツ1ツ0ツ个篠1ツ0ツ秃コツ(ツ凝ツ)ツ-ツ闭スツ青ャツ3ツ0ツ年ツ1ツ1ツ个篠1ツ秃コツ(ツ凝ツ)ツツツツツツ
因此,如果原始状态被证明是"不正确"(例如,由于先前块之一的无效),签名块B的验证器不能受到惩罚。 "渔夫"(见2.6.4)必须声明只有当他发现一个相对无效的块。 PoS系统作为一个整体倾向于使每个块相对有效,而不是递归地(或绝对地)有效。 但是请注意,如果区块链中的所有块都相对有效,那么所有块和整个区块链都是绝对正确的; 在区块链的长度上使用数学归纳可以很容易地显示此语句。 因此,易于验证的区块相对公平性声明一起证明了整个区块链的绝对有效性。 请注意,通过对块B进行签名,验证器在给定s的原始状态下断言该块是有效的(即结果(24)不是表示无法计算下一个状态的θ值)。 因此,验证器必须对评估期间访问的初始状态的单元格执行最小的正式检查(24)。 例如,假设一个单元格必须包含提交到块的事务中可用的原始帐户余额,以便具有零原始字节,而不是预期的8或16。 然后,无法从单元格中检索原始余额,并且在尝试处理块时发生"未处理的异常"。 在这种情况下,验证者不应该在惩罚处罚下签署这样的块。
2.3.23。 主链块的签名。 与masterchain块的情况有所不同:通过签署masterchain块,验证器不仅声明其相对有效性,而且还声明所有先前块直到第一个块的相对有效性,当这个验证器承担责任时(但不
2.3.24。验证器的总数。在目前描述的系统中,被选举的验证者总数上限 T(见 2.3.7)不能超过数百或数千,因为验证者被期望参与 BFT 共识协议。主链的每个新区块,尚不清楚此类协议是否可扩展到数千个参与者。更重要的是,区块必须收集至少三分之二的验证者的签名(按一定比例),并且这些签名必须包含在新区块中(否则,系统中的所有其他节点将没有理由信任新区块而不检查它自己)...再说说,主链的每个区块中必须包含数千个验证者签名,这意味着主链的每个区块中会有更多的数据,这些数据将由所有全节点存储并通过网络传播,以及更多的计算能力需要验证这些签名(在 PoS 系统中,全节点不需要独立验证区块,但需要验证验证者的签名)。虽然每千验证者的 T 限制对于 TON 区块链部署的第一阶段似乎绰绰有余,但当分片链的总数如此之大以至于几百个验证者不足以处理所有的时,必须为未来的增长做好准备。他们。为此,我们引入了一个额外的可配置参数 T I ≤ T(初始等于 T),并且仅预期所选验证器的上 T I (按速率)创建和签署新的区块主链。
2.3.25。系统的去中心化。有人会怀疑,像 TON 区块链这样的系统的权益证明算法依赖 T≈1000 个验证者来创建所有分片链和主链区块,与传统的工作量证明不同,它必然会变得“过于中心化”像比特币或以太坊这样的区块链,每个人(原则上)都可以创建一个新区块,而没有明确的矿工总数上限。然而,流行的工作量证明区块链(例如比特币和以太坊)目前需要巨大的计算能力(高“哈希率”)才能以无情的成功率创建新块。因此,新区块的创建通常集中在少数大玩家手中,他们将巨额资金投入到数据中心,里面装满了针对挖矿优化的定制硬件;掌握在几个大型“矿池”的手中,这些矿池集中和协调了大量无法提供足够“哈希速度”的人的努力。因此,截至 2017 年,超过 75% 的新以太坊或比特币区块是由不到 10 名矿工生产的。事实上,两个最大的以太坊矿池加在一起产生了所有新区块的一半以上!显然,这样的系统比另一个系统中心化得多,依靠 T ≈ 1000 个节点来产生新块。
还可以指出,成为黄金区块链验证者所需的投资 6.22)。 提交块后,块的相对可靠性可能会增加–例如,添加后期验证器签名时(见2.6.21)。 但- 购买硬件(多台高性能服务器)和软件包(如有必要,可以通过一组提名人轻松组装;参见 2.3 .3) - 远低于成为成功的离线比特币或以太坊加密货币矿工所需的费用。事实上,2.3.7 中的 L 参数将迫使被提名者不要加入最大的矿池(即拥有最大份额的验证器),而是查看目前正在接受被提名者的资金甚至创建新矿池的较小验证者。验证器,因为这将增加 s I i / s i 验证器的份额,此外,还使用了名义利率,这会刺激采矿带来的巨大收益。因此,TON 的股权证明系统实际上鼓励去中心化(创建和使用验证器)并惩罚中心化。
2.3.26。 块的相对可靠性。 块的(相对)可靠性是对该块签名的所有验证器的总百分比。 换句话说,这是如果这个块被证明是无效的,一些参与者将失去的金额。 如果我们谈论的是传输价值低于区块可靠性的交易,我们可以认为它们足够安全。 在这个意义上,相对可靠性是一个特定块中观察者之外的信任度量。 请注意,我们正在谈论一个块的相对可靠性,因为这是一个保证,当前一个块和所有其他块都有效时,该块是有效的(见2.2/21另一方面,如果其中一个验证者由于与其他区块相关的不当行为而失去部分或全部出价,则该区块的相对可靠性可能会降低。
2.3.27。 "加强"区块链。 重要的是为验证器提供激励以尽可能增加块的相对可靠性。 一种方法是为验证器分配一个小的奖励,以便将签名添加到其他分片链段的块中。 即使"潜在的"验证者出价不足以有资格获得列入全球验证者集合的最高出价验证者(见2.3.7)也可以参加此活动(如果他们同意在失败的选举之后冻结其股份而不是撤回)。 这些潜在的验证者可以兼作"渔民"(见2.3.4):如果他们必须验证有效性,某些块也可以报告无效块并收集相关的奖励。
2.3.28。 单元的递归可靠性。 您还可以将块的递归可靠性定义为其相对可靠性的最小值,以及其所属的所有块(即主链块,前一个分链块和相邻分链的某些块)的递归可靠性。 换句话说,如果一个块被证明是无效的,要么是因为它是无效的,要么是因为它所依赖的块之一是无效的,那么至少这笔钱将被某人丢失。 如果您真的不确定信任块中的特定事务,则需要计算该块的递归可靠性,而不仅仅是相对可靠性。 在计算递归可靠性时走得太远是没有意义的,因为如果我们回头看得太远,我们会看到验证器签名的块,其出价已经被解冻和撤回。 在任何情况下,我们不允许验证器自动修改旧块(即 如果使用可配置参数的当前值,则创建两个多月前),并从它们开始创建叉子或使用"垂直区块链"纠正它们(见2.1.17),即使它们被证明是无效的。 我们假设两个月的时间为检测和报告任何无效区块提供了充足的机会,因此如果在此期间没有对某个区块进行争议,则根本不太可能发生争议。
2.3.29。 光节点的"比例证明"的推论。 Gold Blockchain使用的"权益证明"方法的一个重要后果是,黄金Blockchain的light节点(用于与light客户端一起工作的软件)不需要加载所有shardchain甚至masterchain块的"头文件",以便能够自行验证全节点作为其请求的响应提供给它的Merkle证明的有效性。 事实上,由于最近的shardchain块哈希包含在masterchain块中,因此完整节点可以很容易地提供Merkle证明给定的shardchain块是有效的,从masterchain块的已知哈希开始。 接下来,light节点只需要知道第一个masterchain块(声明第一组验证器的位置),它(或至少它的散列)可以嵌入到客户端软件中,只有一个masterchain块,大约每个月之后,当新选择的验证器被声明时,因为这个块将由前一组验证器签名。 基于此,它可以获得最后几个masterchain块,或者至少它们的头和验证器签名,并将它们作为验证完整节点提供的Merkle证明的基础。
2.4 分割和合并段
黄金区块链最具特色和独特的特点之一是它能够在负载过高时自动将分片链分成两部分,并在负载下降时将它们连接在一起(参见2.1.10)。 我们需要详细讨论这一点,因为它的独特性和整个项目的可扩展性的重要性。
2.4.1。 段(分片)配置。 回想一下,在任何给定的时间,每个工作链w被分成一个或多个段(w,s)(见2.4.8)。 这些段可以由二叉树的叶子表示,具有根(w,θ)和每个非叶子节点(w,s)具有相关元素(w,s.0)和(w,s.1)。 因此,属于工作链w的每个帐户,一个分片,以及知道当前分片链配置的每个人都可以定义一个包含account_id的段(w,s):这是唯一的分片,二进制字符串s是account_id前缀。 分片配置是一个二进制分片树或一个给定的w(对应于二叉树段的叶子)的所有活动(w,s)的集合,这是masterchain状态的一部分,任何跟随masterchain的人都可以使用。21
21事实上,段配置完全由主链块的最后一个导数决定;这使得访问段配置更容易。
2.4.2。 段的最新配置和状态。 回想一下,最近的shardchain块的哈希值包含在每个masterchain块中。 这些哈希被组织在段的二叉树中(实际上,树的集合,每个工作链一个)。 因此,每个主链块包含最近的段配置。
2.4.3。 宣布和实施段的配置变化。
段的配置可以通过两种方式改变:要么段(w,s)可以分为两个段(w,s.0)和(w,s.1),要么两个"兄弟"(w,s.0)和(w,s.1)可以组合成一个段(w,s)。 这些块拆分/合并操作是预先声明的(例如,26;这是一个可配置的参数),首先在相应的shardchain块的"头"中,然后在引用这些shardchain块的主链块中。 对于所有利益相关者来说,此预先公告是必要的,以便为计划的更改做准备(例如,创建多播网络复盖以分发新创建的段的新块,如第3.2条所述)。 然后提交更改,首先在(头)shardchain块中(在拆分和合并的情况下,两个段的块必须提交更改),然后传播到masterchain块。 因此,主链不仅在创建之前定义了最近的配置段,而且还定义了下一段配置。
2.4.4新段的验证器任务组。 回想一下,每个段,即每个分片链,通常分配了一个子集验证器(任务组),旨在在相应的分片链中创建和验证新块(参见2.3.8)。 这些目标群体被选定一段时间(大约一小时),并且事先已知(也大约一小时),在此期间保持不变。22但是,由于拆分和合并操作,在此期间段的实际配置可能会发生变化。 您必须将任务组分配给新的分段创建者。 请注意,任何活动段(w,s)要么是某些唯一定义的源段(w,s1)的后代,这意味着s1是s的前缀,要么是原始段(w,s1)的子树的根,其中s将是每个s1的前缀。 在第一种情况下,我们只需将原始分片(w,s1)的任务组作为新分段(w,s)的任务组。 在后一种情况下,新段(w,s)的任务组将是段树中(w,s)后代的所有原始段(w,s1)的组的联合。 因此,每个活动段(w,s)被分配一个明确定义的验证器子集(任务组)。 当分片拆分时,两个后代都继承原始分片的整个任务组。 合并两个分片时,它们的任务组也会合并。 任何监控主链状态的人都可以为每个活动段计算任务组验证器。
22如果某些验证程序由于对无效块进行签名而暂时或永久被禁止,则会自动将它们从所有任务组中排除。
2.4.5.原任务组负责期间对拆分/合并操作的限制。将考虑段的新配置,新分配的验证器子集(任务组)将自动分配给每个段。在此之前,您需要对拆分/合并操作施加一定的限制;否则,原任务组可以完成检查2 k 条分片链是否有大k,同时如果原段快速分裂成2k 个新段。这是通过对活动段配置从原始段配置(目前用于选择验证器任务组)中删除多远施加限制来实现的。例如,如果 s1< /sup> 是 s 的前驱(即 s1 是二进制串 s 的前缀),如果 s1 是 s 的后继(即s 是 s1 的前缀)。否则,不允许进行拆分或合并操作。粗略地说,在一组特定的验证者任务组的职责期间,对段划分的数量(例如,三个)或它们的组合(例如,两个)施加了限制。一旦通过合并或拆分创建了一个段,它在一定时间内(一定数量的块)不能更改。
2.4.6。 确定是否分离操作。 Shardchain的拆分操作是由某些形式条件启动的(例如,如果对于64个连续的shardchain块,块至少有90%满)。 这些条件由shardchain任务组控制。 如果他们失败第一个标志 ; "split provisioning"包含在新shardchain块的标题中(并通过引用此shardchain块扩展到主链块。)然后,在几个块之后,"split commit"标志包含在shardchain块头中(并传播到下一个主链块。)
2.4.7。 执行拆分操作。 在分片链(w,s)的块B中启用"split commit"标志后,该分片链中不能有后续块B0。 相反,将创建两个块B10和B11(w,s.0)和(w,s.1),将块B作为其前一个块(并且它们都将在标题中使用标志指示该段刚刚被分割)。 下一个主链块将包含新段块B10和b11的哈希; 不允许包含新块b1shardchain(w,s)的哈希,因为"split commit"事件已经在前一个主链块中提交。 请注意,这两个新的分片链将由与旧的相同的验证器进行验证,因此它们将自动拥有其状态的副本。 就无限分割范式而言,状态分离操作本身非常简单(参见2.2.2)。
2.4.8。 确定是否需要进行合并操作。 在某些形式条件下也需要进行分片合并操作(例如,如果对于64个连续块,两个shardchains兄弟块的大小总和不超过最大块大小的60%)。 对于这些形式条件,您还应该考虑这些块花费的gas总量,并将其与当前块gas限制进行比较,否则块可能很小,因为有一些密集的计算会阻止包含更多事务。 这些条件由相关段(w,s.0)和(w,s.1)的验证器目标组控制。 请注意,相对于超立方体路由,相关段必然是邻居(参见2.4.19),因此来自任何段的任务组的验证器将对相关段的跟踪有一定的控制权。 当满足这些条件时,其中一个验证程序子组可以通过发送特殊消息向另一个验证程序子组建议它们合并。 然后,他们被分组成一个临时的"联合工作队",具有联合成员资格,能够运行BFT共识算法,分发和阻止更新,必要时阻止候选人。 如果他们就合并的需要和准备达成共识,"merge prepare"标志将传递给每个分片链的某些块的头,以及相关段任务组至少三分之二的验证者的签名(并分发给下一个主链块,以便每个人都可以为最早的重新配置做好准备)。 但是,他们继续为某些预定义数量的块创建单独的shardchain块。
2.4.9。 执行合并操作。 一旦两个原始目标组的合并验证器准备好成为合并分片链的验证器(这可能包括来自相关分片链段的状态转移和状态池操作),他们在其分片链的块头中提交"merge commit"标志(此事件传播到下一个主链块),并停止在单独的分片链中创建新块(合并提交标志出现后,禁止在单独的分片中创建块)。 相反,创建一个组合的shardchain块(组合两个原始任务组),在其"头"中引用它的两个"前面的块"。 这反映在masterchain masterchain的下一个块中,该块将包含合并分片链的新创建块的哈希值。 之后,合并的任务组继续在合并的分片链中创建块。
3. 金数字网络
任何区块链项目不仅需要块格式规范和块验证规则,还需要用于分发新块,发送和收集交易客户端等的网络协议。 每个区块链项目都必须配置专用的对等网络。 这个网络应该是点对点的,因为区块链项目期望去中心化,所以你不能依赖集中的服务器组而使用传统的客户端-服务器架构,如经典的网上银行应用。 即使客户端(如带有加密货币钱包的智能手机应用程序)需要以客户端-服务器风格连接到完整节点,如果之前的节点出现故障,则实际上可以自由连接到另一个完整节点,前提是连接到完整节点的协议已经足够标准化。
虽然单区块链项目(如比特币或以太坊)的网络需求可以很容易地满足(基本上你需要建立一个"随机"的点对点复盖网络,并通过gossip协议将所有 因此,黄金区块链的网络部分和黄金数字项目作为一个整体至少应该进行简短的讨论。 由于需要更复杂的网络协议来支持黄金区块链,因此它们可以很容易地用于不一定与黄金区块链的直接需求相关的目的,从而在黄金数字生态系统中创造新服务提供更多的机会和灵活性。
3.1数据报网络层
构建Gold数字网络协议的基石是抽象网络层(数据报)。 这允许所有节点接受由256位"抽象网络地址"表示的某些"网络标识符"和消息(作为第一步相互发送数据报),仅使用这些256位网络地址来识别发送者和接收者。 特别是,没有必要担心IPv4或IPv6地址,UDP端口号等。;它们被抽象网络层隐藏。
3.1.1。 抽象的网络地址。 抽象网络地址或抽象地址是256位整数,基本上等于256位ECC公钥。 该公钥可以任意生成,因此可以根据节点的喜好创建尽可能多的不同网络Id。 但是,您需要知道适当的私钥来接收(和解密)用于此类地址的消息。 事实上,该地址不是公钥; 相反,它是序列化TL对象的256位哈希(Hash=sha256),它可以描述几种类型的公钥和地址,具体取决于其构造函数(先4个字节)。 在最简单的情况下,此序列化TL对象仅由4字节幻数和256位椭圆曲线密码(ECC)公钥组成;在这种情况下,地址将等于此36字节结构的哈希值。 但是,可以使用2048位RSA密钥或任何其他公共密钥加密方案来代替。 当一个节点得知另一个节点的抽象地址时,它还必须接收它的"preimage"(即哈希等于抽象地址的序列化TL对象),否则它将无法加密并发送数据报到这个地址。
3.1.2。 较低级别的网络。 UDP的实现。 在Gold网络的所有组件中,一个(抽象数据报的网络层)能够(不满意)将抽象数据报从一个地址发送到另一个地址。 原则上,抽象数据报网络层(ADNL)可以通过各种现有的网络技术来实现。 但是,如果UDP不可用,我们将通过UDP在IPv4/IPv6网络(如互联网或内部网)上实现此功能,并使用可选的TCP协议。
3.1.3。 ADNL通过UDP的最简单的情况。 将数据报从抽象发件人地址发送到任何其他抽象地址(具有已知原型)的最简单情况可以如下实现。 假定发件人以某种方式知道收件人的目的地址所属的收件人的IP地址和UDP端口,并且收件人和发件人都使用从256位ECC公钥派生的抽象地址。 在这种情况下,发送者只需增加数据报、正在发送的ECC签名(使用私钥)和源地址(如果接收者不知道,则为源地址的原型)。 结果使用嵌入在UDP数据报中的收件人公钥进行加密,并发送到收件人的已知IP地址和端口。 由于UDP数据报的前256位包含一个抽象地址,接收器可以确定需要哪个私钥来解密其余的数据报。 只有这样,发件人的身份才会被披露。
3.1.4。 一个不太安全的路径,发件人的地址以明文形式显示。 有时,当收件人和发件人地址以明文形式存储在UDP数据报中时,安全方案是不够的;发件人的私人地址密钥和收件人的公共密钥使用ECDH(椭圆曲线Diffie-Helman曲线)组合在一起,以创建一个256位共享密钥,随后使用该密钥,以及未加密形式中包含的随机256位值,以获得用于加密的AES密钥。 完整性可以被提供,例如,通过在加密之前将数据的原始明文的散列组合成明文。 这种方法的优点是,如果预期在两个地址之间交换多个数据报,则只能计算一次共享秘密,然后缓存;然后不再需要较慢的椭圆曲线操作来加密或解密以下数据报。
3.1.5。 频道和频道Id。 在最简单的情况下,包含嵌入式Gold ADNL数据报的UDP数据报的前256位将等于收件人地址。 但是,它们通常组成频道ID。 有不同类型的渠道。 其中一些是点对点的; 它们是由双方创建的,他们希望将来交换大量数据,并通过交换3.1.3或3.1.4中所述的加密多个数据包,通过运行经典或椭圆曲线Diffie-Hellman曲线(如果需要额外的安全性)生成共享密钥,或者只是一个,创建随机共享密钥并将其发送给另一方。 在这之后,信道ID是从共享的秘密与一些额外的数据(如发送者和接收者地址)导出的,例如,通过散列,这个ID被用作UDP数据报的前256位,包含用这个共享的密钥加密的数据。
3.1.6。 该通道作为隧道ID。 一般而言,"信道"或"信道ID"简单地选择接收方已知的方式来处理传入的UDP数据报。 如果通道是抽象目的地址,则按照3.1.3或3.1.4中指定的方式执行处理;如果通道是3.1.5中讨论的建立点到点通道,则处理包括使用共享密钥对数据报进行解密,如前所述。 特别地,信道ID可能实际上选择为"隧道",当直接接收者简单地将接收到的消息发送到其他人-实际接收者或另一代理服务器时。 一些加密或解密步骤(类似于"洋葱路由"[6]或甚至"大蒜路由"30),可以使得沿着路径的不同信道ID可用于重新加密转发的分组(例如,对等信道可用于将 因此,对"隧道"和"代理"的一些支持-有点类似于TOR或I2P项目提供的支持-可以在Gold数据报网络抽象层级别添加,而不会影响所有高级Gold数字网络协 此功能由Gold代理服务使用(请参阅4.1.11)。
30https://geti2p.net/en/docs/how/garlic-routing
3.1.7。 空通道和引导问题。 黄金ADNL节点将有一些"邻居表",其中包含有关其他已知节点的信息,例如它们的抽象地址和前缀(即公钥)以及它们的IP地址和UDP端口。 然后,它将逐渐扩展此表,使用从这些已知节点获得的信息作为对特殊查询的响应,有时还会修剪过时的记录。 但是,当一个Gold ADNL节点刚刚启动时,可能会发生它不知道任何其他节点,可能只知道该节点的IP地址和UDP端口,而不知道它的抽象地址。 例如,如果light客户端无法访问任何先前缓存的节点,则会发生这种情况,任何节点都将在软件中进行硬编码,并且必须提示用户输入节点的IP地址或DNS域, 在这种情况下,节点将发送数据包到一个特殊的节点-"零通道"。 这并不需要知道接收者的公共数据(但消息必须包含发送者的ID和签名),因此消息无需加密即可传输。 它通常只用于获取收件人的身份(可能是专门为此目的创建的一次性身份),然后以更安全的方式开始通信。 一旦至少有一个节点已知,很容易填充"邻居表"和"路由表"以获取更多记录,从发送到已知节点的特殊请求的响应中学习它们。 并非所有节点都需要处理发送到空通道的数据报,但用于加载轻型客户端的节点应支持此功能。
3.1.8。 ADNL上的TCP类型流协议。 ADNL是一种基于256位抽象地址的不可靠(小尺寸)数据报协议,可用作更复杂网络协议的基础。 例如,您可以使用ADNL作为抽象ip替换来构建类似TCP的流协议。 然而,Gold数字项目的大多数组件不需要这样的流协议。
3.1.9。 RLDP或通过adnl可靠的大型数据报协议。 一个强大的基于ADNL的任意大小的数据报协议,称为RLDP,被用来代替类似TCP的协议。 这种强大的数据报协议可用于将RPC请求发送到远程主机并从远程主机接收响应(请参阅4.1.5)。
3.2 3.2网络复盖和组播消息
在像Gold Blockchain这样的多区块链系统中,即使是完整的节点通常也有兴趣获得更新(即新块),只是一些碎片链。 为此,应该在Gold数字网络中构建一个特殊的复盖(辅助)网络,在3.1中讨论的ADNL协议之上,每个分片链一个。 因此,您需要创建对任何想要参与的节点开放的任意轴向子网。 这些复盖网络将运行基于ADNL的特殊八卦协议。 特别是,这些gossip协议可用于在这样的子网内分发(发送)任意数据。
3.2.1。 复盖网络。 复盖(子)网络只是在一些较大的网络中实现的(虚拟)网络。 通常,只有更广泛的网络的一些节点参与复盖子网,并且这些节点之间的一些"链接",物理或虚拟的,是复盖子网的一部分。 因此,如果生成树网络表示为一个图形(在数据报网络如ADNL的情况下可能是一个完整的图形,其中任何节点都可以轻松地与其他任何节点交换数据),则复盖子网是该图形的一个子图。 在大多数情况下,复盖网络是使用一些建立在较大网络的网络协议上的协议来实现的。 它可以使用相同的地址作为一个更大的网络,或使用自定义地址。
3.2.2。 在黄金数字复盖网络. Gold Digital中的复盖网络建立在3.1中讨论的ADNL协议之上;它们使用256位ADNL抽象地址,就像复盖网络中的地址一样。 每个节点通常选择其抽象地址中的一个,以使其在网络复盖中的地址加倍。 与ADNL不同,Gold数字叠加网络通常不支持向任意其他节点发送数据报。 相反,一些"半永久性"链接在一些节点之间建立(相对于所讨论的复盖网络而言,称为"邻居"),并且消息通常通过这些链接发送(即从节点到其邻居之一)。 因此,Gold数字复盖网络是ADNL网络的(完整的)图内的(通常不完整的)子图。 Gold数字叠加网络中的邻居链路可以使用专用的ADNL对等通道来实现(参见3.1.5)。 复盖网络中的每个节点都维护一个邻居列表(相对于复盖网络),其中包含它们的抽象地址(它们在复盖网络中用于标识它们)和一些通信数据(例如,用于与
3.2.3。 私有和公共复盖网络。 一些复盖网络是公共的,这意味着任何节点都可以随意加入它们。 其他只能允许某些节点的私有节点(例如,可以将其Id证明为验证器的节点)。 一些专用复盖网络甚至可能为"一般公众"所不知。 有关此类复盖网络的信息仅提供给某些受信任的节点;例如,可以使用公钥对其进行加密,并且只有具有密钥副本的节点才能解密此信息。
3.2.4。 集中叠加系统。 一些复盖网络由一个或多个节点集中控制,或由知名公钥的所有者控制。 其他是分散的,这意味着没有特定的节点负责。
3.2.5。 连接到复盖网络。 当一个节点想要加入复盖网络时,它必须首先知道它的256位网络ID,通常等于sha256描述一个复盖网络-TL-序列化对象(参见2.2.5),它可以包含例如复盖网络 有时您只需在Gold DHT中查看复盖网络描述即可从网络ID中恢复复盖网络描述。 在其他情况下(例如,对于专用复盖网络),您需要获取网络描述以及网络ID。
32. 或者,抽象地址可以存储在DHT中,如3.2.12中所述。
3.2.6。 搜索复盖网络。 除了节点之外,还需要知道加入叠加网络的网络ID和网络描述,并找到至少一个属于此网络的节点。 对于不想加入复盖网络但只想进行通信的节点来说,这也是必要的;例如,可能有一个网络复盖设计用于收集和分发特定分片链的交易候选者,并且客户端可能希望连接到任何节点以提供交易。 用于确定复盖网络位置的方法在对此网络的描述中定义。 有时(特别是对于专用网络)您需要已经知道成员节点才能加入。 在其他情况下,某些节点的抽象地址包含在网络描述中。 一种更灵活的方法是在网络描述中指定只负责网络的中央权威机构,抽象地址将通过由该中央权威机构签名的某些DHT密钥的值可用。 真正分散的公共复盖网络可以使用 中描述的"分布式torrent tracker",这也是用Gold DHT实现的。
3.2.7。 搜索复盖网络的更多成员。 创建链接。 当发现复盖网络的一个节点时,可以向该节点发出特殊请求,请求其他成员的列表,例如请求节点的邻居或其随机选择。 这允许连接成员通过选择一些最近获得的网络节点并与它们建立连接(如第3.2.2条规定的专用点对点通道ADNL)来填充其与复盖网络相关的"邻接"或"邻 之后,特殊消息被发送到所有邻居,表明新成员准备在复盖网络中工作。 邻居在其邻居列表中包括指向新成员的链接。
3.2.8。 维护邻居列表。 开销网络节点必须不时更新其邻居列表。 一些邻居,或至少链接(通道)到他们,可能会停止响应;在这种情况下,这些链接应该被标记为"暂停",如果一些尝试重新连接到这些邻居失败,链接应该被销毁。 另一方面,每个节点有时会从随机选择的邻居请求其邻居列表(或其随机选择),并使用其自己的邻居列表的部分更新,添加到它的一些最近发现的节点,
3.2.9。 随机子图的复盖网络。 因此,复盖网络成为ADNL网络内的随机子图。 如果每个顶点的程度至少为三(即,如果每个节点连接到三个邻居),则已知这个随机图被连接的概率几乎等于一。 更确切地说,具有n个顶点的随机图断开的概率呈指数小,如果n≥20,则可以完全忽略该概率。 (当然,这并不适用于全局网络分区,分区的不同侧上的节点无法了解彼此。)但另一方面,如果n小于20,则每个顶点至少有十个邻居就足够了。
3.2.10。 Gold数字叠加网络经过优化,可降低延迟。 Gold数字叠加网络优化了由先前方法生成的"随机"网络图,如下所示。 每个节点尝试以最少的往返时间保留至少三个邻居,很少更改"快速邻居"列表。 与此同时,它还具有至少三个完全随机选择的其他"慢邻居",因此复盖网络图将始终包含一个随机子图。 这对于确保连通性和防止叠加网络分裂为多个不相关的区域子网是必要的。 还选择和存储至少三个具有中间舍入时间以某个常数(实际上是快邻居和慢邻居的往返时间的函数)为界的"中间邻居"。 因此,复盖网络图仍保留足够的随机性以进行连接,但针对较低的延迟和较高的吞吐量进行了优化。
3.2.11。 复盖网络中的八卦协议。 复盖网络通常用于运行所谓的gossip协议之一,这是一个全局目标,允许每个节点只与其邻居进行通信。 例如,gossip协议用于构建(不太大)复盖网络的所有成员的近似列表,或者用于计算(任意大)复盖网络的成员数量的估计值,只使用每个节点上有限的内存量(详
3.2.12。 复盖网络作为广播域。 在复盖网络上运行的gossip协议中最重要的事情是广播协议,旨在将网络中的任何节点(或可能是发送方分配的节点之一)生成的广播消息传播到所有其他节 事实上,有几种广播协议针对不同的用例进行了优化。 其中最简单的接收新的广播消息,并将它们中继给尚未发送此消息副本的所有邻居。
3.2.13。 更复杂的广播协议。 某些应用可能需要更复杂的广播协议。 例如,要广播大小很大的消息,发送邻居不是新接收的消息本身,而是其散列(或一组新消息的散列)是有意义的。 邻居可以使用3.1.9中讨论的健壮大数据报协议(RLDP)检查要传输的消息的先前看不见的哈希值后请求消息本身。 因此,新消息将只从一个邻居加载。
3.2.14。 检查复盖网络的连接。 连接复盖网络的能力您可以检查该复盖网络中是否存在已知节点例如复盖网络的"所有者"或"创建者"。 然后,有问题的节点只需将时间转换为包含当前时间,序列号及其签名的临时短消息。 任何其他节点可以确保它仍然连接到叠加网络,如果它不久前收到这样的广播。 该协议可以扩展到多个已知节点的情况; 例如,所有这些节点都将发送此类广播,而所有其他节点都将接收广播,其中超过一半的已知节点。 在用于将新块(或只是新块头)传播到特定分片链的复盖网络的情况下,节点检查连接性的好方法是跟踪最后接收的块。 由于一个块通常每五秒生成一次,如果接收到一个新块超过三十秒,则节点可能已与复盖网络断开连接。
3.2.15。 流广播协议。 最后,还有用于Gold数字复盖网络的广播协议的流,例如,用于在某些分片链("任务组"分片链)的验证器之间分配候选阻塞,当然,该分片链为此创建了一个专用复盖网络。 可以使用相同的协议将新的shardchain块分发给该shardchain的所有完整节点。 这个协议已经在2.6.10中描述了:一个新的(大的)消息广播被分成n千比特的片段; 这些块的序列通过擦除代码(例如Reed-Solomon或fountain代码(例如RaptorQ代码[9][14])来补充M≥N个数据块,并且这些M个块按片段编号的升序发送给所有邻居。 参与节点收集这些块,直到他们能够恢复原始的大消息(你需要成功地获得至少N个块来做到这一点),然后指示他们的邻居停止发送流的新块,因为现在这些节点可以自己生成后续块,具有原始消息的副本。 这样的节点继续生成流的后续块,并将它们发送到它们的邻居,除非邻居反过来表明这不再是必要的。 这样,节点在进一步传播之前不需要下载完整的大消息。 这将最大限度地减少广播延迟,特别是当与3.2.10中描述的优化相结合时。
3.2.16。 基于现有的复盖网络构建新的复盖网络。 有时您不想从头开始创建开销网络。 相反,一个或多个预先存在的复盖网络是已知的,并且在新复盖网络中的成员资格预期与在这些复盖网络中的组合成员资格重叠。 一个重要的例子是当黄金分片链被分成两个部分或两个部分被组合成一个时(见2.4)。 在第一种情况下,必须构建复盖网络,用于将新块传播到每个新段的完整节点; 然而,这些新的网络复盖中的每一个预计将包含在块分配网络中(并且占其成员的大约一半)。 在第二种情况下,用于分配新块的复盖网络的合并段将由大约与两个复盖网络的联合成员相关联的两个联合段组成。 在这样的情况下,对新复盖网络的描述可以包含对相关现有复盖网络列表的显式或隐式引用。 希望加入新复盖网络的节点可以检查这些现有网络之一的成员,并询问这些网络中的邻居是否对新网络感兴趣。 如果答案是肯定的,您可以为这些邻居创建新的点到点通道,并且它们可以包含在新网络复盖的邻居列表中。 该机制并不完全取代第3.3.6和3.3.7段所述的一般机制,而是并行运行,并用于填充邻居列表。 这是必要的,以防止新的复盖网络意外分裂成几个不相关的子网。
3.2.17。 复盖网络上的复盖网络。 另一个有趣的情况是在网络外进行即时价值转移的黄金支付("闪电网络");见5.1)。 在这种情况下,首先构建一个复盖网络,包含闪电网络的所有中转节点。 然而,其中一些节点已经在区块链中建立了支付通道;除了3.2.6,3.2.7和3.2.8中描述的共享复盖网络算法选择的任何"随机"邻居之外,它们必须始终是该复盖网络中的邻居。 这些已建立支付渠道的邻居的"永久链接"使用"闪电网络"协议,从而有效地在跨越网络(几乎总是连接)内创建复盖子网(如果出现错误,不一定连接)。
4. 黄金数字服务和应用
我们在一定程度上讨论了黄金区块链和黄金网络技术。 现在我们将解释一些将它们结合起来以创建广泛的服务和应用程序的方法,并讨论Gold Digital project本身将提供的一些服务,无论是从一开始还是以后。
4.1实施黄金数字服务的策略
4.1.1。 应用程序和服务. 我们将使用单词"应用程序"和"服务"互换使用。 但是,有一个微妙的和有点模糊的区别:应用程序通常直接向用户提供一些服务,而服务通常由其他应用程序和服务使用。 例如,Gold Storage是一种服务,因为它被设计为代表其他应用程序和服务存储文件,尽管用户可以直接使用它。 假设的"facebook到区块链"(见6.2.13),如果它可以通过黄金网络访问(即作为"黄金服务"实现,见4.1.6),而是一个应用程序。
4.1.2。 应用的位置:在电路链外,或混合。
为Gold Digital生态系统设计的服务或应用程序必须存储数据并进行处理。 这导致应用程序和服务的以下分类:
•网络应用程序(见4.1.4):所有数据和处理都位于黄金区块链中。
•离网应用程序(见4.1.5):所有数据和处理都位于黄金区块链之外,通过黄金网络访问的服务器上。
•混合应用程序(见4.1.7):一些数据和处理托管在Gold区块链上;其余托管在可通过Gold网络访问的非网络服务器上。
4.1.3。 集中化:集中和分散或分布式应用程序。 另一个分类标准是应用程序(或服务)是否依赖于集中式服务器集群或真正的"分布式"(参见4.1.9)。 所有网络应用程序都是自动分散和分布式的。 非网络和混合应用程序可以有不同程度的集中化。 现在让我们更详细地查看上述功能。
4.1.4。纯链上应用程序:位于区块链上的分布式应用程序或“Dapps”。 4.1.2 中提到的一种可能的方法是将“分布式应用程序”(通常缩写为“dapp”)完全部署在黄金区块链上,作为单个智能合约或一组智能合约。所有数据都将作为这些智能合约持久状态的一部分进行存储,并且与项目的所有交互都将通过发送到这些智能合约或从这些智能合约接收的(黄金区块链)消息完成。我们已经在 6.2.13 中讨论过这种方法有其缺点和局限性。它也有它的优点:这样的分布式应用程序不需要服务器来运行或存储其数据(它在验证器硬件的“区块链中”运行)并且具有极高的阻塞(拜占庭)可靠性和可用性。这种分布式应用的开发者不需要购买或租用任何设备;你只需要开发软件(智能合约的代码)。之后,他将有效地从验证者那里获得计算能力,并以 AUR 支付,要么自己承担,要么把这个负担放在用户的肩上。
4.1.5。 清洁网络服务:"黄金网站"和"黄金服务"。 一个极端的选择是在某些服务器上部署服务,并通过3.1中描述的ADNL协议以及可能通过一些高级协议(如3.1.9中讨论的RLDP)向用户提供服务,该协议可以以任何可配置的格式向服务发送RPC请求,并接收对这些请求的响应。 因此,该服务将与网络完全断开,并将位于Gold数字网络中,而无需使用Gold区块链。 黄金区块链只能用于定义 中指定的抽象地址或服务地址,可能使用诸如Gold DNS 来促进将域人类可读字符串转换为抽象地址。
ADNL网络(黄金数字网络)类似于不可见的互联网项目(I2P),这种(几乎)纯粹的网络服务类似于所谓的"eep服务"(即以I2P地址作为入口点的服务,客户可通过i2p网络访问)。 位于黄金数字网络中的纯粹网络服务-"黄金服务","Eep服务"可以实现http作为客户端-服务器协议; 在Gold网络的上下文中,"Gold服务"可以简单地使用RLDP(参见3.1.9)数据报来传输HTTP请求和响应。 如果我们使用Gold DNS,以便使用人类可读的域名查看其抽象地址,则与网站的类比几乎是完美的。 您可以编写在用户机器上本地运行的专用浏览器或特殊代理("Gold proxy"),接受来自用户使用的常规web浏览器的任意HTTP请求(在浏览器配置中输入代理的本地IP地址和TCP端口之后),并通过Gold数字网络将这些请求转发到服务的抽象地址。 然后用户将具有类似于在万维网世界(WWW)中的体验的浏览体验。 在I2P中,这样的"eep服务"被称为"eep站点"。 您可以在黄金数字生态系统中轻松创建"黄金网站"。 黄金DNS等服务的存在促进了这一点,该服务使用黄金区块链和黄金DHT将(黄金)域名转换为抽象地址。
4.1.6。 电报信使作为黄金数字服务;通过RLDP MTProto。 我们想顺便提一下,Telegram Messenger用于客户端-服务器通信的MTProto协议可以很容易地集成到第3.1.9节讨论的RLDP协议中,从而有效地转换Telegram。 Gold代理技术可以透明地切换到在低于RLDP和ADNL协议的级别上实现的Gold站点或Gold服务的最终用户(参见3.1.6),这将使Telegram有效地无阻塞。 其他信使和社交网络也可以从这项技术中受益。
4.1.7。 混合服务:部分离线,部分在线。 一些服务可能采取混合的方法:大部分处理都是脱链的,但也有一些链内的一部分(例如注册他们对用户的义务,反之亦然)。 因此,一些状态仍然会存储在黄金区块链中(即在不可变的公共账本中),服务或其用户的任何不当行为都可能受到智能合约的惩罚。
4.1.8。 示例:离线保存文件;黄金存储。 这种服务的一个例子是由Gold Storage提供的。 以最简单的形式,它允许用户离线存储文件,只在链中存储要保存的文件的哈希值,并且可能是一个智能合同,其中一些其他方同意将文件保留在一段时间内进行预付款。 事实上,文件可以分成小块(例如1千字节),辅以擦除代码,如Reed-Solomon或fountain代码,Merkle树哈希可以为扩展的块序列构建,并且此Merkle树哈希可以在智能合约中发布,或与常规文件哈希一起发布。
这有点类似于文件存储在torrent中的方式。 一个更简单的文件存储形式是完全禁用的:你基本上可以为一个新文件创建一个"torrent",并使用Gold DHT作为该torrent的"分布式torrent跟踪器"。 这实际上可以很好地适用于流行的文件。 但是,您不能保证可用性。 例如,假设的"Facebook区块链"(见6.2.13)被选中以使其用户的个人资料照片完全脱机,在这种"种子"中,可能会失去普通(不是特别受欢迎)用户的照片,或者可能会在长时间内不提交这些照片。 黄金存储技术主要是离线的,但使用链上的智能合约来确保存储文件的可用性,可能更适合此任务。
4.1.9。 分散的混合服务或"雾服务"。 到目前为止,我们一直在讨论集中式混合服务和应用程序。 虽然链中的链上组件以分散和分布式的方式处理,位于区块链上,但链下组件依赖于服务提供商以通常的集中形式控制的一些服务器。 而不是使用一些专用的服务器,计算能力可以从大公司提供的云计算服务租用。 然而,这不会导致服务的非网络组件的分散化。 去中心化的方法来实现服务组件离网是创造一个市场,任何人都有必要的设备,并愿意租用他们的计算能力或磁盘空间将提供这些服务给那些谁需要 例如,可能有一个注册表(也可以称为"市场"或"交换"),所有对存储其他用户文件感兴趣的节点都发布其联系信息以及可用存储的潜力、可用性策略和价格。 如果对方同意,需要这些服务的人可以查看它们,在区块链上创建智能合约,并上传文件进行离线存储。 通过这种方式,像Gold Storage这样的服务变得真正去中心化,因为它不需要依赖任何集中式服务器集群来存储文件。
4.1.10。 例如:"雾计算"平台,作为分散的混合服务。 还有这样的分散混合使用应用的另一个例子,当需要执行某些特定的计算(例如,3D渲染或训练神经网络)时,通常需要特殊和昂贵的设备。 那么那些拥有这些设备的人可以通过类似的"交流"提供服务,而那些需要这些服务的人将通过智能合同注册的各方的义务租用它们。 这类似于"雾计算"平台,如Golem(https://golem.网络/)或SONM(https://sonm.io/)。
4.1.11。 示例:黄金代理权限是一个有雾的服务。 Gold Proxy提供了一个fog服务的另一个例子,希望提供服务(有或没有补偿)作为ADNL网络流量隧道的节点可以注册,需要它们的节点可以根据价格,延迟和带宽选择其中一个节点。 随后,可以使用黄金支付部分提供的支付渠道来处理这些代理服务的小额支付,并收取付款,例如每转移128Kb。
4.1.12。 例如:黄金支付是一个模糊的服务。 黄金支付平台(见5)也是这种分散混合应用的一个例子。
4.2连接用户和服务提供商
在4.1.9中,我们看到"雾服务"(混合分散服务)通常需要一些市场,交易所或注册管理机构,提供这些服务的人可以满足特定的服务。 这些市场可能被实现为网络、非网络或混合服务,集中或分布式。
4.2.1。 示例:连接到黄金支付。 如果有人想使用黄金支付(见5),第一步是找到至少一些现有的Lightning Network中转节点(见5.1),并根据他们的意愿与他们建立支付渠道。 某些节点可以使用"跨越"复盖网络找到,该复盖网络应包含所有lightning网络中转节点(见3.2.17)。 然而,目前尚不清楚这些节点是否准备创建新的支付渠道。 因此,需要一个注册表,以便准备创建新链接的节点可以发布其联系信息(例如,其抽象地址)。
4.2.2。 示例:将文件上传到Gold Storage。 同样,如果有人想将文件上传到Gold Storage,他们必须找到一些愿意签署智能合约的节点,迫使他们保留该文件的副本(或任何低于一定限制大小的文件)。 您需要一个提供用于存储文件的服务的节点注册表。
4.2.3。 网络、混合和非网络注册表。 这种服务提供商的注册表可以使用智能合约在网络上完全实现(在链中),该合约将注册表存储在其永久存储中,但是这将非常缓慢和昂贵。 混合方法更有效,其中网络上相对较小且很少修改的注册表仅用于指定某些节点(通过其抽象地址或公共密钥,可用于确定实际的抽象地址,如p所示。其提供集中式接入服务(centralized)。 最后,一个分散的,纯粹的离网方法可以由条款3.3中指定的条款组成,即那些希望提供服务或想要购买其他人的服务的人只需广播他们用他们的私钥签署的报价。 如果提供的服务非常简单,即使是提供的传输也可以是可选的:复盖网络本身的大致成员可以用作希望提供特定服务的人的"注册处"。 需要此服务的客户端可以查找(参见3.2.7)并查询此复盖网络的某些节点,然后在已知节点无法满足其需求时查询其邻居。
4.2.4。 在侧链中注册或交换。 实施分散混合注册的另一种方法是创建一个独立的区块链("侧链"),由自己的一组自我指定的验证器支持,这些验证器在网络智能合约中发布其身份数据,并为该专门区块链的所有相关方提供网络访问,收集交易候选者,并通过专门的复盖网络广播区块更新(见3.2)。 然后,该侧链的任何完整节点都可以维护自己的共享注册表副本(基本上等于该侧链的全局状态),并处理与该注册表关联的任意请求。
4.2.5。 在工作链中注册或交换工作链。 另一种选择是在黄金区块链中创建一个专门的工作链,专门创建注册管理机构,市场和交易所。 这可能比使用位于主工作链中的智能合约更有效率和更便宜(见2.1.11)。 但是,它仍然比在侧链中维护注册管理机构更昂贵(见4.2.4)。
5. 黄金AUR付款
黄金数字项目的最后一个组成部分将在本章中简要讨论。 黄金支付,(微型)支付渠道和"闪电网络"的平台。 这将允许您进行"即时"支付,而无需将所有交易提交到区块链,支付相关交易(例如,消耗的气体),并等待五秒钟以确认包含指定交易的区块。 这种即时支付的总开销是如此之小,您可以将其用于小额支付。 例如,文件存储服务可能会对每128千字节下载的数据向用户收取费用,或者付费代理服务器可能会对每128千字节的流量收取小额费用。
虽然黄金支付可能会在黄金数字项目的主要组成部分之后发布,但在开始时应该考虑一些因素。 例如,用于执行黄金区块链智能合约代码的黄金数字虚拟机(Gold VM,参见2.1.20)必须支持一些特殊的Merkle证明操作。 如果在原始设计中没有这样的支持,在稍后阶段添加它可能会成为问题(见6.1.16)。但是,我们将看到Gold VM附带了对"智能"支付渠道的自然支持 。
5.1支付渠道网络或"闪电网络»
5.1.1。 支付渠道的限制。 支付渠道对于期望在它们之间进行大量资金转移的各方非常有用。 但是,如果一个人只需要将钱转移到一个特定的收件人一次或两次,这将是不切实际的创建与他们的支付渠道。 除此之外,这意味着在支付渠道冻结大量资金,无论如何,至少需要两次区块链交易。
5.1.2。 支付渠道网络或"闪电网络"。 支付渠道网络通过支持跨支付渠道链的资金转移来克服支付渠道的限制。 如果A想将资金转移到E,他不需要与E建立支付通道。通过几个中间节点连接A到E的支付通道链就足够了-例如,四个支付通道:从A到B,从B到C,从C到D,从D到E。
5.1.3。 支付渠道网络的概述. 回想一下,支付渠道网络,也被称为"闪电网络",由一系列参与节点组成,其中一些节点在它们之间建立了长期支付渠道。 我们将看到,这些支付渠道必须在 的意义上是"智能"的。 当一个参与节点A想要将资金转移到任何其他参与节点E时,它试图找到连接网络a和e内的支付通道的路径。 当找到这样的路径时,它沿着这条路径执行"资金转移链"。
5.1.4。 链转账. 假设有一个从A到B,从B到C,从C到D,从D到E的支付渠道链。另外,假设A想要将x枚硬币传递给E。一种简化的方法是沿着现有的支付渠道将x枚硬币转移到B,并要求它将钱进一步转发给C。 因此,需要一种更复杂的方法,而不要求各方相互信任。 这可以通过以下方式完成。 我们生成一个大的随机数u并计算其哈希v=Hash(u)。 然后,我们创建一个承诺在B中支付x硬币,如果用哈希v表示的数字u,则在b的支付通道内。这个承诺包含v,但不包含u,这仍然是保密的。 之后,B在其支付渠道中向C创建类似的承诺。 他不怕做出这样的承诺,因为他知道A给他的类似承诺的存在。 如果C曾经提出了一个哈希解决方案,任务是收集B承诺的x硬币,那么B会立即将此解决方案发送给A,从A收集x硬币。然后创建从C到D和从D到E的类似承诺。 当承诺都到位时,a开始传输,将决定u传达给所有参与方-或者只是E.在本说明中列出了一些小细节。 例如,这些承诺应该有不同的到期日期,承诺的金额可能会在链上略有不同(B可能只承诺C x-y硬币,其中y是预先商定的少量过境费)。 我们忽略这些细节,因为它们对于理解支付渠道的工作方式以及如何在Gold Digital中实施并不太重要。
5.1.5。 支付渠道链中的虚拟支付渠道。 假设现在A和E期望彼此支付许多款项。 他们可以在区块链中创建一个新的支付渠道,但它仍然相当昂贵,因为一些资金将在这个非现金渠道中被阻止。 另一种选择是对每次付款使用5.1.4中描述的货币链汇款。 然而,这将涉及大量的网络活动和所有支付渠道的虚拟链中的大量交易。 另一种方法是在链中创建一个虚拟支付通道,将a和E连接在支付通道网络中。 要做到这一点,A和E为他们的支付创建一个(虚拟)区块链,就好像他们要在区块链中创建一个支付通道一样。 然而,他们没有在区块链中创建智能合约支付渠道,而是要求所有链接A和B,B和C的中间支付渠道,以此类推在它们内部创建一个简单的支付渠道,链接到a和E创建的虚拟区块链(见5.1.10)。 换句话说,现在根据a和E之间的最终结算存在每个中间支付通道内部的承诺转移资金。
如果虚拟支付渠道是单向的,这样的承诺可以很容易地实现,因为最终的不平衡δ将是非正的,所以简单的支付渠道可以在临时支付中创建,顺序与5.2.4相同。 它们的有效期也可以是相同的。 如果虚拟支付渠道是双向的,情况就会有点复杂。 在这种情况下,硬币转移承诺应根据最终计算分为两个半承诺,对于硬币的转移,向前方向δ-=max(0,-δ),反向方向δ+=max(0,δ)。 这些半承诺可以在中间支付渠道中独立创建,一个半承诺链在从A到E的方向上,另一个在相反的方向上。
5.1.6。 在lightning网络中搜索路径。 有一点还不清楚:A和E将如何找到在支付网络中连接它们的路径? 如果支付网络不是太大,可以使用类似OSPF的协议:支付网络的所有节点创建网络复盖(见3.2.17),然后每个节点通过gossip协议将所有可用的链接(即参与支付 最终,所有节点都将拥有所有支付渠道的完整列表,参与支付网络的节点可以自己找到最短路径-例如,通过应用Dijkstra算法的版本,考虑到支付渠道的"容量"(即可 一旦候选路径被发现,它可以通过包含完整路径的特殊ADNL数据报进行检查,并请求每个中间节点确认所讨论的支付信道的存在,并沿着该路径进一步转发 之后,您可以为链转移构建链和协议(见5.1.4)或开始在支付通道链中创建虚拟支付通道。
5.1.7。 优化。 这里列出了一些优化。 只有lightning网络的中转节点必须参与5.1.6中讨论的类似OSPF的协议。 希望通过lightning网络连接的两个"叶子"节点将相互通信它们所连接的中转节点列表(与它们建立了参与支付网络的支付渠道)。 然后可以检查从一个列表中转节点到从另一个列表中转节点的连接路径,如上文第5点所示。1.6.
5.1.8。 输出。 我们已经概述了黄金数字项目的区块链和网络技术如何足以完成创建黄金支付的任务,这是一个即时汇款和小额支付的平台。 该平台对于位于Gold Digital的服务非常有用,使他们能够在必要时轻松收集小额支付。
6.区块链项目的分类及对比
我们将通过将 TON 区块链与现有和提议的区块链项目进行比较来结束对 TON 区块链的简要讨论。但是,在此之前,我们必须介绍一个相当一般的区块链分类。基于此分类的特定区块链项目的比较推迟到第 6.2 条。
6.1 区块链项目分类
我们将通过将黄金区块链与现有和拟议的区块链项目进行比较来结束我们对黄金区块链的简短讨论。 但是,在这样做之前,我们必须引入一个相当普遍的区块链分类。 基于此分类的特定区块链项目的比较将推迟到第6.2条。
6.1.1 区块链项目的分类。 作为第一步,我们提出了一些区块链分类标准(即区块链项目)。 任何这种分类都有些不完整和肤浅,因为它应该忽略所审议项目的一些最具体和独特的特点。 然而,我们认为这是必要的第一步,也是区块链项目的大致地图。
我们正在考虑的标准列表如下:
•架构:单一区块链和多区块链架构(见6.1.2)。
•共识算法:"股权证明"或"工作证明"(见6.1.3)。
•*对于"股权证明"系统,确切的定义(2变体:DPOS和BFT;见6.1.4)
•*支持"任意"(图灵完成)智能合约(见6.1.6)。
多区块链系统有额外的分类标准(见6.1.7):
*块元素的类型和规则:同质,异质(见6.1.8),混合(见6.1.9)。 联合会(见6.1.10)。
•*内部或外部主链的缺失或存在(见6.1.11)。
•内置分段支持(见2.5.12)。 静态或动态分割(见6.1.12)。
•块元素之间的相互作用:松耦合和紧耦合系统(见6.1.14)。
6.1.2 单区块链和多区块链项目。 第一个分类是系统中的区块链数量。 最古老和最简单的项目由单个区块链(简称"单链项目")组成;更复杂的项目使用(或者更确切地说,计划使用)多个区块链("多链项目")。 具有单个区块链的项目通常更简单和更好的测试;他们经受住了时间的考验。 他们的主要缺点是低性能或最低的交易吞吐量,这是在十(比特币)的水平,以小于百23(复仇)每秒交易的通用系统。 一些专门的系统(如Bitshares)能够每秒处理数以万计的专门事务,这是因为需要将区块链的状态写入内存,以及对使用高度优化的代码执行的预定义特殊事务集的处理限制(这里没有虚拟机)。 多链多链项目承诺每个人都在等待的可扩展性。 他们可以支持更多的员工和更高的交易速度(每秒交易),而代价是更复杂的项目开发和实施。 因此,已经推出了几个多区块链项目,这是多渠道(多链)。 我们相信未来属于多区块链项目。
23仍然是15,但是。 一些以太坊更新计划交易速度要高出几倍。
6.1.3。 创建和验证块:"工作证明"或"共享证明"。 另一个重要的区别是使用的算法,创建和分发新块的协议,验证它们的有效性,并选择它们是否出现。 两个最常见的范式是工作证明(PoW)和权益证明(Pos)。 工作证明方法通常允许任何节点创建("挖掘")一个新块(并获得与挖掘块相关的一些奖励),如果它设法解决涉及计算大量哈希的计算问题。 在forks的情况下(例如,如果两个节点发布两个其他活跃但不同的块,跟随一个前一个),最长的fork获胜。 因此,区块链不变性的保证基于创建链所花费的工作量(计算资源):任何想要从该区块链创建分叉的人都需要重复这项工作来创建已创建块的替代版本。 要做到这一点,你需要控制超过50%的总计算能力用于创建新的块,否则替代叉将有一个指数低的机会成为最长的。 "股权证明"方法基于一些特殊节点(验证器)进行的大额投注(以加密货币计价),声称他们已经检查(确认)了一些区块,并发现它们是正确的。 验证者签署块并获得小额奖励; 但是,如果验证器被发现签署了错误的块并提供了证明,则其部分或全部份额将丢失。
因此,区块链的有效性和不变性的保证取决于区块链持续时间内验证者出价的总量。 权益证明方法更自然,因为它鼓励验证者(替换PoW矿工)执行有用的计算(您需要验证或创建新块,特别是通过执行块中列出的所有交易),而不是计算无用的哈希值。 因此,验证者将获得更适合处理用户交易的设备,以便获得与这些交易相关的奖励,从整个系统的角度来看,这似乎是一项非常有用的投资。 然而,证明的股权系统是有点难以实现,因为你需要提供许多罕见的,但可能的条件。 例如,一些恶意验证者可能密谋和破坏系统以赚取一些利润(例如,通过改变自己的加密货币余额)。 这导致了一些不平凡的博弈论问题。 简而言之,权益证明更自然,更有前途,特别是对于多用途项目(因为如果有许多区块链,工作量证明将需要高昂的计算资源),但更仔细地考虑和实施。 大多数目前正在运行的区块链项目,特别是最古老的项目(例如比特币,原始以太坊)都使用工作证明。
6.1.4。 用于证明出价的选项。 Vs DPOS BFT。 虽然工作量证明算法彼此非常相似,并且主要在开发新块时必须计算的函数的散列方面有所不同,但权益证明算法提供了更多的功能。 他们应该被分类 基本上,您需要回答以下关于权益证明算法的问题:
*谁可以产生("我的")一个新的块-任何完整的节点或只是一个(相对)小的验证者社区的成员? (大多数PoS系统要求由多个指定验证器之一生成和签名新块。)
•验证器是否通过签名来保证块的有效性,还是所有完整节点都必须自己验证所有块? (可扩展的PoS系统应该依赖验证器签名,而不是要求所有节点验证所有区块链的所有块)。
*下一个块块是否有指定的生产者,预先知道,这样没有其他人可以创建这个块?
*新创建的块最初是由一个验证器(其生产者)签名的,还是应该在一开始收集大部分验证器的签名?
根据这些问题的答案,实践中的差异归结为PoS的两种主要方法。 设计用于可扩展多链系统的大多数现代PoS算法可以回答前两个问题:只有验证器可以创建新块,并且它们保证块,而不需要所有完整节点自行验证所有块的有效性。 至于最后两个问题,他们的答案是高度相关的,基本上只留下两个主要选择:
•委托委托书(DPOS):每个区块都有一个着名的制造商名称;其他人无法生成此区块;新区块最初仅由其验证者签名。
•拜占庭容错(BFT)PoS算法:有一个已知的验证器子集,其中任何一个都可以提出一个新的块;在几个建议的候选项中选择实际的下一个块,这些候选项必须由大多数验证器验证并签名,然后才能发布到其他节点,这是通过宽容共识协议的拜占庭错误版本来实现的。
6.1.5。 DPOS和BFT PoS的比较。 BFT方法的优点是新创建的块从一开始就具有大多数验证器的签名,表明它是有效的。 另一个优点是,如果大多数验证器正确执行BFT共识协议,则根本不会出现分叉。 另一方面,BFT算法往往相当复杂,需要更多的时间来验证子集才能达成共识。 因此,不能太频繁地生成块。 这就是为什么我们期望黄金区块链(从这个分类的角度来看,这是一个BFT项目)每五秒钟只创建一次区块。 在实践中,如果验证器分布在世界各地,这个间隔可以减少到2-3秒(尽管我们不承诺这一点)。
DPOS算法的优点是它非常简单。 它可以经常生成新块-比如每两秒一次,甚至每秒一次,24由于它依赖于预先已知的分配块生产者。 但是,DPOS要求所有节点(或至少所有验证器)验证所有接收到的块,因为验证器生成和签名新块不仅确认了该块的相对有效性,而且还确认了它引用的前一个块的有效性以及链下所有块的有效性(在验证器的当前子集的责任期开始之前)。 验证器的当前子集有一个预定义的顺序,因此每个块都有一个指定的生产者(即期望验证器生成此块); 这些指定的生产者以圆形方式旋转。 一个区块首先只由其生产验证器签名;然后,当下一个区块产生,并且其生产者选择引用该区块而不是其前一个区块(否则,其区块将位于较短的链中,这可能会失去未来的"最长分叉"竞争)时,下一个区块的签名本质上是上一个区块的附加签名。
新块逐渐收集验证器签名,例如在创建下一个20个块所需的时间内收集20个签名。 完整的节点需要等待这二十个签名,或者检查块本身,从一个充分确认的块(比如二十个块之前)开始,这可能不是那么容易。 DPOS算法的明显缺点是,与提供这种信任级别的BFT算法(例如,20个签名)相比,在产生了20个块之后,新块(以及在其中进行的交易)只能达到相同的信任级别("递归信任",如2.3.28中所述)。 另一个缺点是DPOS使用"选择最长分叉"方法切换到其他分叉; 这使得分叉很可能,如果至少一些块生产者无法在我们感兴趣的东西之后产生后续的块(或者我们由于网络分区或复杂的攻击而无法观察到这些块)。
24有些人甚至声称DPOS块生成时间是半秒,如果验证器分布在多个大陆,这似乎并不现实。
我们认为BFT方法的实现更复杂,需要比DPOS更长的块之间的时间间隔,并且更适合于密集通信的多用途系统(见6.1.14),因为其他块链可以在查看新块中, 块)或等待接下来的六个块,以确保没有分叉出现,并自行检查新块(检查其他块的块可以在可扩展的多用途系统中变得令人望而却步)。 通过这种方式,可以实现可扩展性,同时保持高可靠性和可用性(见6.1.12)。 另一方面,对于不需要区块链之间快速交互的"松耦合"多链系统来说,DPOS可能是一个不错的选择-例如,如果每个区块链("工作链")是一个单独的分布式交换,并且块间交互仅限于罕见的令牌从一个工作链转移到另一个工作链(或者更确切地说,以接近1:1的速度交易一个山寨币("工作链")。
这是在BitShares项目中实际完成的,它非常成功地使用了DPOS。 总而言之,虽然DPOS可以生成新的块并更快地将事务包含在其中(具有较小的块间隔),但这些事务达到在其他区块链和应用程序中使用所需的信任级别,因为"已提交"和"不可变"比BFT系统慢得多,比如在30秒内25而不是5秒。 更快地启用事务并不意味着更快地提交事务。 如果需要快速的区块链交互,这可能是一个巨大的问题。 在这种情况下,您应该选择退出DPOS并选择BFT PoS。
25例如,EOS,现在提出的最好的DPOS项目之一,承诺45秒确认和块之间的交互延迟(见[5],"交易确认"和"链间通信延迟")。
6.1.6。 支持交易中的图灵完整代码,基本上是任意的智能合约。 区块链项目通常会在其区块中收集一些交易,这些交易会改变区块链的状态,并被认为是有用的(例如,将一定量的加密货币从一个帐户转移到另一个帐户)。 一些区块链项目可能只允许某些预定义的交易类型(例如,将价值从一个帐户转移到另一个帐户,前提是提供了正确的签名)。 其他人可能支持事务中的某些有限形式的脚本。 一些区块链支持在事务中执行任意复杂的代码,允许系统(至少在原则上)支持任意应用程序,前提是允许系统性能。 这通常与"图灵完整的虚拟机和脚本语言"(这意味着可以用任何其他计算机语言编写的任何程序都可以被重写以在区块链内运行)和"智能合约"(它们是驻留在区块链上的程序)相关联。 当然,对任意智能合约的支持使得系统非常灵活。
另一方面,这种灵活性是有代价的:这些智能合约的代码必须在某些虚拟机上执行,并且当有人想要创建或验证块时,每个块中的每笔交易都必须执行。 与预定义且不可变的一组简单事务类型的情况相比,这会减慢系统的速度,这些简单事务类型可以通过用c++(而不是某些虚拟机)等语言实现处理来优化。 最终,支持图灵就绪智能合约似乎在任何通用区块链项目中都是可取的;否则,区块链项目的设计者必须事先决定将使用哪些区块链应用程序。 比特币区块链中缺乏对智能合约的支持是创建以太坊区块链项目的主要原因。 在多用途系统(异构,见6.1.8)中,两全其美是可能的,支持一些区块链中的图灵完整智能合约(即 工作链)和其他高度优化的事务的一个小预设集。
6.1.7。 多链系统的分类。 到目前为止,该分类对于单链和多链系统都是有效的。 然而,多链系统允许更多的分类标准,反映了系统中各种区块链之间的关系。 我们现在将讨论这些标准。
6.1.8。 区块链的类型:同质和异构系统。 在多链系统中,所有区块链基本上可以是相同的类型,具有相同的规则(即使用相同的交易格式,一个虚拟机执行智能合约代码,使用相同的加密货币等)。)这种相似性显然被使用,但在区块链中有不同的数据。 在这种情况下,我们说该系统是均匀的。 否则,不同的区块链(通常称为workchains)可能有不同的"规则"。 然后我们说,该系统是异构的。
6.1.9。 混合异构-均质体系。 有时我们有一个混合系统,其中有多组区块链的类型或规则。 有许多具有相同规则的区块链,这一事实在任何地方都被使用。 混合异构同质系统是黄金区块链-这种系统的唯一例子。
6.1.10。 具有多个工作链的异构系统具有相同的规则或联盟。 在某些情况下,具有相同规则的多个工作链可能存在于异构异构系统中,但它们之间的相互作用与具有不同规则的区块链之间相同(即它们的相似性未显式使用)。 即使他们似乎使用"一个"加密货币,他们实际上使用不同的"altcoins"(加密货币的独立化身)。 有时他们甚至可以以接近1:1的速度转换这些山寨币。 然而,这不会使系统均匀,它仍然是遗传性和异质性。 这样一个具有相同规则的工作链的异构集合是一个联盟。 创建一个异构系统,允许您使用相同的规则(即联合会)创建多个工作链似乎是构建可扩展系统的廉价方法,但这种方法有许多缺点。 如果有人在许多工作中有一个具有相同规则的大型项目,他们不会得到一个大型项目,而是该项目的几个小例子。 这与聊天应用程序(或游戏)类似,其中任何聊天室(或游戏)中的成员不得超过50名,但通过创建新的房间以在需要时容纳更多用户来"扩展"。 其结果是,许多用户可以参与聊天或在游戏中,但我们可以说,这样的系统是真正的可扩展性?
6.1.11。 主链的存在,外部或内部。 有时,一个多用途(多链)项目有一个优秀的"masterchain"(有时称为"区块链控制"",例如,用于存储系统的整体配置(blainschains或工作链的所有活动链的总数),当前的验证器集合(用于. 有时,其他区块链通过提交最后一个区块的哈希值而不是"绑定"到主链(这也是黄金区块链)。 在某些情况下,masterchain是外部的,意味着它不是项目的一部分,而是其他一些预先存在的区块链,最初与新项目和不可知论者的使用完全无关。 例如,可以尝试使用以太坊区块链作为外部项目的主链框架,并为此目的向以太坊区块链发布特殊的智能合约(例如选择和惩罚验证者)。
6.1.12。 支持分段。 一些区块链项目(或系统)具有分段支持,这意味着几个(一定是同质的;见6.1.8)区块链被视为单个(高级)虚拟区块链的分段。 例如,您可以使用相同的规则创建256个链段("shardchains"),并仅将帐户状态保存在一个段中,根据其帐户代码的第一个字节进行选择。 分段是扩展区块链系统的自然方法,因为如果正确实施,系统中的用户和智能合约根本不需要知道分段的存在。 事实上,当负载过高时,将分片添加到现有的单链项目(如以太坊)。 另一种扩展方法是使用异类工作链的"联盟"如6.1.10中所述允许每个用户在自己选择的一个或多个工作链中保持自己的账户并在必要时将资金从一个工作链中的账户转移到另一个工作链基本上执行1:1的alcoin交易所操作。 这种方法的缺点已经在6.1.10中讨论过。 然而,分段不是那么容易以快速和可靠的方式实现,因为它涉及不同分段之间的大量消息。 例如,如果账户平均分布在N个段(分片)之间,并且唯一的交易是从一个账户到另一个账户的简单资金转移,那么只有一小部分(1/N)的所有交易将在单个区块链中执行;几乎所有(1-1/N)交易都涉及两个需要块间通信的区块链。 如果我们希望这些事务快速,我们需要一个快速的系统来在段之间传递消息。 换句话说,区块链项目应该在6.1.14中描述的意义上"紧密耦合"。
6.1.13。 动态和静态分割。 分段可以是动态的(如果必要时创建了其他分段)或静态的(当有预定义数量的分段最多只能通过硬分叉更改时)。 大多数分段建议是静态的;黄金区块链使用动态分段(见2.4)。
6.1.14。 区块链之间的相互作用:松散耦合和紧密耦合的系统。 多区块链项目可以根据复合区块链之间支持的交互水平进行分类。 最低级别的支持是区块链之间根本没有任何交互。 我们在这里不考虑这种情况,因为我们宁愿说这些区块链不是同一区块链系统的一部分,而只是同一区块链协议的单独实例。 下一个级别的支持是缺乏对区块链之间消息交换的任何特定支持,这使得原则上可能的交互不方便。 我们称这种系统为"松散耦合",它们需要在blainschains链之间发送消息并传递价值,就好像它们是属于完全不同的区块链项目的区块链(例如比特币和以太坊;想象两 换句话说,您必须在源区块链的块中指定传出消息(或事务生成)。 然后,他(或一些其他参与者)必须等待足够的确认(例如,给定数量的后续块)来考虑启动的交易"完美"和"不变",以便能够根据其存在执行外部操作。
只有这样,交易才能将消息中继到目标区块链对象(可能还有一个链接和Merkle存在于传出交易的证明)。 如果您在传输消息之前没有等待足够长的时间,或者如果在任何情况下由于其他原因发生分叉,则两个区块链的组合状态结果是不兼容的:消息被传递到第二个区块链,该区块链从未由第一个区块链创建(最终选择了分叉)。 有时通过标准化消息格式并将输入和输出消息队列放在所有工作链的块中(这在异构系统中特别有用)来添加对消息传递的部分支持。 虽然这在一定程度上有利于消息传递,但它在概念上与以前的情况并没有太大的不同,因此这些系统仍然是"松散耦合"的。
相反,"紧密耦合"系统包括特殊机制,以确保blainschains的所有链之间的快速通信。 期望的行为应该能够在原始区块链的块中产生后立即将消息传递到另一个工作链。 另一方面,预期系统具有刚性连接并在叉的情况下保持整体一致性。 虽然这两个要求乍一看似乎是矛盾的,但我们认为黄金区块链使用的机制(包括masterchain块中的分片链块哈希,使用"垂直"块提交无效块,见2.1.17;超立方体路由,即时超立方体路由,允许创建一个"紧密耦合"系统,可能是迄今为止唯一的系统。 当然,创建一个"松耦合"系统要容易得多;但是,快速高效的分割(见6.1.12)要求系统"紧密耦合"。
6.1.15。 简化分类。 区块链项目的几代人。 到目前为止,我们假设的分类将所有区块链项目划分为大量的类。 然而,我们使用的分类标准在实践中得到了充分的体现。 这使我们能够提供一种简化的"世代"方法来将区块链项目分类为现实的非常粗略的近似值,并提供一些示例。 尚未实施和部署的项目以斜体突出显示;这一代的最重要特征以粗体突出显示。
*第一代:单链,PoW,不支持智能合约。 例如:比特币(2009)和许多其他无趣的模仿者(莱特币,Monero,。..).
•第二代:单链,战俘,智能合约支持。 例如:复仇(2013年,部署在2015年),至少在其原始形式。
•*第三代:单链,PoS,智能合约支持。 例如:未来以太坊(2018或更高版本)。
•替代第三代(3*):多链,PoS,不支持智能合约,松散耦合。 示例:Bitshares(2013-2014,使用DPoS)。
*第四代:多链,PoS,智能合约支持,松耦合。 例如:EOS(2017年,使用DPOS),PolkaDot(2016年;使用BFT)。
•第五代:多链,带BFT的PoS,智能合约支持,与细分紧密耦合。 例子:黄金数字(2021)。
并非所有区块链项目都属于这些类别之一,但其中大部分都有代表。
6.1.16。 改变区块链项目的"基因组"的并发症
上述分类定义了区块链项目的"基因组"。 这个基因组是相当"刚性"的:一旦项目被许多人部署和使用,几乎不可能改变它。 需要一系列硬分叉(这将需要大多数社区的批准),即使如此,更改必须非常保守以保持向后兼容性(例如,更改虚拟机的语义可能违反现有的智能合约)。 另一种方法是创建新的"侧链",其规则不同,并链接到原始项目的区块链(或链)。 您可以将现有项目的区块链与单个区块链一起使用,作为全新独立项目的外部主链。26我们的结论是,一个项目的基因组是很难改变,一旦它被部署。 即使从PoW开始,并计划在未来用PoS替换它也是相当困难的。27将段添加到最初在没有他们支持的情况下开发的项目似乎几乎是不可能的。28在最初没有这些功能开发的项目(即比特币)中支持智能合约被认为是不可能的(或者至少是大多数比特币社区所不希望的),最终导致创建一个新的以太坊区块链项目。
26例如,Plasma项目计划使用以太坊区块链作为其(外部)主链;否则,它与以太坊几乎没有互动,这是由与以太坊项目无关的团队提出和实施的。
27在2017中,以太坊仍然试图从PoW转向组合的PoW+PoS系统;我们希望有一天这将成为一个真正的PoS系统。
28有分割以太坊追溯到2015的建议;目前还不清楚如何在不破坏以太坊或创建几乎独立的并行项目的情况下实施和部署。
6.1.17。 黄金区块链基因组。 如果有人想建立一个可扩展的区块链系统,你需要从一开始就仔细选择它的基因组。 如果系统打算在未来支持一些在部署时未知的其他特定功能,那么它应该从一开始就支持"异构"工作链(具有可能不同的规则)。 为了使系统真正可扩展,它必须从一开始就支持分割;只有在系统"紧密耦合"的情况下,分割才有意义(参见第4章)。 6.1.14),这反过来意味着masterchain的存在,一个快速的跨机构区块链消息系统,使用BFT PoS等等。 当所有这些影响都考虑在内时,为黄金区块链项目做出的大部分设计选择看起来很自然,几乎是唯一可能的选择。
6.2 与其他区块链项目的比较
Table 1: A brief overview of some notable blockchain projects.
项目 |
年 |
代 |
算法 |
自定义代码支持 |
区块链数量 |
R |
段在这里 |
Int. |
|
1 |
Bitcoin |
2009 |
1 |
PoW |
no |
1 |
|||
2 |
Ethereum |
2013, 2015 |
2 |
PoW |
yes |
1 |
|||
3 |
NXT |
2014 |
2+ |
PoS |
no |
1 |
|||
4 |
Tezos |
2017 |
2+ |
PoS |
yes |
1 |
|||
5 |
Casper |
2015, (2017) |
3 |
PoW/PoS |
yes |
1 |
|||
6 |
BitShares |
2013, 2014 |
3* |
DPoS |
нyes |
many |
гетер. |
no |
L |
7 |
EOS |
2016, (2018) |
4 |
DPoS |
yes |
many |
гетер. |
no |
L |
8 |
PolkaDot |
2016, (2019) |
4 |
PoS BFT |
yes |
many |
гетер. |
no |
L |
10 |
Cosmos |
2017 |
4 |
PoS BFT |
yes |
many |
гетер. |
no |
L |
11 |
Gold-Digital |
2021, (2022) |
5 |
PoS BFT |
yes |
many |
mixture |
dynamic |
T |
-异构/同质多通道系统(见6.1.8);
Int。 -链之间的相互作用,(L)游离或(T)密集(见6.1.14)。
我们通过在包含现有和拟议区块链项目的地图上找到它的位置来结束对黄金区块链及其最重要和独特功能的简短讨论。 我们使用第6.1条中描述的分类标准以统一的方式讨论不同的区块链项目并构建这样的"区块链项目地图"。 我们将此映射显示为表1,然后分别简要讨论几个项目,以表明它们可能不适合整体方案的功能。
6.2.1。比特币 [12]; https://bitcoin.org/。比特币(2009 年)是第一个也是最著名的区块链项目。这是一个典型的第一代区块链项目:它是单链的,使用工作量证明和“胜利的长分叉”分叉选择算法,它没有完整的图灵语言脚本(但是支持没有循环的简单脚本)。比特币区块链没有账户的概念;它使用 UTXO(未花费的交易输出)而不是模型。
6.2.2.以太坊 [2]; https://ethereum.org/. Ethereum (2015) 是第一个支持图灵的区块链——完整的智能合约。因此,这是一个典型的二代项目,也是其中最受欢迎的项目。它在单个区块链上使用工作证明,但具有智能合约。
6.2.3。 NXT; https://nxtplatform.org/. NXT (2014) 是第一个基于 PoS 的区块链和货币。它仍然是单链的,缺乏智能合约支持。
6.2.4。特所思; https://www.tezos.com/. Tezos(2018 年或之后)提出了一个基于一个区块链的 PoS 项目。我们在这里提到它是因为它的独特之处:它的 ev_block 解释函数不是固定的,而是由 OCaml 模块决定的,可以通过将新版本引入区块链来更新(通过为提议的更改收集投票)。因此,您将能够通过首先部署原版 Tezos 区块链,然后在所需的方向上逐渐改变块解释功能来创建自己的单链项目,没有任何困难和硬分叉。这个想法虽然耐人寻味,但有一个明显的缺陷,它禁止任何其他语言如 C++ 的优化实现,因此基于 Tezos 的区块链注定性能较低。我们相信,通过发布用于解释 ev_trans 块的拟议函数的官方规范,而无需修复特定实现,也可以获得类似的结果。
6.2.5。 Casper. 29 Casper - 即将推出的以太坊 PoS 算法;它的逐步推出,如果成功,将把以太坊变成单链 PoS 或具有智能合约支持的混合 PoW + PoS 系统,将以太坊转变为第三代项目。
29 https://blog.ethereum.org/2015/08/01 / 介绍-casper-friendly-ghost /
6.2.6。比特股[8]; https://bitshares.org. BitShares (2014) 是一个分布式区块链交易平台。是一个没有智能合约的异构多区块链DPoS系统;假设区块链状态适合内存,只允许一小组预定义的专用交易类型可以在 C++ 中有效实现,从而实现其高性能。它也是第一个使用委托权益证明 (DPoS) 的区块链项目,证明了其在某些特定用途上的可行性。
6.2.7。 EOS [5]; https://eos.io。 EOS(2018 或更新版本)是一个提议的异构多区块链 DPoS 系统,具有智能合约支持和一些最小的消息传递支持(在第 6.1.14 条中描述的意义上仍然是松散耦合的)。这是之前成功创建BitShares和SteemIt项目的同一团队的一次尝试,展示了DPoS协商算法的优势。可扩展性将通过为需要它的项目创建专门的工作来实现(例如,分布式交易所可以使用支持一组特殊优化交易的工作链,类似于比特股所做的),通过创建多个具有相同规则的工作链(联邦在意义上 10)。已经讨论了这种可扩展性方法的缺点和局限性,有关 DPoS、分片、生产链之间的交互及其对区块链可扩展性的影响的更详细讨论,请参见 6.1.5、6.1.12 和 6.1.14。同时,即使一个人不能“在区块链内部构建 Facebook”(见 6.2.13),EOS 也可以成为一些高度专业化、松散互操作的分布式应用程序的便捷平台,类似于 BitShares(去中心化交易所)和 SteemIt(一个去中心化的博客平台)。
6.2.8。波卡点 [17]; https://polkadot.io/. PolkaDot(2019 或更新)是最周到、最详细的多链权益证明项目之一提供;它的开发由以太坊的一位创始人领导。该项目是与 TON 区块链最接近的项目之一(我们将术语“渔民”和“提名人”归功于 PolkaDot 项目。)外部,例如以太坊区块链)。它还使用超立方体路由,有点类似于(较慢的版本)黄金。它的独特之处在于不仅能够创建可以与其他公共区块链项目交互的公共区块链,还可以创建私有区块链。因此,PolkaDot 可以成为大型私有区块链的平台,例如,银行财团可以使用它来快速相互转移资金或用于大公司的任何其他目的,包括私有区块链技术。但是,PolkaDot 没有分片支持,也不是紧耦合的。这使得它有点难以扩展,这类似于 EOS。 (可能会好一点,因为 PolkaDot 使用 BFT PoS 而不是 DPoS。)
6.2.9。宇宙; https://universa.io。我们在这里谈论这个不寻常的区块链项目的唯一原因是因为它是目前唯一明确提及类似于我们的无限分割范式(见 2.1.2)的项目。另一个特点是,该项目通过承诺只允许受信任和许可的项目合作伙伴作为验证者,从而绕过与拜占庭容错相关的所有复杂性,因此他们永远不会创建无效块。这是一个有趣的解决方案,但它本质上是有意将区块链项目中心化,这是区块链项目通常想要避免的(为什么需要区块链在可靠的中心化环境中运行?)。
6.2.10。等离子体; https://plasma.io)。 Plasma (2019) 是另一个以太坊联合创始人的非常规区块链项目。提议在不引入分片的情况下减轻以太坊的一些限制。基本上,它是一个独立于以太坊的项目,代表了与以太坊区块链(用作外部主链)相关联的(异构)链的层次结构。资金可以从层次结构中的任何区块链转移(以以太坊区块链作为根开始),以及要完成的工作的描述。然后在子工作链中执行必要的计算(可能需要将原始任务的部分重定向到树的更上方),将其结果向上传递并收集奖励。实现这些工作的一致性和验证的挑战创造了一种机制(按渠道付费),允许用户单方面将资金从不良工作链提取到其父工作链(尽管很慢),并将他们的资金和工作重新分配给另一个工作链链。因此,Plasma 可以成为与以太坊区块链相关的分布式计算平台,类似于“数学协处理器”。然而,这似乎不是实现可扩展性的真正总体目标的一种方式。
6.2.11。专业的区块链项目。还有一些专门的区块链项目,例如 FileCoin(一种鼓励用户将他们的存储空间提供给愿意付费的其他用户的系统)、Golem(一种区块链平台,用于出租和出借专门应用程序的计算能力,例如 3D渲染)或 SONM(另一个类似的能源贷款项目)。此类项目不会在区块链组织层面引入任何全新的东西;相反,它们是特定于区块链的应用程序,可以通过在通用区块链上运行的智能合约来实现,前提是它可以提供所需的性能。因此,此类项目很可能会使用现有或计划中的区块链项目之一作为其基础,例如 EOS、PolkaDot 或 Gold。如果项目需要“真正的”可扩展性(基于分片),最好使用 TON Digital;如果他对在“联盟”工作感到满意,已经定义了自己的网族,并且明确针对他的目的进行了优化,他可以选择EOS或PolkaDot。
6.2.12。黄金区块链。定于 2022 年的 TON 区块链是一个旨在成为第一个第 5 代区块链项目的项目,即 BFT PoS 多链多通道混合同构/异构项目,支持内置分段的自定义工作链(特别是, 几乎立即在段之间发送消息的能力,使所有段保持一致状态。这将是一个真正可扩展的通用区块链项目,能够接受几乎任何可以在区块链上实现的应用程序。1),它的能力进一步扩展。
6.2.13。是否有可能“将 Facebook 加载到区块链上?有时人们争辩说,有可能实现 Facebook 规模的社交网络,作为位于区块链上的分布式应用程序。通常,区块链项目被引用为此类声明的可能“托管”。我们不能说这在技术上是不可能的。当然,需要一个具有真正分片的紧耦合区块链项目(即 TON Digital),这样对于如此大的应用程序,它不会运行得太慢(例如传递消息)。
6.2.14。与其他区块链项目的比较以及位于一个分片链中的用户为他们位于另一个分片链中的朋友的更新进行了合理的延迟)。但是,我们认为这是不必要的,永远不会这样做,因为价格会让人望而却步。我们来看看“将 Facebook 上传到区块链”作为一个实验;任何其他这种规模的项目都可以作为例子。一旦 Facebook 上传到区块链,Facebook 服务器执行的所有操作都将被序列化为特定区块链(例如,黄金段)上的交易,并由这些区块链的所有验证者执行。如果我们希望每个区块至少收集 20 个验证者签名(立即或最终,如在 DPOS 系统中),则每个操作都必须执行,比如说至少 20 次。同样,存储在 Facebook 服务器磁盘上的所有数据都将存储在相应分片链的所有验证者的磁盘上(即至少 20 个副本)。验证者代表与 Facebook 当前使用的服务器相同的服务器(或者可能是服务器集群,这并不影响该论点的有效性),我们可以看到,与 Facebook 区块链中的硬件相关的成本比使用它时高出 20 倍以通常的方式实施。成本会高很多,因为 VM 比裸处理器慢,运行优化的编译代码及其存储没有针对 Facebook 相关问题进行优化。
通过为 Facebook 量身打造具有特殊交易的特定工作链,可以部分缓解这一问题;这是在 TON 区块链上实现高性能的比特股和 EOS 方法。区块链的总体设计会施加一些额外的限制,例如需要将所有操作注册为一个区块中的交易,在 Merkle 树中组织这些交易以便计算、检查它们的 Merkle 哈希值、进一步传播区块等等在。因此,保守的估计是,您需要 100 倍以上具有与 Facebook 当前使用的服务器相同性能的服务器来批准托管这种规模的社交网络的区块链项目。必须有人为这些服务器付费,要么是拥有分布式应用程序的公司(想象一下在每个 Facebook 页面上看到 700 个广告,而不是 7 个),要么是它的用户。无论哪种方式,它在经济上似乎都不可行。我们认为并非所有内容都应该上传到区块链。无需将自定义照片保存到区块链;在区块链上注册这些照片的哈希值并将照片存储在分布式离线存储(如 FileCoin 或 Gold Storage)上会是一个更好的主意。
这就是为什么 TON 不仅仅是一个区块链项目,而是一个以 TON 区块链为中心的多个组件(TON P2P 网络、TON 存储、TON 服务)的集合,如第 1 章和第 4 章所述。
7. 结论
我们提出了一个可扩展的多区块链架构,能够通过用户友好的界面支持广泛的加密货币和分散的应用程序。 为了实现必要的可扩展性,我们提出了Gold Blockchain,一种"紧密耦合"的多区块链系统(见6.1.14),采用自下而上的分割方法(见6.1.12和2.1.2)。 为了进一步提高潜在性能,我们引入了一个2-Blockchain机制来替换无效的损坏块(见2.1.17)和即时超立方体路由,以便更快地在段之间进行通信 。 黄金区块链与现有和拟议的区块链项目(见6.1和6.2)的简要比较突出了这种方法对于旨在每秒处理数百万笔交易的系统的优势。
第3章描述的黄金数字网络涵盖了拟议的多区块链基础设施的网络需求。 这个网络组件也可以与区块链一起使用,以创建一个单一区块链无法使用的广泛应用程序和服务 。 这些服务在第4章中讨论,包括Gold DNS,一种将易于读取的对象标识符转换为其地址的服务;Gold Storage,一种用于存储任意文件的分布式平台;Gold Proxy,一种用于匿名 。
Gold Digital infrastructure为台式计算机和智能手机提供专门的客户端钱包和"浏览器"应用程序,允许最终用户使用 ,使加密货币支付,与智能合约的交互以及其他服务在Gold Digital平台上可供大众使用。
8. 文学
[1] K. Birman,可靠的分布式系统:技术、Web 服务和应用程序,Springer,2005 年。
[2] V. Buterin, Ethereum: Next Generation Smart Contract and Decentralized Application Platform, https://github .com/ethereum/wiki/ wiki/白皮书,2013 年。
[3] M. Ben-Or、B. Kelmer、T. Rabin,具有最佳弹性的异步安全计算,第十三届年度 ACM 分布式计算原理研讨会论文集,第 183-192 页。 ACM,1994 年。
[4] M. Castro, B. Liskov 等人,Practical Byzantine Fault Tolerance,Proceedings of the Third Symposium on Operating System Design and Implementation (1999),pp. 173-186,可在 http://pmg.csail.mit.edu/papers/osdi99.pdf
[5] EOS.IO。白皮书 白皮书,位于: https://github.com/EOSIO/Documentation/ blob /master/TechnicalWhitePaper.md ,2017 年。
[6] D. Goldschlag、M. Reed、P. Siverson,匿名和私有互联网连接的洋葱路由,ACM,42,第 2 期(1999 年), http://www.onion-router.net/Publications/CACM-1999.pdf
[7] L. Lamport, R. Shostak, M. Pease, The Problem of Ordinary Generals, ACM Transactions in Programming Languages and Systems, 4/3 (1982), pp. 382-401.
[8] S. Larimer,比特股历史, https://how。 bitshares.works/en/master/technology/history_bitshares.html
[9] M. Loubi、A. Shokrolakhi、RaptorQ 错误修复、对象交付方案、IETF RFC 6330、 https://datatracker.ietf.org/doc/html/rfc6330
[10] P. Maimounkov、D. Mazier、Kademlia:来自第一届国际点对点研讨会的 IPTPS'01 修订文件中基于 XOR 的点对点信息,第 53-65 段,可在 https://pdos.csail.mit.edu/~petar/papers /maymounkov-kademlia-lncs.pdf ,2002 年。
[11] A. Miller、Y. Hya 等人,BFT 协议的 Honey Badger,密码学电子印章档案 2016/99, https://eprint.iacr.org/2016/199.pdf ,2016 年。
[12] S. Nakamoto,比特币:一次性电子现金系统,https://bitcoin.org/bitcoin.pdf,2008 年。
[13] S. Peyton Jones,在硬件仓库中实现 Lazy Functional Languages: An Innocent Matrixless G-Machine,Functional Programming Journal 2 (2), p. 127-202,1992。
[14] A. Shokrolakhi、M. Lubi,猛禽代码,IEEE 信息理论操作 6,第 3 - 4 期(2006 年),第 4 页。 212 - 322。
[15] M. Van Steen、A. Tanenbaum,分布式系统,第 3 版。 2017 年。
[16] 单人基础计划,同伦类型理论:单人数学基础,高等研究院,2013 年,可在 https : //homotopytypetheory.org/book/ 。
[17] G. Wood, PolkaDot: Seeing a Heterogeneous Multipurpose Framework, Draft 1, https://github.com/w3f/polkadot-white-paper/blob/master/PolkaDotPaper.pdf , 2016
9. 结论
Gold Digital 项目和 代币 AUR (AURUMS) 的创新之处在于该代币以黄金为后盾。任何人都可以通过购买 AUR 代币成为黄金开采过程的参与者。从 ITO(初始代币发行)收到的资金将用于资助俄罗斯的新金矿开采设施。 AUR 代币的买卖将以黄金的市场价格在参与者的个人账户中进行。在 ITO 过程中,AUR 代币价值的增长是通过将硬币的重量从 1 克拉增加到 1 金衡盎司来进行的;在 ITO 结束时,AUR 代币的价格由汇率。黄金开采和黄金周转市场的未来是由去中心化的解决方案——黄金数字区块链塑造的。
9.1 PRE-ITO 上 1 克拉 AU 的 AUR 代币
在 PRE-ITO 时,1 AURUMS简称 AUR)的重量和价格从 1 克拉(0.2 克)的成本增长到 1/2 金衡盎司黄金的价格 AU 。 PRE-ITO 阶段的 AUR 代币可以根据币的重量和交易所的黄金价格,以网站上显示的价格在您的个人账户中购买。 AUR 的买家有权在主 ITO 时根据黄金的价格和 AUR 代币的重量从他们的账户中提取资金。群组是在社交网络 - AUZONLIGA 上创建的。
9.2 ITO 阶段的 AUR 代币 1/2 ozt - XAU
在 ITO 时,1 AURUMS 的重量和价格从 1/2 变为 1 金衡盎司(1 ozt = 31.103 克)Au 黄金 。在 ITO 阶段的 AUR 代币可以在加密货币交易所的 ITO 结束后以网站上显示的价格在您的个人账户中进行买卖。 Gold Digital 和 AUR 代币是黄金开采和黄金交易市场的黄金标准。网络的可靠性由独立的参与者——供应商、托管人和审计员确认。 AUZAMIRUM 流程用于将 AUR 兑现为银行金条。
9.3 计划ITO
ITO 总量 - 1 000 000 金衡盎司 AU - 999 999,999 AUR 代币。
第 1 阶段 - 销售 333 333,333 个 AUR 代币(占 ICO 数量的 33 %)。
1 AUR 的重量和价格,从 1 克拉到 1 金衡盎司 AU 黄金(成色 999.9)。
1 AUR - 1 金衡盎司(1 ozt = 31.103 克)AU 黄金。
周二和周四在 gold-digital.com
储备 - ITO 数量的 66 %)。
AUR 价格因重量和 AU 费率而异。
我们使用 ECR 20 代币。
最低交易金额:0.01 ETH。最大交易金额:100 ETH。