区块链 · 数字资产知识 · 行业资讯
文章库关于本站

信息核验

区块链的合约地址相关术语如何理解:账户、代币与授权

摘要

以以太坊账户模型与 ERC-20 接口为范围,解释合约地址、外部账户、nonce、代币余额及授权额度,厘清地址标识、账户控制权和合约数据之间的关系。

区块链液冷的科技主题配图

适用范围与合约地址

这里主要解释以太坊及采用相应账户与代币接口的场景,其他区块链的地址规则不能直接套用。以太坊账户文档将外部账户与合约账户区分:前者由私钥控制,后者按代码运行。合约地址是合约账户的标识,通常写成 0x 加40个十六进制字符;钱包则是与账户交互的应用。

理解这些词可以分成三个问题:地址回答交互对象在哪里,账户类型说明其如何受控,钱包提供操作界面。因此,仅看到一串地址,不能凭外观认定它是个人账户还是某种代币合约。

区块链显卡矿机的科技主题配图

部署、nonce 与 salt

部署是把合约创建到网络上的过程。以太坊的 CREATE 根据创建者地址及其 nonce 推导合约地址;nonce 是与账户活动相关的计数。CREATE2 则使用创建者地址、称为 salt 的选定值及创建代码的哈希推导地址,允许提前计算结果。

区块链硬盘挖矿的科技主题配图

预先算出的地址与已经存在的合约需要分别理解。地址计算确定的是标识,部署确定的是合约是否已创建;不能单凭能够算出地址,就推断该处已有可执行的业务逻辑。

代币地址、余额与小数位

OpenZeppelin 的 ERC-20 文档区分了代币名称 name、简称 symbol、小数位 decimals、总供应量 totalSupply 和账户余额 balanceOf。decimals 用于把整数余额转换为展示数量,不改变合约内部的整数运算。

代币合约地址标识管理代币规则与记录的合约,持有人地址是余额查询的对象。两者不能混为一谈:查询某个地址持有多少代币,需要同时明确查询哪个代币合约。名称和简称属于描述信息,不能代替地址标识。

授权额度与转移事件

ERC-20 中,approve 设置 spender 可代 owner 支配的额度,allowance 查询剩余额度,transferFrom 在满足余额及授权条件时转移代币。Transfer 和 Approval 分别记录代币转移与授权行为。

授权额度与持有余额表达不同关系:余额说明账户拥有多少,额度说明另一个地址获准代为支配多少。授权本身不能等同于代币已转出,也不能解释为把账户私钥交给了对方。

常见理解误区

合约地址是否就是私钥?不是。地址用于标识账户,合约账户本身没有用于直接控制它的私钥;合约中的权限要由代码解释。所有合约地址是否都是代币地址?也不是,代币合约只是智能合约的一类。理解某个地址的具体作用,需要结合对应合约的功能,不能只依靠地址格式或名称。

← 返回全部文章

延伸阅读 · 相关栏目

安全防护钱包与账户风险识别信息核验