跳转至

账户

波场使用账户模型。 地址是账户的唯一标识符,操作账户需要私钥签名。 账户具有多个属性,包括 TRX 和 TRC10 通证余额、带宽、能量等。 账户可以发送交易来增加或减少其 TRX 或 TRC10 通证余额、部署智能合约,以及触发由其自身或其他账户发布的智能合约。 所有波场账户都可以申请成为超级代表或为已当选的超级代表投票。 账户是波场上所有活动的基础。

账户类型

波场有两种账户类型:

  • 普通账户 - 即外部拥有的账户,由拥有私钥的个人控制。
  • 合约账户 - 部署在波场网络上的智能合约,由代码控制。没有人拥有合约账户的私钥。

两种账户类型都具备以下能力:

  • 接收、持有和发送 TRX 或通证
  • 与已部署的智能合约交互

账户与密钥对

一个账户由一对加密密钥组成:公钥和私钥。公钥可以映射到一个地址,而私钥用于签署交易。此密钥对有助于证明交易确实由发送方签署,并防止伪造。

这可以防止恶意行为者广播虚假交易,因为你总是可以验证交易的发送方。

例如,当爱丽丝想要从她的账户向鲍勃发送 TRX 时,她需要创建一笔交易并将其发送到波场网络进行验证。 通过密钥对,爱丽丝可以证明交易请求确实由她发起。 如果没有加密机制,恶意行为者伊芙可能会公开广播类似请求:“从爱丽丝的账户发送5个 TRX 到伊芙的账户”,而没有人能够验证该交易请求是否由爱丽丝本人发起。

外部账户创建

波场的密钥对生成算法与以太坊完全相同,使用椭圆曲线数字签名算法 ECDSA-secp256k1。 密钥对生成过程为:首先,生成一个随机私钥,由64个十六进制字符组成。 然后,根据椭圆曲线数字签名算法从私钥生成一个公钥。最后,将公钥的 Keccak-256 结果的最后20个字节取出,并在 Hex 格式地址前加上41。

账户地址格式

除了 Hex 格式,波场网络账户地址还有 Base58 格式。

  • Hex

与由相同私钥生成的波场 Hex 格式地址和以太坊地址相比,除了首位41,其他部分完全相同。

418840E6C55B9ADA326D211D818C34A994AECED808

Note

波场十六进制格式地址去掉前面的41即可得到以太坊地址。

  • Base58

Base58 地址可以通过对 Hex 地址进行 base check 计算获得。所有 Base58 地址以 T 开头。例如:

TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL

使用 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。例如,

Base58: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
Hex:    41A614F803B6FD780986A42C78EC9C7F77E6DED13C