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)而非账户为核心,通过对象级别的并行执行与验证者网络对共享状态的一致性处理,实现高吞吐与可扩展性。本节从产品级视角介绍架构要点;共识与排序的具体算法以当前主网及官方文档为准,本书不展开算法名称与演进细节。

对象中心模型 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 核心和验证者节点,就能处理更多的并发交易。这种水平可扩展性是传统区块链所不具备的。

验证者与全局排序(概要)

Sui 由一组验证者共同维护账本。凡是多方可能争用同一链上可变状态的情形,网络都需要在验证者之间形成一致的排序与提交结果——具体协议名称、模块划分与性能数字会随版本迭代,本书不展开算法课;对象级并行与「共享对象为何更敏感」见第九章 §9.4

已拥有对象 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
}

设计选择的影响

理解已拥有对象和共享对象的区别,对于 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 以对象并行与验证者网络为特点,具体数字随版本与负载变化,以官方文档与实测为准。传统对比(数量级仅作直觉):

区块链典型确认数量级(示意)
比特币约数十分钟级(多确认)
以太坊约数分钟级(视确认习惯)
Solana约秒级
Sui以对象类型与交易内容而异,见官方说明

水平可扩展性

传统区块链的吞吐量受限于单条链的处理能力。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    │                     │
│              │  ┌────────────┐ │                     │
│              │  │ 交易路由    │ │                     │
│              │  │ 状态查询    │ │                     │
│              │  │ 事件索引    │ │                     │
│              │  └────────────┘ │                     │
│              └────────┬────────┘                     │
└───────────────────────┼─────────────────────────────┘
                        │
┌───────────────────────┼─────────────────────────────┐
│                   验证者层                            │
│     ┌─────────────────▼─────────────────────┐       │
│     │            交易处理与一致性层              │       │
│     │  (对象调度、共享状态排序等,实现随版本演进)  │       │
│     └───────────────────────────────────────┘       │
│     ┌───────────────────────────────────────┐       │
│     │           Move 虚拟机 (MoveVM)          │       │
│     └───────────────────────────────────────┘       │
│     ┌───────────────────────────────────────┐       │
│     │          对象存储 (Object Store)        │       │
│     └───────────────────────────────────────┘       │
└─────────────────────────────────────────────────────┘

小结

本节从架构视角介绍了 Sui:对象模型带来并行与清晰的资产边界;验证者网络对共享状态提供一致性;具体共识与执行管线以官方文档为准。在下一节中,我们将纵览 Sui 的生态系统,了解在这个基础设施之上构建的各类应用和协议。