TRON采用账户模型,账户的唯一标识为地址(address),对账户操作需要私钥签名。每个账户可以拥有TRX、TRC10 Token、带宽、能量等各种资源。通过发送交易可以增减TRX或者TRC10 Token余额,可以发布并拥有智能合约,也可以调用自己或者他人发布的智能合约。可以申请成为超级代表并被投票,也可以对超级代表进行投票等等。TRON所有的活动都围绕账户进行。
账户类型
TRON账户类型分为两种:
- 普通账户。即外部账户,由拥有该账户私钥的人控制
- 合约账户。一个部署到TRON网络上的智能合约就是一个合约账户,由代码控制,没有人拥有合约账户的私钥。
所有类型的账户都可以:
- 接收,持有和发送TRX/其它tokens
- 与部署的智能合约交互
账户及密钥对
帐户由一对加密密钥组成:公钥和私钥。公钥映射为地址,私钥用来对交易进行签名。这对密钥不但可以防止交易被篡改和伪造,而且还可以证明交易确实是由发送方所发送。
由于可以通过密钥对来验证交易的发送方,因此可以防止恶意参与者传播虚假交易。
如果Alice想要将TRX从她自己的账户发送到Bob的账户,那么Alice需要创建一个交易,然后将其发送到TRON网络,TRON网络需要验证该交易。密钥对的使用确保了Alice可以证明是她发起的交易请求。如果没有这个密钥机制,恶意的对手Eve就可以简单地公开广播一个类似于“从Alice的账户中发送5个TRX到Eve的账户中”的请求,而没有人能够验证它是不是来自于Alice。
外部账户的创建
对于创建账户,有非常多的库和工具可以选择,它们会生成一个随机的私钥。私钥由64个十六进制字符组成。公钥的生成基于私钥,并使用椭圆曲线数字签名算法来生成对应的公钥。基于公钥可以计算出地址。
账户地址格式
TRON网络账户地址有两种格式,一种是Hex格式,另一种是Base58格式。
-
Hex格式
用公钥P作为输入,计算SHA3得到结果H,取H的最后20字节,在前面填充一个字节0x41得到Hex格式地址。例如:418840E6C55B9ADA326D211D818C34A994AECED808
注意:Hex格式的TRON地址去掉开头的
41
即为以太坊地址。 -
Base58格式
对hex格式的地址进行basecheck计算得到Base58格式地址,所有账户地址的第一个字符均为T。例如:TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL
使用tronweb进行Hex和Base58格式转换示例:
tronWeb.address.toHex("TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL") > "418840E6C55B9ADA326D211D818C34A994AECED808" tronWeb.address.fromHex("418840E6C55B9ADA326D211D818C34A994AECED808") > "TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL"
创建账户的几种方式
可以通过以下几种方式创建TRON网络账户,也就是生成一个私钥和对应的地址。
- 使用命令行钱包wallet-cli离线创建账户
wallet> GenerateAddress { "address": "TU6JdEDQGPus64LTMksvnxF2cv4FQrXPCa", "privateKey": "b1ba1db577a36421924a87026cda27523851c6e88123d0a0a1def9a974376176" }
- 使用SDK离线创建账户
以tronweb为例:tronWeb.createAccount() > address: { base58: "TDpBe64DqirkKWj6HWuR1pWgmnhw2wDacE" hex: "412A2B9F7641D0750C1E822D0E49EF765C8106524B" privateKey: "427139B43028A492E2705BCC9C64172392B8DB59F3BA1AEDAE41C88924960091" publicKey:"0404B604296010A55D40000B798EE8454ECCC1F8900E70B1ADF47C9887625D8BAE3866351A6FA0B5370623268410D33D345F63344121455849C9C28F9389ED9731" }
- 使用钱包应用生成私钥和地址
激活账户
新创建的账户在链上并不存在,需要激活后,才能通过API查询或者通过区块链浏览器搜索到,可以通过以下两种方式激活账户:
- 由已有老账户往新账户地址发送任意数量的TRX或者TRC-10代币,完成账户的激活。
- 使用已有的老账户调用Java-tron的
wallet/createaccount
接口创建一个交易,然后签名并广播到网络,也能完成对一个新账户的激活。
激活账户需要支付1TRX的账户创建费用,另外上面两种激活新账户的交易,如果交易发送者账户有足够的质押获得的带宽,那么这笔交易消耗的带宽会从发送者账户质押获得的带宽中扣除,否则,会消耗0.1 TRX来支付带宽费用。
在合约中向一个未激活的账户地址转账TRX或TRC-10代币,也能完成这个账户的激活。这种方式除了正常合约调用需要消耗的带宽和能量外,只会额外消耗25,000 能量,不会消耗1TRX的账户创建费用和0.1TRX的带宽费用。
合约账户
将合约部署到TRON区块链时,得到相应的合约账户地址,该地址由部署合约交易的ID以及发送者账户地址计算所得。合约账户和外部账户的地址格式相同,可以是hex格式或者Base58格式,例如:
Base58: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
Hex: 41A614F803B6FD780986A42C78EC9C7F77E6DED13C
Updated 8 days ago