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 的生态系统,了解在这个强大基础设施之上构建的各类应用和协议。