Account
Introduction
TRON uses an account model. The address is the unique identifier of an account, and a private key signature is required to operate an account. An account has many attributes, including TRX & token balances, bandwidth, energy, Etc. TRX's and tokens' transferring cost bandwidth, smart contract related operations cost energy. An account can apply to become a super representative candidate and accept votes from other accounts. The account is the basis of all the TRON's activities.
Account creation
Generate the address and private key using a wallet or explorer. Use these 2 ways to activate the account: Transfer TRX/TRC-10 token to this address, the other way is transferring TRX/TRC-10 in a contract. This operation costs extra 25,000 energy.
Call the
CreateAccount
contract from an existing account.
Account creation costs only bandwidth. It burns TRX if bandwidth is insufficient.
Transferring TRC20 will not activate an account. However, the balance can be inquired from Tronscan by the address.
Key-pair Generation
Tron's signature algorithm is ECDSA, and the curve used is SECP256K1. A private key is a random number, and the corresponding public key is a point on the elliptic curve. Generating process:
Make a random number
d
as the private key.Calculate
P = d * G
as the public key. (G
is the elliptic curve base point)
Address Format
Use the public key P
as the input, and use SHA3 get the result H
. The length of the public key is 64 bytes (SHA3 uses Keccak256). Use the last 20 bytes of H
, and add a byte of 0x41
as a prefix. Do a basecheck (see next paragraph), and the result will be the final address. All addresses start with 'T'.
Basecheck process: first run SHA256 on the address to get h1
, then run SHA256 on h1
to get h2
. Use the first 4 bytes as a checksum, add it to the end of the address (address||check
). Finally, base58 encode address||check
to get the final result.
Character map ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
Signature
Steps
Transfer the
rawdata
of the transaction tobyte[]
.Run SHA256 on the
rawdata
.Use the private key to sign the result of step 2.
Add the signature to the transaction.
Algorithm
ECDSA, SECP256K
Example
Java
Note: The size of the signature result is 65 bytes:
r
= 32 bytess
= 32 bytesv
= 1 byteFull node verifies the signature once receiving a transaction; it generates an address with the value of
hash
,r
,s
, andv
, then it compares with the address in the transaction.
Demo
Java
Last updated
Was this helpful?