大家好!我是你们的区块链技术向导,今天我们来聊聊区块链中的三个核心概念:地址(Address)、账户(Account) 和 交易(Transaction)。无论你是刚入门的小白,还是已经摸爬滚打了一段时间的开发者,这篇文章都会用最接地气的方式,带你轻松掌握这些概念。准备好了吗?Let's go! 💻
📍 地址(Address):区块链的"门牌号"
地址 就像是区块链世界里的"门牌号",用来唯一标识一个位置。它可以标识 包(Package)、账户(Account) 和 对象(Object)。地址的长度固定为 32 字节,通常以 0x
开头的十六进制字符串表示。而且,地址是大小写不敏感的,所以 0xABC
和 0xabc
是同一个地址。
0xe51ff5cd221a81c3d6e22b9e670ddf99004d71de4f769b0312b68c7c4872e2f1
这个地址就是一个标准的 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 字节的账户地址:
- ED25519:直接对公钥进行哈希生成地址。
- SECP256K1:对压缩公钥的字节进行哈希生成地址。
- zkLogin:基于零知识证明生成地址,确保用户隐私。
哈希算法通常是 BLAKE2b-256。
账户类型的标识
Sui 使用特定方式区分加密算法的账户类型:
- ED25519 地址:地址前缀标志为
0x00
。 - SECP256K1 地址:地址前缀标志为
0x01
。 - zkLogin 地址:地址前缀标志为
0x02
。
这确保了网络可以正确识别签名算法并验证交易。
签名格式
在交易签名中,Sui 使用多部分签名结构:
- 签名字节。
- 公钥(用于验证签名)。
- 签名类型标志(例如,ED25519、SECP256K1 或 zkLogin)。
使用方式
在开发中,可以通过 Sui 提供的工具生成和管理密钥对。例如,使用 Sui CLI 初始化账户或生成密钥:
sui keytool generate
结果会显示密钥的类型(例如,ED25519)以及对应的账户地址。
💸 交易(Transaction):区块链的"操作指令"
交易 是区块链世界中的"操作指令"。它是与区块链交互的唯一方式。通过交易,你可以调用智能合约、部署新包、升级现有包,甚至改变区块链的状态。
交易结构:区块链的"操作手册"
每笔交易都明确指定了它操作的对象!交易由以下几个部分组成:
- 发送者:签署交易的账户。
- 命令列表:要执行的操作。
- 命令输入:命令的参数,可以是
pure
(简单值,如数字或字符串)或object
(交易将访问的对象)。 - Gas 对象:用于支付交易的
Coin
对象。 - Gas 价格和预算:交易的成本。
输入类型:交易的"食材"
交易输入分为两种类型:
- 纯参数:主要是基本类型,比如
bool
、u8
、address
、String
等。 - 对象参数:交易将访问的对象或对象引用。对象参数必须是共享对象、冻结对象或交易发送者拥有的对象。
命令:交易的"操作步骤"
Sui 交易可以包含多个命令。每个命令可以是一个内置命令(如发布包)或对已发布包中函数的调用。命令按交易中列出的顺序执行,并且可以使用前一个命令的结果,形成一个链。交易要么整体成功,要么整体失败。
交易效果:交易的"成果报告"
交易效果是交易对区块链状态的改变。具体来说,交易可以通过以下方式改变状态:
- 使用 Gas 对象支付交易费用。
- 创建、更新或删除对象。
- 发出事件。
交易执行的结果包括以下几个部分:
- 交易摘要:交易的哈希值,用于标识交易。
- 交易数据:交易中使用的输入、命令和 Gas 对象。
- 交易效果:交易的状态和"效果",包括对象更新、Gas 对象使用情况、交易成本以及交易发出的事件。
- 事件:交易发出的自定义事件。
- 对象变更:对对象的更改,包括 所有权变更。
- 余额变更:参与交易的账户的余额变化。