区块链作为一种新的互联网基础设施的崛起,导致开发者以快速增长的速度部署了数万个去中心化的应用程序。不幸的是,由于频繁的中断、高成本、低吞吐量限制和许多安全问题,区块链的使用还不普遍。为了在web3时代实现大规模采用,区块链基础设施需要遵循云基础设施的路径,作为一个可信的、可扩展的、经济高效的、不断改进的平台来构建广泛使用的应用程序。
我们提出了Aptos区块链,设计以可伸缩性、安全性、可靠性和可升级性作为关键原则,以解决这些挑战。Aptos区块链是在过去三年中由全球[1]的350多名+开发人员开发的。它在共识、智能合同设计、系统安全、性能和分散化等方面提供了新的创新。这些技术的结合将为web3面向大众提供一个基本的基础模块:
首先,Aptos区块链本地集成并在内部使用Move语言,用于快速和安全的事务执行[2]。移动证明器是用移动语言编写的智能契约的正式验证器,它为契约不变量和行为提供了额外的保护措施。这种安全的关注允许开发人员更好地保护他们的软件免受恶意实体的侵害。
其次,Aptos数据模型可以实现灵活的密钥管理和混合托管选项。这一点,以及签名之前的事务透明度和实际的轻客户端协议,提供了更安全、更值得信赖的用户体验。
第三,为了实现高吞吐量和低延迟,Aptos区块链利用了一种流水线和模块化的方法来处理事务处理的
关键阶段。具体来说,事务传播、块元数据排序、并行事务执行、批存储和分类帐认证都并行操作。这种方法充分利用了所有可用的物理资源,提高了硬件效率,并实现了高度并行的执行。
第四,与其他并行执行引擎不同,Aptos区块链打破了事务的原子性,Aptos区块链没有对开发人员施加这样的限制。它可以有效地支持任意复杂事务的原子性,为实际应用程序提供更高的吞吐量和更低的延迟,并简化开发。
第五,Aptos模块化架构设计支持客户的灵活性,并优化频繁和即时升级。此外,为了快速部署新的技术创新和支持新的web3用例,Aptos区块链提供了嵌入式的链上变更管理协议。
1 法律免责声明:本白皮书及其内容不是任何代币的出售要约或购买要约的招揽。我们发布这份白皮书只是为了接受公众的反馈和评论。本文档中的任何内容都不应被解读或解释为对Aptos区块链或其代币(如果有)将如何开发、利用或积累价值的保证或承诺。
Aptos只概述了其目前的计划,这些计划可能会自行改变,其成功将取决于其控制之外的许多因素。这些未来的陈述必然涉及已知和未知的风险,这可能导致实际业绩和结果在未来期间与我们在白皮书中描述或暗示有重大差异。Aptos不承担更新其计划的义务。不能保证白皮书中的任何陈述都将被证明是准确的,因为实际的结果和未来的事件可能会有重大差异。请不要过分依赖未来的陈述。
最后,Aptos区块链正在试验未来的举措,以扩展到单个验证器的性能:其模块化设计和并行执行引擎支持验证器的内部分片,同构状态分片提供了水平吞吐量可扩展性的潜力,而不增加节点操作符额外的复杂性。
简介在web2版本的互联网中,信息、社交媒体、金融、游戏、购物和音频/视频流等服务由控制用户数据直接访问的集中公司提供(e。g., 谷歌、亚马逊、苹果和Meta)。这些公司使用针对目标用例优化的特定于应用程序的软件开发基础设施,并利用云基础设施将这些应用程序部署给用户。云基础设施提供了对虚拟化和/或物理基础设施服务的访问,如租用的虚拟机(vm)和在全球数据中心内运行的裸金属硬件(e。g., AWS、Azure和谷歌云)。因此,构建能够扩展到数十亿用户的web2互联网服务从来没有像今天这样容易过。然而,web2要求用户明确地信任集中式实体,这一要求已经越来越引起社会的关注。
为了解决这种担忧,一个新的互联网时代已经开始:web3。在web3版本的互联网中,区块链已经出现,提供了去中心化的、不可变的账本,使用户能够安全可靠地相互交互,所有这些都不需要对控制中介或集中式实体的信任。类似于web2互联网服务和应用程序如何依赖云基础设施作为构建块,去中心化的应用程序可以使用区块链作为去中心化的基础设施层,以覆盖世界各地的数十亿用户。
然而,尽管目前存在许多区块链,但web3的广泛采用尚未出现[3]。虽然技术继续推动行业发展,但现有的区块链不可靠,对用户收取较高的交易费用,具有低吞吐量限制,由于安全问题而遭受定期资产损失,不能支持实时响应。与云基础设施使web2服务达到数十亿美元相比,区块链尚未使web3应用程序实现同样的功能。
Aptos愿景Aptos的愿景是提供一个区块链,可以让web3引入主流,并授权一个去中心化应用程序的生态系统来解决现实世界的用户问题。我们的使命是通过提供一个灵活和模块化的区块链架构,来推进区块链在可靠性、安全性和性能方面的最先进水平。该体系结构应该支持频繁的升级、快速采用最新的技术进步,以及对新的和新兴的用例的一流支持。
我们设想了一个分散的、安全的、可扩展的网络,由使用它的社区管理和运营。当全球的基础设施需求增长时,区块链的计算资源将水平和垂直扩展,以满足这些需求。随着新的用例和技术进步的出现,网络应该频繁地、无缝地升级,而不中断用户。对基础设施的担忧应该会逐渐消失。开发人员和用户将可以访问许多不同的选项,包括关键恢复、数据建模、智能合同标准、资源使用权衡、隐私性和可组合性。用户知道他们的资产是安全的,总是可用的,并且可以以几乎有成本的费用进行访问。任何人都可以安全、轻松、不可避免地与世界各地不可信任的政党进行交易。区块链和云基础设施一样无处不在。
为了实现这一愿景,必须取得重大的技术进步。我们在过去三年中构建、开发、推进和部署Diem区块链(Aptos区块链的前身)的经验证明,一个网络可以在不干扰其客户[4]的情况下不断升级其协议。在2020年初,每日新闻主网被部署到十多个节点运营商和多个钱包提供商。在接下来的一年里,我们的团队发布了两个主要的升级,改变了共识协议和核心框架。两个升级完成,用户没有停机。通过Aptos区块链,我们对技术堆栈进行了一系列彻底的改进,同时也将安全、透明和频繁的升级作为核心功能,受到Diem区块链的启发。特别地,我们强调了事务处理的新方法(如第7节所述)以及分散化和网络治理的新方法。
如图1所示,Aptos区块链由一组验证器组成,这些验证器使用拜占庭容错(BFT)、股权证明共识机制共同接收和处理来自用户的事务。令牌持有者在其选定的验证器中锁定或持有令牌。每个验证者的共识投票权重与其中所投入的金额成比例。验证者可以积极参与并参与共识。同样地,如果验证器没有足够的股份参与,旋转出验证器集,在同步区块链状态时选择脱机,或者由于历史性能不佳而被共识协议认为不参与,那么它也可能处于不活动状态。
客户端是系统中需要提交事务或查询区块链的状态和历史记录的任何部分。客户端可以选择下载并验证查询数据的验证器签名证明。完整节点是从验证器或从网络中的其他完整节点复制事务和区块链状态的客户机。他们可以选择根据需要删除事务历史记录和区块链状态,以回收存储。轻客户端只维护当前的验证器集,并且可以安全地查询部分区块链状态,通常是从完整的节点上查询的。钱包是轻客户端的一个常见例子。
为了满足安全、快速、可靠、可升级的web3基础设施被广泛采用的需求,Aptos区块链建立在以下核心设计原则之上:
通过一种新的智能合同编程语言,Move[5],快速和安全的执行,以及简单的可审核性和机械可分析性。Move起源于Aptos区块链的前身,并随着这个项目的发展继续发展。
通过批处理、流水线和并行的事务处理方法实现极高的吞吐量和低延迟。新颖的并行事务处理,通过block-stm有效地支持任意复杂事务的原子性,不同于现有的并行执行引擎,它需要读写数据位置的预先知识。通过快速、桩重验证器集旋转和声誉跟踪来优化性能和分散化。
3可升级性和可配置性作为一流的设计原则,以接受新的用例和最新的技术。模块化设计,支持严格的组件级别测试,以及适当的威胁建模和无缝部署,所有这些都确保了高度安全和可靠的操作。
在保持去中心性的同时,水平吞吐量的可伸缩性,其中分片是向用户公开的一流概念,也是编程和数据模型的原生概念。
第4节解释了开发者如何与Aptos区块链中的Move交互。第5节描述了逻辑数据模型。第6节详细介绍了Aptos区块链如何通过强大的验证方法来实现安全的用户体验。第7节描述了关于流水线、批处理和并行化的关键性能创新。第8节详细介绍了不同客户端与其他节点同步状态的各种选项。第9节描述了我们的社区所有权和治理计划。最后,第10节讨论了在保持分散化的同时,未来的性能方向。
4移动语言
Move是一种新的智能合同编程语言,它强调了安全性和灵活性。Aptos区块链使用Move的对象模型来表示其分类帐状态(参见第5.5节),并使用Move代码(模块)来编码状态转换的规则。用户提交的事务可以发布新模块、升级现有模块、执行模块中定义的入口函数,或者包含可以直接与模块的公共接口交互的脚本。
Move生态系统包含一个编译器、一个虚拟机和许多其他开发人员工具。Move的灵感来自于Rust编程语言,它通过线性类型等概念在语言中明确了数据的所有权。Move强调了资源的稀缺性、保存和访问控制。
移动模块定义了每个资源的生命周期、存储和访问模式。这确保了像硬币这样的资源在没有适当的凭证的情况下就不会产生,不能重复使用,也不会消失。
Move利用字节码验证器来保证类型和内存的安全,即使存在不受信任的代码。为了帮助编写更可信的代码,Move包括一个正式的验证器,即移动验证器[6],能够根据给定的规范验证移动程序的功能正确性,该规范用集成到Move中的规范语言制定。
除了用户帐户和相应的帐户内容外,分类帐状态还包含了Aptos区块链的链上配置。此网络配置包括一
组活动验证器、标记属性以及Aptos区块链中的各种服务的配置。Move对模块可升级性和全面可编程性的支持支持无缝配置更改,并支持对Aptos区块链本身的升级(这两组升级都在私有主网上执行了多次,没有停机时间)。
Aptos团队进一步增强了Move,支持更广泛的web3用例。正如后面在第5.5节中提到的,Aptos区块链支持细粒度的资源控制。这不仅支持执行的并行化,而且还实现了与访问和修改数据相关的接近固定的成本。此外,Aptos区块链提供了建立在细粒度存储之上的表支持,这允许大规模数据集(e。g., 大量的nft集合)在一个帐户。此外,Aptos支持完全在链上表示的共享或自治帐户。这允许复杂的分散式自治组织(DAOs)协作地共享帐户,并将这些帐户用作异构资源集合的容器。
5逻辑数据模型
Aptos区块链的分类帐状态表示所有帐户的状态。账本状态使用与系统已执行的事务数量相对应的无符号64位整数进行版本控制。任何人都可以向Aptos区块链提交一个事务处理,以修改分类帐状态。在执行事务时,将生成事务输出。事务输出包含零个或多个操作来操作分类帐状态(称为写集)、结果事件的向量(参见第5节)、消耗的气体量和执行的事务状态。.1.1
4.15交易已签名的事务处理包含以下信息:
事务身份验证器:发件人使用包含一个或多个数字签名的事务身份验证器来验证事务是否经过身份验证。
发件人地址:发件人的帐户地址。
有效负载:有效负载要么引用链上现有的输入函数,要么包含要作为内联字节码(称为脚本)执行的函数。此外,一组输入参数被编码在字节数组中。对于点对点交易,输入包含收件人的信息和转移给它们的金额。
天然气价格(以指定货币/天然气单位表示):这是发送方为执行交易而按每单位天然气愿意支付的金额。天然气是一种支付计算、网络和存储费用的方式。气体单元是一种抽象的计算测量,没有固有的真实价值。
最大气体量:最大气体量是交易在中止前允许消耗的最大气体单位。该账户必须至少有天然气价格乘
以最大天然气数量,否则该交易将在验证期间被丢弃。
序号:交易记录的序号。这必须与事务执行时存储在发件人帐户中的序列号相匹配。在事务执行成功后,将增加帐户序列号,以防止重播攻击。
到期时间:事务停止有效的时间戳。
链id:标识此事务有效的区块链,为用户提供进一步的保护,以防止签名错误。
在每个版本i中,状态变化由元组(T表示i,Oi,Si),分别包含事务处理、事务处理输出和生成的分类帐状态。给定一个确定性函数应用,事务T的执行i与分类帐状态Si − 1生成事务输出Oi和一个新的分类帐状态
Si.也就是说,应用i − 1,Ti) → ⟨ Oi,Si⟩ …1.15个事件将在事务的执行期间发出。每个移动模块都可以定义自己的事件,并在执行时选择何时发出这些事件。例如,在硬币转移过程中,发送方和接收方的帐户将分别发出发送事件和接收事件。这些数据存储在分类帐中,并且可以通过一个Aptos节点进行查询。每个已注册的事件都有一个唯一的键,该键可以用于查询事件的详细信息。
发射到同一事件键的多个事件产生事件流,一个事件列表,每个条目包含一个从0开始的顺序递增的数字、一个类型和数据。每个事件都必须由某种类型来定义。可能会有多个由相同或相似的类型定义的事件,特别是在使用泛型时。事件具有相关数据。对于Move模块开发人员,一般原则是包括在执行更改数据和发出事件的事务之前和之后理解底层资源更改所需的所有数据。事务处理只能生成事件,而不能读取事件。这种设计允许事务执行仅是当前状态和事务输入的函数,而不是历史信息(e。g., 以前生成的事件)。5.2账户每个帐户由一个唯一的256位值标识。当从现有帐户发送的事务处理调用creat_帐户(addr)Move功能时,将在分类帐状态下创建新帐户(参见第5.5节)。当事务尝试将Aptos令牌发送到尚未创建的帐户地址时,通常会发生这种情况。为方便起见,Aptos还支持一个转移(从,到金额)函数,如果在转移之前不存在,该函数隐式地创建一个帐户。
要创建一个新帐户,用户首先生成一个签名密钥对:(vk、sk)。接下来,使用与签名方案标识符(ssid)连接的公共验证密钥vk的密码哈希H推导出给定签名方案的新帐户地址:其中addr=H(vk,ssid)。
在地址addr创建新帐户后,用户可以使用私人签名密钥sk签名从addr发送的事务。用户还可以旋转sk,以主动更改sk或响应可能的妥协。这不会更改帐户地址,因为帐户地址在创建期间只从公共验证密钥派生出一次。
Aptos区块链不会将账户与现实世界的身份联系起来。用户可以通过生成多个密钥对来创建多个帐户。
由同一用户控制的帐户彼此之间没有内在的链接。但是,一个用户仍然可以在一个钱包中管理多个帐户,以便进行简单的资产管理。这种灵活性为用户提供了假名,而我们为未来的版本提供了隐私保护原语。如第7.4节所述,还提供多个帐户以增加执行并发性。
.35移动模块
移动模块包含可声明数据类型(结构)和过程的移动字节码。它由声明模块的帐户的地址以及模块名称来标识。例如,图2中第一个货币模块的标识符是0x1::coin。一个模块可以依赖于其他链上的模块,如图2中的wallet模块所示,从而实现了代码重用。
一个模块必须在一个帐户中唯一命名。e., 每个帐户最多可以声明一个具有任何定名的模块。例如,图2中地址为0x1处的帐户无法声明另一个名为coin的模块。另一方面,地址为0x3的帐户可以声明一个名为coin的模块,该模块的标识符为0x3::coin。请注意,0x1::coin::硬币和0x3::coin::硬币是不同的类型,不能互换使用,也不能共享公共模块代码。相比之下,0x1::硬币::硬币和0x1:::硬币::硬币是相同泛型类型的不同实例,不能互换使用,但可以
共享共同的模块代码。
模块被分组为位于同一地址的软件包。此地址的所有者将包作为一个整体在链上发布,包括字节码和包元数据。这个包的元数据决定了一个包是可以升级的还是不可变的。对于可升级的包,在允许升级之前执行兼容性检查:不必须更改现有的入口点函数,也不能存储内存中的资源。但是,可以添加新的功能和资源。
Aptos框架由Aptos区块链的核心库和配置组成,被定义为一个常规的可升级的模块包(见第9.2节)
与模块类似,帐户地址也可以具有与之关联的数据值。在每个帐户地址中,值由其类型键控,每个类型的最多一个值属于该帐户。图3提供了一个示例。地址0x50包含一个值,0x3::coin::硬币是完全限定的类型。0x3是硬币模块存储的地址,硬币是模块的名称,硬币是数据类型的名称。还允许使用泛型类型的值,而不同的实例化将被视为不同的类型。这对于可扩展性至关重要,因为它允许不同的实例化共享相同的功能代码。修改、删除和发布值的规则被编码在定义数据类型的模块中。Move的安全性和验证规则可以阻止其他代码或实体直接创建、修改或删除在其他模块中定义的数据类型的实例。在一个地址下最多有一个每种类型的顶级值,可以首先进行声音限制。然而,这在实践中不是问题,因为程序员可以将其他数据定义为内部字段,从而避免了任何限制。图3中的Wallet结构体是如何使用包装器类型的一个示例。还应该注意的是,并非所有的数据类型都可以存储在链上。要使数据实例符合顶级值,数据类型必须具有关键能力。同样,对于嵌套值也需要具有存储能力。具有这两种能力的数据类型也被称为资源。
.55分类帐状态从Move虚拟机(MoveVM)的角度来看,每个帐户都由一组值和键值数据结构组成。这些数据结构被称为表条目,并以二进制规范序列化格式(BCS)存储。这种数据布局使开发人员能够编写智能合约,它可以有效地操作跨大量账户复制的少量数据,以及存储在少量账户中的大量数据。移动模块存储与帐户数据类似,但在独立的名称空间下。起源账本状态定义了初始帐户集及其在区块链初始化时的关联状态。在发布时,Aptos区块链将由一个单一的分类帐状态来表示。然而,随着采用程度的增加和技术的发展,Aptos将扩大碎片的数量,以增加吞吐量(i。e., 启用多个分类帐状态),并支持跨碎片移动或访问资产的事务处理。每个分类帐状态将维护特定碎片的所有链上资产,并提供相同的帐户模型和细粒度的键值数据存储,为存储提供接近固定的存储访问成本。
6.提供一个安全的用户体验
为了接触到数十亿的互联网用户,web3的用户体验必须是安全的和可访问的。在下面的章节中,我们将描述由Aptos区块链提供的旨在实现这一目标的几个创新。0x600x2::wallet::Wallet {硬币:0x1硬币:钱包:美元>{价值:0,}硬币::硬币{值:10,}}模块我的硬币{结构体MyCoin{}}
… 1 6交易可行性保护签署交易意味着签名者授权区块链提交和执行该交易。偶尔,用户可能会在无意中签署事务,或者没有充分考虑他们的事务可能被操纵的所有方式。为了降低这种风险,Aptos区块链限制了每笔交易的可行性,并保护签名者不受无限的有效性。目前,Aptos区块链提供了三种不同的保护措施——发送者的序列号、一个事务过期时间和一个指定的链标识符。一个事务的序列号对于每个发送者的帐户只能恰好提交一次。因此,发件人可以观察到,如果当前帐户序列号是≥的事务t的序列号,那么t已经提交或t将永远不会提交(因为t使用的序列号已经被另一个事务消耗)。
区块链时间具有高精度和频率(通常亚秒),详见7.3.1节。如果区块链时间超过了事务t的到期时间,那么同样地,t要么已经提交,或者t将永远不会提交。每个事务都有一个指定的链标识符,以防止恶意实体在不同的区块链环境之间重播事务(e。g., 通过一个测试网和一个主网)。
.26基于移动的密钥管理
如第5.2节中所讨论的,Aptos帐户支持密钥旋转,这是一个重要的特性,可以帮助减少与私钥泄露、远程攻击和可能破坏现有密码算法的未来进展相关的风险。此外,Aptos的账户也足够灵活,可以支持新的混合托管模式。在一个这样的模型中,用户可以委托给将帐户的私钥旋转给一个或多个保管人和其他受信任的实体的能力。然后,移动模块可以定义一个策略,授权这些受信任的实体在特定情况下旋转密钥。例如,实体可能由许多可信方持有的k-out-n多站点密钥表示,并提供密钥恢复服务以防止用户密钥丢失(e。g.,20%的比特币目前被锁定在不可恢复的账户[7])。
此外,虽然许多钱包支持各种关键恢复方案,如备份私钥到云基础设施、多方计算和社会恢复,但它们通常不需要区块链支持(i。e., 链外)。因此,每个钱包都需要实现自己的密钥管理基础设施,相关操作对用户来说变得不透明。相比之下,在Aptos区块链层支持密钥管理功能提供了所有与密钥相关的操作的完全透明度,并使实现具有富密钥管理的钱包变得更简单。
.3 6预签书交易的透明度
如今,钱包对他们所签署的交易几乎没有提供任何透明度。因此,用户往往很容易被骗去签署恶意交易,这可能会窃取资金,并产生毁灭性的后果。即使对于需要枚举每个事务访问的所有链上数据的区块链也是如此。因此,目前现有的用户保护措施很少,使用户容易受到各种各样的攻击。为了解决这个问题,Aptos生态系统为事务预执行提供了服务:一种预防措施,向用户(以人类可读的形式)描述他们在签名之前的事务结果。将其与已知的先前攻击历史和恶意智能合同相结合,将有助于减少欺诈。此外,Aptos还允许钱包在执行过程中规定对交易的限制。违反这些约束将导致事务被中止,以进一步保护用户免受恶意应用程序或社会工程攻击。
.4 6个实用的轻光客户端协议
仅仅依靠API提供者的TLS/SSL证书来建立区块链客户端和服务器之间的信任,并不能充分保护客户端。即使有有效的证书,钱包和客户也不能保证所呈现的数据的真实性和完整性
给他们。因此,API提供商可能会返回不正确或恶意的区块链数据,欺骗第三方并执行重复攻击。 为了防止这种情况发生,Aptos提供了状态证明和轻客户端验证协议,钱包和客户端可以使用这些协议 来验证由不可信的第三方服务器提供的数据的有效性。
此外,通过利用第7.6.2节中的基于时间戳的状态证 明,轻客户机总是可以确保对帐户状态的新鲜度(e。g., 在几秒钟内),并且只需要跟踪网络配置中的变化 (历元变化)或使用当前的可信检查点(路径点)来保持最新的[8]。通过结合高频时间戳和廉价的状态证 明,Aptos区块链为客户提供了更多的安全保证。
此外,Aptos节点还公开了丰富的高性能存储接口,可以进一步微调,以允许订阅针对链上的特定数据 和帐户进行验证。轻客户端可以利用这一点来保留最小的可验证数据,而不需要运行一个完整的节点或处 理大量的事务。
7管道处理、批处理和并行事务处理 为了最大化吞吐量、提高并发性和降低工程复杂性,Aptos区块链上的事务处理被划分为单独的阶段。每 个阶段都是完全独立的和可单独并行的,类似于现代的超量处理器架构。这不仅提供了显著的性能优势, 而且还使Aptos区块链能够提供新的验证器-客户端交互模式。例如: 当特定事务包含在一批持久事务中时,可以通知客户端。持久的和有效的交易极有可能立即提交。 当订购一批持久事务时,可以通知客户。因此,为了减少确定已执行的事务输出的延迟,客户端可以 选择在本地执行事务,而不是等待验证器远程完成执行。 客户端可以选择等待验证器的已认证的事务执行,并对已验证的结果执行状态同步(e。g., 参见第8节 )。
Aptos模块化设计有助于开发速度并支持更快的发布周期,因为更改可以针对单个模块,而不是单个单一 架构。类似地,模块化设计还提供了一个结构化的路径,可以将验证器扩展到单台机器之外,从而提供了 对额外的计算、网络和存储资源的访问。图4显示了跨各个处理阶段的事务生命周期。 .17批处理 批处理是一个重要的效率优化,它是Aptos区块链中每个操作阶段的一部分。在交易传播期间,每个验证 器将交易分组为批,在达成一致期间将批合并成块。执行、存储和 910 块时间戳=9 t annsacitoionn ( digest_0 , timestamp_0 , PoAV_0 ) t annsacitoionn ( digest_2 , timestamp_2 , PoAV_2 ) t annsacitoionn ( digest_7 , timestamp_7 , PoAV_7 ) 块时间戳=11 t annsacitoionn ( digest_3 , timestamp_3 , PoAV_3 ) t annsacitoionn ( digest_1 , timestamp_1 , PoAV_1 ) t annsacitoionn ( digest_4 , timestamp_4 , PoAV_4 ) 图5:块元数据排序独立于事务传播进行。 分类帐认证阶段也分批工作,为重新排序、减少操作提供机会(e。g., 重复的计算或签名验证),以及并行 执行。将事务分组为一批可能会导致少量的延迟,例如,在执行传播之前,要等待200毫秒来积累一批事务。 然而,对于最大等待时间和最大批处理大小,批处理很容易配置,使分散的网络能够跨延迟和效率自动优 化。批处理还允许高效的收费市场来确定交易的优先级,并避免来自过度热心的客户的意外的拒绝服务 (DoS)攻击。
.2 7持续的交易传播 根据独角鲸和Tusk[9]的主要见解,Aptos区块链中的交易传播与共识脱钩。验证器不断地流传输可用的事 务,同时利用所有可用的网络资源。由验证器v分发的每个批都被持久化,批摘要上的签名被发送回v。
根 据第7.3节中定义的共识要求,批处理摘要上的任何2f+1股份加权签名都将形成可用性证明(PoAv)。这样的 证明保证至少f+1股份加权诚实验证器存储了批,因此所有诚实验证者将能够在执行之前检索它。 无限持久化的事务批可以通过导致验证器耗尽存储空间和崩溃来打开DoS攻击向量。为了防止这种情况 发生,每批事务都有一个关联的时间戳。批处理上的时间戳允许在每个验证器上进行有效的垃圾收集。
此 外,还设计了一个单独的每个验证者配额机制,以保护验证者即使在最极端的情况下,比如在潜在的拜占 庭攻击下。批还有大小限制,在协议持续到稳定存储之前进行验证。最后,对消除重复事务和缓存事务的 几种优化降低了存储成本,并确保了与并行执行引擎的性能集成。
.3 7块元数据排序 一个常见的误解是,共识是缓慢的,因此是区块链吞吐量和延迟的主要瓶颈。Aptos区块链的关键创新之一 是将与非协议相关的任务从共识阶段中分离出来,如交易传播、交易执行/存储和分类账认证。通过将事务 传播与共识阶段解耦,排序可以发生在非常低的带宽下(仅限块元数据和证明),从而导致较高的事务吞 吐量和最小化的延迟。
今天,Aptos区块链利用了DiemBFTv4[10]的最新版本,这是一款响应良好的BFT共识协议。在常见情况 下,共识只需要两次网络往返(在全球范围内,往返时间通常小于300毫秒),并通过领导者声誉机制[11] 动态调整到错误的验证器。连锁领导者的声誉 交易交易交易交易交易交易 机制促进已在窗口中成功提交块的验证器,并降级未参与的验证器。这种新的机制显著地提高了分散环境 中的性能,相应地为适当的激励提供了基础设施,并快速地将失败的验证器对吞吐量和延迟的影响最小化 。
DiemBFTv4保证了部分同步下的活性,并确保了异步下的安全性,其中总验证器股份为≥3f+1,最多为 f桩加权错误验证器。自2019年以来,DiemBFTv4已经在多次迭代中进行了广泛的测试,其中有数十个节点 运营商和一个多钱包生态系统。我们也在试验我们最近的研究(e。g., 霸鲨[12])和其他依赖于块历史记 录和相关通信来确定块元数据排序和最终性的协议。 一个共识块和一个提案时间戳由一个领导提出,并由其他验证者同意,如图5所示。请注意,每个共识 块只包含批处理元数据和证明。在该块中不需要实际交易,因为PoAV确保各批交易将在订购后的执行阶段 可用(见第7.2节)。
验证者可以在验证证明和满足块元数据标准后,对领导者的提案进行投票。g., 提案 时间戳≤块过期时间)。 .3.17区块链时间 Aptos区块链对每个提议的区块块采用一个近似的、商定的物理时间戳,以及相应的,该区块块内的所有 事务。这个时间戳启用了许多重要的用例。例如: 智能合约中的时间依赖性逻辑。例如,开发商希望编码,所有拍卖的投标必须在周四中午之前收到。 当神谕发布链上数据时,需要一个准确和可信的链上时间戳来关联事件和处理来自真实世界数据的延 迟。
客户可以辨别出他们对区块链的最新情况。出于安全原因,为了避免陈旧的数据和远程攻击,客户端 应该可以访问更新帐户状态时的高精度时间戳。 使用一个非常可信的时间戳来审计区块链可以提供与链外事件的强相关性,例如确保法律强制执行的 支付满足预期的要求。 事务过期是基于最近提交的时间戳。
作为客户端事务的额外保护保障,客户端可以为事务的过期时间 ,如第6.1节所述。 Aptos区块链为一个区块内的所有交易的时间戳提供了以下保证: 时间在区块链中是单调递增的。也就是说,如果块B1
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?