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

4 阅读7分钟

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

📍 地址(Address):区块链的"门牌号"

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

0xe51ff5cd221a81c3d6e22b9e670ddf99004d71de4f769b0312b68c7c4872e2f1

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

保留地址:区块链的"VIP 专区"

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

0x1 = 0x0000000000000000000000000000000000000000000000000000000000000001

一些常见的保留地址:

  • 0x1:Sui 标准库的地址(别名 std
  • 0x2:Sui 框架的地址(别名 sui
  • 0x6:系统 Clock 对象的地址

💼 账户(Account):你的区块链"身份证"

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

Sui 使用 ED25519SECP256K1 两种加密算法来管理账户和签名。此外,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 初始化账户或生成密钥:

sui keytool generate

结果会显示密钥的类型(例如,ED25519)以及对应的账户地址。

💸 交易(Transaction):区块链的"操作指令"

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

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

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

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

输入类型:交易的"食材"

交易输入分为两种类型:

  1. 纯参数:主要是基本类型,比如 boolu8addressString 等。
  2. 对象参数:交易将访问的对象或对象引用。对象参数必须是共享对象、冻结对象或交易发送者拥有的对象。

命令:交易的"操作步骤"

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

交易效果:交易的"成果报告"

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

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

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

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