# 《Move 学习》地址、账户与交易：区块链世界的三剑客 

By [链上码农](https://paragraph.com/@0x879edd015b63e424e37fc5f5fdb684ba93908888) · 2024-12-29

---

* * *

大家好！我是你们的区块链技术向导，今天我们来聊聊区块链中的三个核心概念：**地址（Address）**、**账户（Account）** 和 **交易（Transaction）**。无论你是刚入门的小白，还是已经摸爬滚打了一段时间的开发者，这篇文章都会用最接地气的方式，带你轻松掌握这些概念。准备好了吗？Let's go! 💻

📍 地址（Address）：区块链的"门牌号"
------------------------

**地址** 就像是区块链世界里的"门牌号"，用来唯一标识一个位置。它可以标识 **包（Package）**、**账户（Account）** 和 **对象（Object）**。地址的长度固定为 32 字节，通常以 `0x` 开头的十六进制字符串表示。而且，地址是大小写不敏感的，所以 `0xABC` 和 `0xabc` 是同一个地址。

这个地址就是一个标准的 32 字节地址，64 个字符，`0x` 开头。

### 保留地址：区块链的"VIP 专区"

Sui 有一些 **保留地址**，专门用来标识一些标准包和对象。这些地址通常是简单的值，方便记忆和输入。比如，标准库的地址是 `0x1`。如果地址长度小于 32 字节，会在左边补零。

    0x1 = 0x0000000000000000000000000000000000000000000000000000000000000001
    

一些常见的保留地址：

*   `0x1`：Sui 标准库的地址（别名 `std`）
    
*   `0x2`：Sui 框架的地址（别名 `sui`）
    
*   `0x6`：系统 `Clock` 对象的地址
    

💼 账户（Account）：你的区块链"身份证"
-------------------------

**账户** 是你在区块链世界里的"身份证"。它由私钥生成，并通过 **地址** 来标识。账户可以拥有对象，还可以发送交易。每笔交易都有一个发送者，发送者就是通过地址来标识的。

Sui 使用 **ED25519** 和 **SECP256K1** 两种加密算法来管理账户和签名。此外，Sui 还支持一种创新的身份验证方式——**zkLogin**，它结合了 Web2 和 Web3 的优势，让用户可以通过熟悉的登录方法（比如 Google 登录）访问去中心化应用（DApps），同时保护隐私。

### 1\. ED25519

*   **描述**：基于椭圆曲线的公钥签名算法，属于 Edwards 曲线家族。默认情况下，Sui 会使用 ED25519 来生成账户密钥对。
    
*   **特点**：
    
    *   高效且安全，提供快速签名和验证性能。
        
    *   私钥长度为 32 字节，公钥长度为 32 字节。
        
    *   签名结果长度为 64 字节。
        
*   **用法**：
    
    *   常用于高性能区块链的默认签名算法。
        
    *   公钥生成账户地址的哈希（通常通过 BLAKE2b 或类似算法）。
        

### 2\. SECP256K1

*   **描述**：基于 Koblitz 曲线的椭圆曲线签名算法，广泛用于比特币和以太坊等区块链。Sui 支持 SECP256K1 签名方案，适合与传统区块链账户体系互操作。
    
*   **特点**：
    
    *   私钥长度为 32 字节，公钥长度为 33 字节（压缩形式）。
        
    *   签名结果长度为 65 字节（包括 r、s 和恢复标志 v）。
        
*   **用法**：
    
    *   通常与以太坊等兼容应用交互时使用。
        

### 3\. zkLogin：Web2 与 Web3 的桥梁

**zkLogin** 是 Sui 推出的一种创新身份验证方式，它利用 **零知识证明（ZKP）** 技术，让用户可以通过熟悉的 Web2 登录方式（如 Google、Facebook 等）访问去中心化应用（DApps），同时保护隐私。以下是 zkLogin 的核心特点：

*   **隐私保护**：用户无需透露敏感信息（如电子邮件或身份信息），只需证明自己符合特定条件即可。
    
*   **无缝体验**：用户可以使用已有的 Web2 账户（如 Google 账号）直接登录 DApps，无需创建新的区块链账户。
    
*   **去中心化**：尽管使用了 Web2 的登录方式，zkLogin 仍然保持了区块链的去中心化特性，用户对自己的数据和资产拥有完全控制权。
    

### 账户地址生成

无论使用哪种算法，Sui 都将公钥的字节数据进行哈希处理后，生成一个 32 字节的账户地址：

1.  **ED25519**：直接对公钥进行哈希生成地址。
    
2.  **SECP256K1**：对压缩公钥的字节进行哈希生成地址。
    
3.  **zkLogin**：基于零知识证明生成地址，确保用户隐私。
    

哈希算法通常是 **BLAKE2b-256**。

### 账户类型的标识

Sui 使用特定方式区分加密算法的账户类型：

1.  **ED25519 地址**：地址前缀标志为 `0x00`。
    
2.  **SECP256K1 地址**：地址前缀标志为 `0x01`。
    
3.  **zkLogin 地址**：地址前缀标志为 `0x02`。
    

这确保了网络可以正确识别签名算法并验证交易。

### 签名格式

在交易签名中，Sui 使用多部分签名结构：

1.  签名字节。
    
2.  公钥（用于验证签名）。
    
3.  签名类型标志（例如，ED25519、SECP256K1 或 zkLogin）。
    

### 使用方式

在开发中，可以通过 Sui 提供的工具生成和管理密钥对。例如，使用 Sui CLI 初始化账户或生成密钥：

结果会显示密钥的类型（例如，ED25519）以及对应的账户地址。

💸 交易（Transaction）：区块链的"操作指令"
-----------------------------

**交易** 是区块链世界中的"操作指令"。它是与区块链交互的唯一方式。通过交易，你可以调用智能合约、部署新包、升级现有包，甚至改变区块链的状态。

### 交易结构：区块链的"操作手册"

每笔交易都明确指定了它操作的对象！交易由以下几个部分组成：

*   **发送者**：签署交易的账户。
    
*   **命令列表**：要执行的操作。
    
*   **命令输入**：命令的参数，可以是 `pure`（简单值，如数字或字符串）或 `object`（交易将访问的对象）。
    
*   **Gas 对象**：用于支付交易的 `Coin` 对象。
    
*   **Gas 价格和预算**：交易的成本。
    

### 输入类型：交易的"食材"

交易输入分为两种类型：

1.  **纯参数**：主要是基本类型，比如 `bool`、`u8`、`address`、`String` 等。
    
2.  **对象参数**：交易将访问的对象或对象引用。对象参数必须是共享对象、冻结对象或交易发送者拥有的对象。
    

### 命令：交易的"操作步骤"

Sui 交易可以包含多个命令。每个命令可以是一个内置命令（如发布包）或对已发布包中函数的调用。命令按交易中列出的顺序执行，并且可以使用前一个命令的结果，形成一个链。交易要么整体成功，要么整体失败。

### 交易效果：交易的"成果报告"

交易效果是交易对区块链状态的改变。具体来说，交易可以通过以下方式改变状态：

*   使用 Gas 对象支付交易费用。
    
*   创建、更新或删除对象。
    
*   发出事件。
    

交易执行的结果包括以下几个部分：

*   **交易摘要**：交易的哈希值，用于标识交易。
    
*   **交易数据**：交易中使用的输入、命令和 Gas 对象。
    
*   **交易效果**：交易的状态和"效果"，包括对象更新、Gas 对象使用情况、交易成本以及交易发出的事件。
    
*   **事件**：交易发出的自定义事件。
    
*   **对象变更**：对对象的更改，包括 **所有权变更**。
    
*   **余额变更**：参与交易的账户的余额变化。

---

*Originally published on [链上码农](https://paragraph.com/@0x879edd015b63e424e37fc5f5fdb684ba93908888/move)*
