Sui 区块链概览:主要功能和设计选择

ω
发布于 阅读 522

本篇文章将分享 Sui 的主要概览,包括主要功能和设计选择。并与现有的区块链进行比较,看看 Sui 是否适合你们想开发的场景。本文主要针对了解加密世界的工程师、开发者和技术读者。

太长不读版

Sui 区块链将以无法想象的速度和规模运行。Sui 假设典型的区块链交易是简单的转账并对其进行优化。Sui 通过使每个请求具有幂等性、保持网络连接打开更长时间以及确保交易立即完成来做到这一点。Sui 针对 objects 不重复的(single-writer objects)交易进行了优化,为简单交易设计了一种放弃共识的机制。

与传统区块链的 “一劳永逸” 式的广播不同,Sui 确保了请求者和批准验证者之间的 “ 双向握手 ”,简单的交易几乎可以立即被确定。凭借这种低延迟,交易可以轻松地整合到需要实时完成的游戏和其他设置中。此外,Sui 支持用 Move 编写的智能合约,Move 是一种为区块链设计的语言,具有强大的内在安全性和更易于理解的编程模型。

在带宽成本稳步下降的世界中,我们正在创建一个服务生态系统,你会发现它很简单、有趣,并且代表用户交易投票可能是有利可图的。

组件

Sui 的关键概念:

  • 对象 Objects:Sui 具有由 Move packages(也称为智能合约)创建和管理的可编程对象 objects。Move packages 本身也是 objects。因此,Sui 的 objects 可以分为两类:可变数据值和不可变的 packages。

  • 交易:所有对 Sui 账本的更新都是通过交易发生的。本节描述了 Sui 支持的交易类型,并解释了它们的执行如何改变账本。

  • 验证者:Sui 网络由一组独立的验证者运营,每个验证者在单独的机器(或由同一实体操作的机器的分片集群)上运行自己的 Sui 软件实例。

架构

Sui 是一个分布式账本,存储一组可编程对象 objects,每个对象都有一个全球唯一的 ID。每个对象都由一个地址拥有,每个地址可以拥有任意数量的对象。

账本通过特定地址发送的交易进行更新。交易可以创建、销毁和写入对象,也可以将它们转移到其他地址。

在结构上,交易包含一组输入对象 object 引用和一个指向账本中已存在的 Move 代码 object 的指针。执行交易会更新输入对象和(如果适用)一组新创建的对象及其所有者。发送方为地址 A 的交易可以接受 A 拥有的对象、共享对象以及前两组中其他对象拥有的对象作为输入。

图片

Sui 验证者同意并使用拜占庭一致广播以高吞吐量并行执行交易。

系统概览

本章节为希望深入了解 Sui 如何实现其主要性能和安全目标的技术读者而编写。

Sui 假设典型的区块链交易是用户到用户的转账或资产操纵,并对该场景进行了优化。因此,Sui 区分了两种类型的资产 (i) 只能由其特定所有者修改的拥有对象(owned objects),以及 (ii) 没有特定所有者并且可以由多个用户修改的共享对象(shared objects)。这种区别设计允许仅涉及拥有对象(owned objects)的简单交易放弃共识来实现非常低的延迟。

Sui 减轻了区块链增长的主要障碍:head-of-line blocking,即按顺序交易,一个数据包堵塞后面的都堵塞。区块链节点维护一个 accumulator,这代表整个区块链的状态,例如最新的认证交易。节点参与共识协议以向该状态添加更新,以反映交易对块的修改(添加、删除、变异)。该共识协议导致就增量之前的区块链状态、状态更新本身的有效性和适用性以及增量之后的区块链状态达成一致。定期将这些增量收集在累加器中。

该共识协议导致就区块链在增量之前的状态、状态更新本身的有效性和适用性以及增量之后的状态达成一致。这些增量定期被收集在 accumulator 中。

在 Sui 中,只有当交易涉及共享对象(shared objects)时才需要这个共识协议。为此,Sui 提供了基于 Narwhal 和 Bullshark DAG 的内存池和高效的拜占庭容错 (BFT) 共识。当涉及共享对象时,Sui 验证者扮演比其他区块链更活跃的验证者的角色,以相对于访问共享对象的其他交易,对交易进行完全排序。

因为 Sui 专注于管理特定对象而不是单个状态聚合,所以它还以独特的方式报告它们:(i)Sui 中的每个对象都有一个唯一的版本号,并且(ii)每个新版本都是从交易中创建的,这可能涉及多个依赖项,它们本身就是版本化的对象。

因此,Sui 验证者或任何其他拥有状态副本的实体,可以展示一个对象的因果历史,展示其自创世以来的历史。Sui 赌注在许多情况下,因果历史与另一个对象的因果历史的顺序是不相关的。在与此信息相关的少数情况下,Sui 在数据中明确说明了这种关系。

Sui 保证交易处理遵循传统意义上的最终一致性。这分为两部分:

  • 最终交付 —— 如果一个诚实的验证者处理交易,所有其他诚实的验证者最终都会这样做。

  • 融合 - 两个看到相同交易集的验证者共享系统的相同视图(达到相同的状态)。

但与区块链相反,Sui 并没有停止交易流以见证融合。

简单交易

许多交易与区块链状态的其他任意部分没有复杂的相互依赖性。通常,金融用户只想将资产发送给接收者,而衡量这种简单交易是否被接受所需的唯一数据是发送者地址的全新视图。在这个结论下,Sui 放弃了共识,转而使用基于拜占庭一致广播的更简单算法。请参阅我们的 single-writer apps 列表,了解现实世界中简单交易的示例。https://docs.sui.io/learn/single-writer-apps

这些协议基于带有经过同行评审的安全保证的 FastPay 设计。简而言之,Sui 采取了只为相关数据而不是整个链锁定(或“停止链”)的方法。在这种情况下,唯一需要的信息是发件人地址,然后一次只能发送一笔交易。

Sui 使用 Move 的对象模型并利用 Move 的强大所有权模型,进一步将这种方法扩展到更多涉及的交易,这些交易可能明确依赖于其发送者控制下的多个元素。通过要求明确的依赖关系,Sui 将多通道方法应用于交易验证,确保这些独立的交易流可以在不受其他交易阻碍的情况下进行。

Sui 单独验证交易,而不是将它们分批成传统的区块。这种方法的主要优点是低延迟;每笔成功的交易都会迅速获得最终证明,向任何人证明该交易将由 Sui 网络处理。

因此,提交 Sui 交易的过程比传统区块链更复杂一些。传统的区块链可以在一劳永逸模式下接受来自同一作者的一堆交易,而 Sui 交易提交遵循以下步骤:

  • 发送者向所有 Sui 验证者广播交易。

  • 每个 Sui 验证者都会对此交易进行个人投票。根据验证者拥有的质押权益,每个投票都有一定的权重。

  • 发送者将这些投票中的多数投票收集到一个证明中,并将其广播给所有 Sui 验证者。这会解决交易,确保交易不会被丢弃(撤销)的最终性。

  • 可选地,发送者收集详细说明交易效果的证明。

虽然这些步骤需要发送者更多,但有效地执行它们仍然可以产生具有最小延迟的最终性加密证明。除了制作原始交易本身之外,交易的会话管理不需要访问任何私钥,并且可以委托给第三方。Sui 利用这一观察提供了 Sui 网关服务。

复杂的合约

复杂的智能合约可能会受益于共享对象,其中多个用户可以改变这些对象(遵循智能合约特定规则)。在这种情况下,Sui 使用共识协议对所有涉及共享对象的交易进行完全排序。Sui 使用基于 Narwhal 的新型同行评审共识协议。这在性能和稳健方面都是最先进的。

Narwhal 内存池提供了一个高吞吐量的数据可用性引擎和一个可扩展的架构,将磁盘 I/O 和网络需求分配给多个工作者。Bullshark 利用图遍历(graph traversals)提供了一种零消息开销共识算法。

涉及共享对象的交易还包含至少一个拥有对象(owned object)来支付 gas 费用。因此,必须仔细组合处理拥有对象的协议和对交易进行排序的协议,以保证 Sui 的安全属性。当涉及共享对象时,交易提交遵循以下步骤:

  • 发送者向所有 Sui 验证者广播交易。

  • 每个 Sui 验证者都会对此交易进行个人投票。根据验证者拥有的质押权益,每个投票都有一定的权重。

  • 发送者将这些投票中的多数投票收集到一个证书中,并将其广播给所有 Sui 验证者。然而,这一次,证书是通过拜占庭协议进行排序的。

  • 一旦交易成功排序,用户再次将证书广播给验证者以结算交易。

可扩展性

如前所述,Sui 不会对仅包含拥有对象的交易施加总顺序。相反,交易是因果排序的。如果交易 T1 产生一个输出对象 O1,用作交易 T2 中的输入对象,则验证者必须在执行 T2 之前执行 T1。请注意,T2 不需要直接使用这些对象来存在因果关系,例如,T1 可能会产生输出对象,然后由 T3 使用,而 T2 可能会使用 T3 的输出对象。然而,没有因果关系的交易可以由 Sui 验证者以任何顺序处理。这种机制使 Sui 能够大规模并行执行,并将其分片到多台机器上。

Sui 采用最先进的 Narwhal 共识协议对涉及共享对象的交易进行完全排序。共识子系统还可以扩展,因为它可以通过为每个验证者添加更多机器来对更多交易进行排序。

Sui 网关服务

Sui 模型鼓励第三方协助提交交易。例如,如果应用开发者(例如游戏开发者)有很多用户,他们可以代表他们的用户管理投票聚合和证书提交。应用程序开发者可以使用他们自己的服务器(例如,他们存储游戏状态的地方)来运行 Sui Gateway 服务。我们提供了此类服务的参考实现。

与应用程序用户尝试从他们的移动设备向多个验证器发送交易(这可能会降低用户体验)不同,用户可以将他们的交易提交给应用程序,应用程序将其转发到应用程序开发人员运行的 Sui Gateway 服务。Sui Gateway 服务执行整个交易会话并将结果返回给用户。由于应用程序不需要知道用户的私钥,因此可以确保安全性;应用程序所有者仅提供带宽。

更具体地说,该服务扮演累加器(accumulator)的角色,并确保交易被法定人数的验证人接收,收集法定人数的投票,将证书提交给验证人,并回复客户端。Sui Gateway 仅出于可用性而非安全性而受到信任。

在带宽成本稳步下降的世界中,我们正在创建一个服务生态系统,你会发现它很简单、有趣,并且代表用户交易投票可能是有利可图的。

智能合约编程

Sui 智能合约是用 Move 语言编写的。Move 安全且富有表现力,其类型系统和数据模型自然支持使 Sui 可扩展的并行协议/执行策略。Move 是一种用于构建智能合约的开源编程语言,最初是在 Meta 为 Diem 区块链开发的。该语言与平台无关,除了被 Sui 采用之外,它在其他平台(例如 0L、StarCoin)上也越来越受欢迎。

在这里找到更多关于 Move 功能的解释:

原文链接:https://docs.sui.io/learn/how-sui-works

翻译:Suiverse 社区

标签: Sui
评论