Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sui 的技术架构

Sui 是一条高性能的 Layer 1 区块链,由 Mysten Labs 开发。它从底层重新设计了区块链的执行模型——以**对象(Object)**而非账户为核心,通过对象级别的并行执行和创新的共识协议,实现了亚秒级的交易终局和水平可扩展的吞吐量。本节将深入剖析 Sui 的技术架构,帮助你从系统层面理解 Sui 的设计哲学。

对象中心模型 vs 账户模型

以太坊的账户模型

在以太坊中,所有状态都存储在账户下。每个账户有一个余额和一个存储空间(Storage),智能合约的数据以键值对的形式存放在合约账户的 Storage 中。

以太坊账户模型:

账户 0xAlice
├── 余额: 10 ETH
└── Nonce: 5

合约账户 0xERC20
├── 余额: 0 ETH
├── 代码: ERC20 逻辑
└── Storage:
    ├── balances[Alice] = 1000
    ├── balances[Bob] = 500
    └── totalSupply = 1500

这个模型的问题在于:Alice 和 Bob 的代币余额都存储在同一个合约的 Storage 中。当 Alice 和 Bob 同时发起转账时,即使他们的交易完全无关,由于都需要修改同一个 Storage,这两笔交易也必须顺序执行

Sui 的对象模型

Sui 采用了完全不同的方式——数据以对象的形式存在,每个对象有唯一的 ID 和明确的所有者:

Sui 对象模型:

对象 0x1a2b (Coin<SUI>)
├── 所有者: Alice
└── 余额: 10 SUI

对象 0x3c4d (Coin<USDC>)
├── 所有者: Alice
└── 余额: 1000 USDC

对象 0x5e6f (Coin<USDC>)
├── 所有者: Bob
└── 余额: 500 USDC

在这个模型中,Alice 的 USDC(对象 0x3c4d)和 Bob 的 USDC(对象 0x5e6f)是独立的对象。当 Alice 转账给 Carol 时,她操作的是对象 0x3c4d;Bob 转账给 Dave 时,操作的是对象 0x5e6f。这两笔交易涉及不同的对象,可以被完全并行地执行

对象模型的优势

特性账户模型(以太坊)对象模型(Sui)
并行性需要复杂的并行化策略天然支持并行执行
资产表达余额是合约存储中的数字资产是独立的一等对象
所有权由合约逻辑维护由运行时原生保证
可组合性通过合约调用组合对象可以直接嵌套和组合
存储粒度合约级别对象级别

并行交易执行

Sui 的并行执行能力是其高性能的核心来源。传统区块链(如以太坊)按顺序逐一执行交易,而 Sui 可以同时处理大量不相关的交易。

依赖关系分析

Sui 在执行交易前,会分析每笔交易涉及的对象集合。如果两笔交易操作的对象集合没有交集,它们就可以并行执行:

交易 A: Alice 转 SUI 给 Bob    → 涉及对象: {0x1a2b}
交易 B: Carol 铸造 NFT          → 涉及对象: {新对象}
交易 C: Dave 转 USDC 给 Eve    → 涉及对象: {0x7g8h}
交易 D: Alice 转 USDC 给 Frank → 涉及对象: {0x3c4d}

依赖分析:
- A, B, C, D 涉及的对象完全不同
- 四笔交易可以完全并行执行!

对比以太坊:
- 所有交易都必须排队顺序执行
- 即使交易之间完全无关

水平可扩展性

由于交易可以并行执行,Sui 的吞吐量可以随着硬件资源的增加而线性提升。增加更多的 CPU 核心和验证者节点,就能处理更多的并发交易。这种水平可扩展性是传统区块链所不具备的。

共识架构:Narwhal + Bullshark

Sui 的共识系统由两个关键组件协同工作:Narwhal 负责交易的传播和排序,Bullshark 负责在验证者之间达成最终共识。

Narwhal:基于 DAG 的内存池

Narwhal 是一个高吞吐量的**内存池(Mempool)协议。它使用有向无环图(DAG)**结构来组织交易批次,而非传统的线性区块链结构。

Narwhal DAG 结构(简化示意):

轮次 1       轮次 2       轮次 3
┌─────┐    ┌─────┐    ┌─────┐
│ V1  │───▶│ V1  │───▶│ V1  │
└─────┘  ╲ └─────┘ ╲  └─────┘
          ╲  ▲    ╲  ╲  ▲
┌─────┐    ╲│      ╲  ╲│
│ V2  │────▶│ V2  │───▶│ V2  │
└─────┘  ╱  └─────┘ ╱  └─────┘
        ╱     ▲    ╱     ▲
┌─────┐╱     │   ╱     │
│ V3  │────▶│ V3  │───▶│ V3  │
└─────┘    └─────┘    └─────┘

V1, V2, V3 = 验证者节点
每个方块 = 该验证者在该轮次提交的交易批次
箭头 = 对前一轮次批次的引用(因果关系)

Narwhal 的关键设计:

  • 数据传播与共识解耦:交易数据的分发不需要等待共识完成
  • 高吞吐量:每个验证者可以独立地持续提交交易批次
  • 可靠性:即使部分节点故障,已提交的交易也不会丢失

Bullshark:共识协议

Bullshark 是建立在 Narwhal DAG 之上的共识协议。它的工作是在 DAG 结构中确定一个所有验证者都认同的交易排序。

Bullshark 的核心特性:

  • 零消息开销:Bullshark 不需要额外的消息交换,完全利用 Narwhal DAG 中已有的信息
  • 确定性终局:一旦共识达成,交易顺序不可更改,无需等待多个区块确认
  • 拜占庭容错:能够在最多 1/3 的验证者存在恶意行为时正常运作

已拥有对象 vs 共享对象

Sui 中的对象根据所有权模型分为不同类型,这直接影响了交易的执行路径和性能特征。

已拥有对象(Owned Objects)

已拥有对象是归属于某个特定地址的对象。只有所有者才能在交易中使用它们。

module examples::owned_demo;

/// 只有所有者能使用的资产
public struct MyAsset has key, store {
    id: UID,
    value: u64,
}

/// 创建一个已拥有对象——转移给发送者
public fun create(value: u64, ctx: &mut TxContext) {
    let asset = MyAsset {
        id: object::new(ctx),
        value,
    };
    transfer::transfer(asset, ctx.sender());
}

/// 只有所有者能调用此函数修改值
public fun update_value(asset: &mut MyAsset, new_value: u64) {
    asset.value = new_value;
}

共享对象(Shared Objects)

共享对象可以被任何人在交易中访问。由于多个用户可能同时操作共享对象,涉及共享对象的交易必须经过完整的共识排序

module examples::shared_demo;

/// 一个共享的计数器,任何人都可以递增
public struct Counter has key {
    id: UID,
    count: u64,
}

/// 创建共享对象
fun init(ctx: &mut TxContext) {
    let counter = Counter {
        id: object::new(ctx),
        count: 0,
    };
    transfer::share_object(counter);
}

/// 任何人都可以调用此函数
public fun increment(counter: &mut Counter) {
    counter.count = counter.count + 1;
}

/// 读取计数值
public fun value(counter: &Counter): u64 {
    counter.count
}

快速路径(Fast Path)

这是 Sui 最具突破性的设计之一。对于仅涉及已拥有对象的交易,Sui 可以跳过 Bullshark 共识,直接通过拜占庭一致广播(Byzantine Consistent Broadcast)实现确认。

交易执行路径:

              ┌─────────────────────┐
              │     交易提交         │
              └──────────┬──────────┘
                         │
                   ┌─────▼─────┐
                   │ 对象分析   │
                   └─────┬─────┘
                         │
              ┌──────────┴──────────┐
              │                     │
       ┌──────▼──────┐      ┌──────▼──────┐
       │ 仅已拥有对象  │      │ 涉及共享对象  │
       └──────┬──────┘      └──────┬──────┘
              │                     │
       ┌──────▼──────┐      ┌──────▼──────┐
       │  快速路径     │      │ Bullshark   │
       │ (~400ms)     │      │  共识排序     │
       └──────┬──────┘      │ (~2-3s)     │
              │              └──────┬──────┘
              │                     │
              └──────────┬──────────┘
                         │
                  ┌──────▼──────┐
                  │  交易终局    │
                  └─────────────┘

快速路径的意义:

  • 亚秒级终局:仅涉及已拥有对象的交易可以在约 400 毫秒内完成确认
  • 适用场景:个人代币转账、NFT 铸造和转移、个人资产更新等
  • 无需共识:减少了验证者之间的通信开销,大幅提升吞吐量

设计选择的影响

理解已拥有对象和共享对象的区别,对于 Sui 开发者来说至关重要。它直接影响了你的合约设计:

module examples::design_choice;

/// 方案 A:使用共享对象(需要共识,但任何人可操作)
public struct SharedPool has key {
    id: UID,
    total_liquidity: u64,
}

/// 方案 B:使用已拥有对象(快速路径,但只有所有者可操作)
public struct PersonalVault has key {
    id: UID,
    balance: u64,
}

/// 在设计合约时,需要权衡:
/// - 共享对象:灵活但慢(适合 DEX、借贷池等多人交互场景)
/// - 已拥有对象:快但限制(适合个人钱包、NFT 等个人资产场景)

Sui 的独特特性

亚秒级终局

得益于快速路径机制,Sui 是目前终局速度最快的区块链之一。相比之下:

区块链终局时间
比特币~60 分钟(6 个区块确认)
以太坊~13 分钟(64 个 slot)
Solana~13 秒
Sui(快速路径)~400 毫秒
Sui(共识路径)~2-3 秒

水平可扩展性

传统区块链的吞吐量受限于单条链的处理能力。Sui 通过对象级别的并行执行,实现了真正的水平可扩展性——增加更多的计算资源,就能获得更高的吞吐量,而不需要分片或二层扩展方案。

对象级粒度

Sui 的状态管理精确到单个对象级别,这带来了以下好处:

  • 精确的 Gas 计量:按实际使用的对象存储和计算量收费
  • 存储费退还:当对象被删除时,用户可以拿回预付的存储费
  • 细粒度权限控制:每个对象可以有不同的所有权和访问模式

可编程交易块(PTB)

可编程交易块允许在单笔交易中组合多个操作,实现复杂的原子操作:

PTB 示例:单笔交易完成三个步骤

Transaction {
    // 步骤 1:从 DEX 购买代币
    let coin = dex::swap(sui_coin, usdc_type);

    // 步骤 2:用代币添加流动性
    let lp = pool::add_liquidity(coin);

    // 步骤 3:将 LP 代币质押
    staking::stake(lp);
}

PTB 的优势:

  • 原子性:要么全部成功,要么全部回滚
  • 可组合性:一个步骤的输出可以直接作为下一个步骤的输入
  • Gas 效率:多个操作合并在一笔交易中,节省 Gas
  • 无需合约串联:不需要编写专门的聚合合约

Sui 架构全景图

┌─────────────────────────────────────────────────────┐
│                    客户端层                           │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐         │
│   │ 钱包应用  │  │  DApp    │  │ SDK/CLI  │         │
│   └────┬─────┘  └────┬─────┘  └────┬─────┘         │
│        └──────────────┼──────────────┘               │
└───────────────────────┼─────────────────────────────┘
                        │ JSON-RPC / GraphQL
┌───────────────────────┼─────────────────────────────┐
│                    全节点层                           │
│              ┌────────▼────────┐                     │
│              │    Full Node    │                     │
│              │  ┌────────────┐ │                     │
│              │  │ 交易路由    │ │                     │
│              │  │ 状态查询    │ │                     │
│              │  │ 事件索引    │ │                     │
│              │  └────────────┘ │                     │
│              └────────┬────────┘                     │
└───────────────────────┼─────────────────────────────┘
                        │
┌───────────────────────┼─────────────────────────────┐
│                   验证者层                            │
│     ┌─────────────────▼─────────────────────┐       │
│     │            交易处理引擎                  │       │
│     │  ┌───────────┐      ┌───────────────┐ │       │
│     │  │ 快速路径   │      │ Bullshark     │ │       │
│     │  │ (Owned)   │      │ 共识 (Shared)  │ │       │
│     │  └───────────┘      └───────────────┘ │       │
│     └───────────────────────────────────────┘       │
│     ┌───────────────────────────────────────┐       │
│     │           Narwhal (DAG Mempool)        │       │
│     └───────────────────────────────────────┘       │
│     ┌───────────────────────────────────────┐       │
│     │           Move 虚拟机 (MoveVM)          │       │
│     └───────────────────────────────────────┘       │
│     ┌───────────────────────────────────────┐       │
│     │          对象存储 (Object Store)        │       │
│     └───────────────────────────────────────┘       │
└─────────────────────────────────────────────────────┘

小结

本节深入介绍了 Sui 的技术架构。Sui 的对象中心模型从根本上改变了区块链的状态管理方式,使得并行执行成为可能;Narwhal + Bullshark 共识架构提供了高吞吐量和确定性终局;快速路径机制让已拥有对象的交易实现了亚秒级确认。这些设计创新使 Sui 成为当前性能最强的 Layer 1 区块链之一。在下一节中,我们将纵览 Sui 的生态系统,了解在这个强大基础设施之上构建的各类应用和协议。