Tron(波场) 是一个兼容 EVM 的区块链平台
作者丨Seek
Tron(波场) 是一个兼容 EVM 的区块链平台, Tron的技术架构由三层组成:
存储层: 包括区块存储和状态存储,支持多种存储机制。
核心层: 实现了智能合约、账户管理和共识机制(目前使用的是DPoS,即委托权益证明)。
应用层: 为开发者提供API和SDK,支持开发去中心化应用(DApps)。
ron虚拟机(TVM): 兼容以太坊虚拟机(EVM),使开发者可以轻松将以太坊上的应用迁移到Tron上。一组 Sui Move 字节码模块。每个模块都有一个在包含包内唯一的名称。包的链上 ID 和模块名称的组合唯一地标识了模块。当您将智能合约发布到 Sui 时,包是发布的单位。发布包对象后,它是不可变的,永远无法更改或删除。包对象可以依赖于之前发布到 Sui 的其他包对象。
智能合约: 支持Solidity语言编写的智能合约。
TRC-20和TRC-721标准: TRC-20是Tron的代币标准,类似于以太坊的ERC-20;TRC-721则是非同质化代币标准,类似于ERC-721。
Tron采用委托权益证明(DPoS)机制。TRX持有者可以投票选举超级代表(Super Representatives,SR),这些SR负责验证交易和维护网络的安全。
Tron生态系统包含多个重要组件和项目:
TronLink: 官方钱包,支持TRX和TRC-20代币的存储和交易。
JustSwap: 去中心化交易所,支持TRC-20代币的交易。
Sun Network: 侧链扩展方案,旨在提升Tron主网的扩展性。
BitTorrent: Tron收购的去中心化文件共享协议,与Tron网络深度集成。
DApps: 大量去中心化应用在 Tron 平台上运行。
Tron的原生代币是TRX,主要用于以下几个方面:
交易费用: 支付网络上的交易费用。
Staking和投票: TRX持有者可以质押代币并参与超级代表的选举。
DApp支付: 在Tron平台上的去中心化应用中进行支付和交易。
export function createTrxAddress (seedHex: string, addressIndex: string): string {
const node = bip32.fromSeed(Buffer.from(seedHex, 'hex'));
const child = node.derivePath("m/44'/195'/0'/0/" + addressIndex + '');
const privateKey = child.privateKey.toString('hex');
const publickKey = child.publicKey.toString('hex');
const address = pkToAddress(privateKey).toString('hex');
return JSON.stringify({
privateKey,
publickKey,
address
});
}
export async function signTrxTransaction (params: any): Promise<string> {
const { privateKey, from, to, amount, energyLimit, energyPrice, refBlock, tokenAddress, tokenTRC10, expiration } = params;
const time = Date.now();
const feeLimit = energyLimit * energyPrice; // SUN
const rawTx = buildTronTransaction({
from,
to,
amount,
feeLimit,
refBlock,
tokenAddress: tokenAddress || NULLTOKENADDR,
tokenTRC10,
expiration,
permissionId: 0,
time
});
const signedTx: any = signTx(privateKey, rawTx);
return signedTx.hex;
}
注意:完整代码可以联系 The Web3 社区帮助您,联系方式 github 上和 The Web3Dao 公众号上面有。
curl --location 'https://api.trongrid.io/wallet/getaccount' \
--header 'Content-Type: application/json' \
--data '{
"address": "TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g",
"visible": true
}'
{
"address": "TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g",
"balance": 68623166,
"create_time": 1675582485000,
"latest_consume_time": 1712481906000,
"net_window_size": 28800000,
"net_window_optimized": true,
"account_resource": {
"latest_consume_time_for_energy": 1714295640000,
"energy_window_size": 28800000,
"energy_window_optimized": true
},
"owner_permission": {},
"active_permission": [],
"frozenV2": [
{},
{
"type": "ENERGY"
},
{
"type": "TRON_POWER"
}
],
"assetV2": [
{
"key": "1004977",
"value": 8888880000
},
{
"key": "1005026",
"value": 8888880000
}
],
"free_asset_net_usageV2": [
{
"key": "1004977",
"value": 0
},
{
"key": "1005026",
"value": 0
}
],
"asset_optimized": true
}
balance:账户余额
account_resource:账户资源
https://developers.tron.network/reference/get-transaction-info-by-account-address
https://developers.tron.network/reference/get-trc20-transaction-info-by-account-address
curl --location 'https://api.trongrid.io/wallet/getenergyprices' \
--data ''
{
"prices": "0:100,1542607200000:20,1544724000000:10,1606240800000:40,1613044800000:140,1635422400000:280,1670133600000:420"
}
curl --location 'https://api.trongrid.io/walletsolidity/getblock' \
--data ''
{
"blockID": "0000000003b6b891043be54ac0ae1ef579fad5e6e1732cb0ac4237a873b8453e",
"block_header": {
"raw_data": {
"number": 62306449,
"txTrieRoot": "7cb6ddff8ada79c91baf6667cc8ead757b39205a8dc8ae097298dbb0587bddb7",
"witness_address": "4114f2c09d3de3fe82a71960da65d4935a30b24e1f",
"parentHash": "0000000003b6b890d8e1d886520dcad1820f4313a435ad593a80c549ea883054",
"version": 30,
"timestamp": 1717563117000
},
"witness_signature": "82cd722206df1bd86be854605514f5a45f4914dba2097de6fd59b8c45a07721d5af9a60ec567ecdd48921aec5d458fa26f359315b6561b3d98bedd11910f777601"
}
}
https://developers.tron.network/reference/gettransactionbyid
https://developers.tron.network/reference/gettransactioninfobyid-1
curl --location 'https://api.trongrid.io/wallet/broadcasthex' \
--header 'Content-Type: application/json' \
--data '{
"transaction": "0A83010A0261B72208C487C467E75A3B8E40A4B7D099FE315A65080112610A2D747970652E676F6F676C65617069732E636F6D2F70726F746F636F6C2E5472616E73666572436F6E747261637412300A1541CF55FB918FB606E00B521868D06B02B261CF18E0121541EDFE83892A43773E7FF65440B72EB3A6AFE37A9B180170A4FD9896FE31124194602BD38AECC0E0AA8F4E417B5C969C840D6D9A4B2310E35A0162EBB7BFED4238AF68321B82C48EE0DCE0F42675DE477A388DA45E2DF9ABFF3A324D5B1E377C00"
}'
{
"result": false,
"code": "TRANSACTION_EXPIRATION_ERROR",
"txid": "cfc03ca018cb79aff19bafe67a81221f2295b2de3402ca4b92293ff3c78e46fe",
"message": "Transaction expired",
"transaction": "{\"raw_data\": {\"ref_block_bytes\": \"61b7\",\"ref_block_hash\": \"c487c467e75a3b8e\",\"expiration\": 1717503794084,\"contract\": [{\"type\": \"TransferContract\",\"parameter\": {\"type_url\": \"type.googleapis.com/protocol.TransferContract\",\"value\": \"0a1541cf55fb918fb606e00b521868d06b02b261cf18e0121541edfe83892a43773e7ff65440b72eb3a6afe37a9b1801\"}}],\"timestamp\": 1717496594084},\"signature\": [\"94602bd38aecc0e0aa8f4e417b5c969c840d6d9a4b2310e35a0162ebb7bfed4238af68321b82c48ee0dce0f42675de477a388da45e2df9abff3a324d5b1e377c00\"]}"
}
调度签名机生成密钥对,签名机吐出公钥
使用公钥匙导出地址
获得最新块高;更新到数据库
从数据库中获取上次解析交易的块高做为起始块高,最新块高为截止块高,如果数据库中没有记录,说明需要从头开始扫,起始块高为 0;
解析区块里面的交易,to 地址是系统内部的用户地址,说明用户充值,更新交易到数据库中,将交易的状态设置为待确认。
所在块的交易过了确认位,将交易状态更新位充值成功并通知业务层。
获取离线签名需要的参数,给合适的手续费
构建未签名的交易消息摘要,将消息摘要递给签名机签名
构建完整的交易并进行序列化
发送交易到区块链网络
扫链获取到交易之后更新交易状态并上报业务层
将用户地址上的资金转到归集地址,签名流程类似提现
发送交易到区块链网络
扫链获取到交易之后更新交易状态
将热钱包地址上的资金转到冷钱包地址,签名流程类似提现
发送交易到区块链网络
扫链获取到交易之后更新交易状态
手动操作转账到热钱包地址
扫链获取到交易之后更新交易状态
参考上面的代码
获取账户余额
获取 nonce
根据地址获取交易记录
获取预估手续费
HD 钱包和交易所钱包不同之处有以下几点
HD 钱包私钥在本地设备,私钥用户自己控制
交易所钱包中心化服务器(CloadHSM, TEE 等),私钥项目方控制
HD 资金在用户钱包地址
交易所钱包资金在交易所热钱包或者冷钱包里面, 用户提现的时候从交易所热钱包提取
中心化钱包:实时不断扫链更新交易数据和状态
HD 钱包:根据用户的操作通过请求接口实现业务逻辑
Official Website: https://www.tron.network
Github: https://github.com/tronprotocol
Tron docs: https://developers.tron.network/
Tron 接口文档: https://developers.tron.network/reference/background
Tron 浏览器: https://tronscan.org/
关于 Tron 的问题列表:https://developers.tron.network/docs/faq
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!