账户
波场使用账户模型。 地址是账户的唯一标识符,操作账户需要私钥签名。 账户具有多个属性,包括 TRX 和 TRC10 通证余额、带宽、能量等。 账户可以发送交易来增加或减少其 TRX 或 TRC10 通证余额、部署智能合约,以及触发由其自身或其他账户发布的智能合约。 所有波场账户都可以申请成为超级代表或为已当选的超级代表投票。 账户是波场上所有活动的基础。
账户类型
波场有两种账户类型:
- 普通账户 - 即外部拥有的账户,由拥有私钥的个人控制。
- 合约账户 - 部署在波场网络上的智能合约,由代码控制。没有人拥有合约账户的私钥。
两种账户类型都具备以下能力:
- 接收、持有和发送 TRX 或通证
- 与已部署的智能合约交互
账户与密钥对
一个账户由一对加密密钥组成:公钥和私钥。公钥可以映射到一个地址,而私钥用于签署交易。此密钥对有助于证明交易确实由发送方签署,并防止伪造。
这可以防止恶意行为者广播虚假交易,因为你总是可以验证交易的发送方。
例如,当爱丽丝想要从她的账户向鲍勃发送 TRX 时,她需要创建一笔交易并将其发送到波场网络进行验证。 通过密钥对,爱丽丝可以证明交易请求确实由她发起。 如果没有加密机制,恶意行为者伊芙可能会公开广播类似请求:“从爱丽丝的账户发送5个 TRX 到伊芙的账户”,而没有人能够验证该交易请求是否由爱丽丝本人发起。
外部账户创建
波场的密钥对生成算法与以太坊完全相同,使用椭圆曲线数字签名算法 ECDSA-secp256k1
。
密钥对生成过程为:首先,生成一个随机私钥,由64个十六进制字符组成。
然后,根据椭圆曲线数字签名算法从私钥生成一个公钥。最后,将公钥的 Keccak-256
结果的最后20个字节取出,并在 Hex 格式地址前加上41。
账户地址格式
除了 Hex 格式,波场网络账户地址还有 Base58 格式。
- Hex
与由相同私钥生成的波场 Hex 格式地址和以太坊地址相比,除了首位41,其他部分完全相同。
Note
波场十六进制格式地址去掉前面的41即可得到以太坊地址。
- Base58
Base58 地址可以通过对 Hex 地址进行 base check 计算获得。所有 Base58 地址以 T 开头。例如:
使用 tronweb 进行 Hex 和 Base58 格式转换的示例:
tronWeb.address.toHex("TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL")
> "418840E6C55B9ADA326D211D818C34A994AECED808"
tronWeb.address.fromHex("418840E6C55B9ADA326D211D818C34A994AECED808")
> "TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL"
创建帐户的方法
用户可以通过以下方式创建账户。即生成私钥和相应的地址。
- 使用命令行钱包 wallet-cli 离线创建账户
wallet> GenerateAddress
{
"address": "TU6JdEDQGPus64LTMksvnxF2cv4FQrXPCa",
"privateKey": "b1ba1db577a36421924a87026cda27523851c6e88123d0a0a1def9a974376176"
}
- 以 TronWeb 为例,使用 SDK 离线创建一个账户:
tronWeb.createAccount()
> address:
{
base58: "TDpBe64DqirkKWj6HWuR1pWgmnhw2wDacE"
hex: "412A2B9F7641D0750C1E822D0E49EF765C8106524B"
privateKey: "427139B43028A492E2705BCC9C64172392B8DB59F3BA1AEDAE41C88924960091"
publicKey:"0404B604296010A55D40000B798EE8454ECCC1F8900E70B1ADF47C9887625D8BAE3866351A6FA0B5370623268410D33D345F63344121455849C9C28F9389ED9731"
}
- 使用钱包应用程序创建私钥和地址
账户激活
新创建的账户在链上不存在,需要激活后才能通过 API 查询或在链上浏览器中找到。账户可以通过以下两种方式激活:
- 从已有账户向新账户发送任意数量的 TRX 或 TRC-10 通证。
- 调用 Java-tron 的
wallet/createaccount
API 从已有账户创建一笔交易,然后对交易进行签名并广播到波场网络。
创建新账户时需支付 1TRX 的账户创建费。此外,如果上述两笔交易的发送方通过质押 TRX 获取了足够的带宽, 那么创建账户时将仅消耗带宽,否则将燃烧 0.1TRX 来支付带宽费用。
或者,通过智能合约将 TRX 或 TRC-10 通证转移到一个不活跃的账户地址,也可以完成账户激活。 除了正常合约调用所消耗的带宽和能量之外,这种方式仅会额外消耗25000能量,而不会消耗 1TRX 的账户创建费和 0.1TRX 的带宽费。
合约账户
当智能合约部署到波场网络时,将返回相应的合约账户地址,其通过已部署合约交易的ID和发送者的账户地址计算得出。 合约账户地址的格式与外部账户相同:Hex或Base58。例如,