Skip to Content
dAppsTron

TRON

Intégrez la blockchain TRON à l’aide du fournisseur OneKey compatible TronLink. Accès via window.$onekey.tron ou window.tronWeb.

OneKey expose un fournisseur compatible TronLink et une intégration TronWeb. La disponibilité des fonctionnalités dépend de la version du portefeuille et du réseau sélectionné.



Détection du fournisseur

// OneKey injects both the provider and TronWeb instances const provider = window.$onekey?.tron // TronWeb is available globally after connection let tronWeb = provider?.tronWeb if (!provider) { throw new Error('OneKey TRON provider not detected') } // Check if it's TronLink compatible console.log('isTronLink:', provider.isTronLink) // true

Démarrage rapide

Demander les comptes

// Request connection const result = await provider.request({ method: 'tron_requestAccounts' }) if (result.code === 200) { tronWeb = provider.tronWeb if (!tronWeb) throw new Error('OneKey TronWeb is not ready') console.log('Connected!') const address = tronWeb.defaultAddress.base58 console.log('Address:', address) } else { console.log('Connection rejected:', result.message) }

Vérifier l’état de connexion

// Check if TronWeb is ready if (provider.ready && tronWeb && tronWeb.defaultAddress.base58) { console.log('Connected:', tronWeb.defaultAddress.base58) } else { console.log('Not connected') }

Utilisation de TronWeb

Après la connexion, utilisez provider.tronWeb pour conserver l’association des requêtes à OneKey :

Obtenir le solde

const balance = await tronWeb.trx.getBalance(tronWeb.defaultAddress.base58) console.log('Balance:', tronWeb.fromSun(balance), 'TRX')

Envoyer des TRX

const tx = await tronWeb.trx.sendTransaction( 'TRecipientAddress...', tronWeb.toSun(10) // 10 TRX ) console.log('Transaction:', tx.txid)

Envoyer un jeton TRC20

const contractAddress = 'TTokenContractAddress...' const contract = await tronWeb.contract().at(contractAddress) // Get decimals const decimals = await contract.decimals().call() // Transfer tokens const amount = (100n * 10n ** BigInt(decimals.toString())).toString() // 100 tokens, exact integer const tx = await contract.transfer( 'TRecipientAddress...', amount ).send() console.log('Transaction:', tx)

Transactions

Signer une transaction

Signer une transaction sans la diffuser :

// Build transaction const tx = await tronWeb.transactionBuilder.sendTrx( 'TRecipientAddress...', tronWeb.toSun(10), tronWeb.defaultAddress.base58 ) // Sign via provider const signedTx = await provider.sign(tx) console.log('Signed transaction:', signedTx) // Broadcast manually const result = await tronWeb.trx.sendRawTransaction(signedTx)

Interaction avec un contrat intelligent

// Call contract method const contract = await tronWeb.contract().at(contractAddress) // Read (view function) const result = await contract.someViewFunction().call() // Write (requires signing) const tx = await contract.someWriteFunction(param1, param2).send({ feeLimit: 100_000_000, // 100 TRX callValue: 0, })

Déclencher un contrat intelligent

const tx = await tronWeb.transactionBuilder.triggerSmartContract( contractAddress, 'transfer(address,uint256)', { feeLimit: 100_000_000 }, [ { type: 'address', value: recipientAddress }, { type: 'uint256', value: amount } ], tronWeb.defaultAddress.base58 ) const signedTx = await provider.sign(tx.transaction) const result = await tronWeb.trx.sendRawTransaction(signedTx)

Signature de message

Signer un message V1 (hex)

Signer des messages encodés en hexadécimal :

const message = tronWeb.toHex('Hello TRON!') const signature = await provider.signMessage(message) console.log('Signature:', signature)

Signer un message V2 (UTF-8)

Signer directement des messages UTF-8 :

const message = 'Hello TRON!' const signature = await provider.signMessageV2(message) console.log('Signature:', signature)

Vérifier la signature

const message = 'Hello TRON!' const signature = await provider.signMessageV2(message) // Verify using TronWeb const address = await tronWeb.trx.verifyMessageV2(message, signature) console.log('Signer:', address)

Gestion des événements

Écouter les changements de compte

provider.on('accountsChanged', (accounts) => { if (accounts[0]) { console.log('Account changed:', accounts[0]) } else { console.log('Disconnected') } })

Écouter les changements de réseau

provider.on('chainChanged', (chainId) => { console.log('Network changed:', chainId) // Recommend page reload for network changes })
// Listen for TronLink initialization window.addEventListener('tronLink#initialized', () => { console.log('TronLink initialized') }) // Listen for messages window.addEventListener('message', (event) => { if (event.source === window && event.data?.isTronLink && event.data?.message) { const { action, data } = event.data.message console.log('TronLink event:', action, data) } })

Référence de l’API

Méthodes du fournisseur

MéthodeDescription
request({ method, params })Requête JSON-RPC générique
sign(transaction)Signer une transaction
signMessage(hexMessage)Signer un message hexadécimal (V1)
signMessageV2(message)Signer un message UTF-8 (V2)

Méthodes de requête

MéthodeDescription
tron_requestAccountsDemander une connexion
tron_getProviderStateObtenir l’état du fournisseur
tron_signTransactionSigner une transaction
signMessageV1Signer un message V1
signMessageV2Signer un message V2

Codes de réponse

Pour tron_requestAccounts, examinez dans la réponse résolue le champ code. L’implémentation actuelle du fournisseur renvoie 4001 pour une demande déjà en attente et 4000 lorsqu’aucun compte n’est renvoyé ou que la demande échoue. Ces significations diffèrent de celles des erreurs JSON-RPC Ethereum.

CodeDescription
200Réussite
4000Refus de l’utilisateur
4001Demande en file d’attente

Événements

ÉvénementDescription
accountsChangedCompte modifié
chainChangedRéseau modifié
connectConnecté
disconnectDéconnecté

Utilisation de SunWeb

Pour les opérations DappChain (chaîne latérale) :

const sunWeb = window.sunWeb // Main chain to side chain await sunWeb.depositTrx( amount, depositFee, feeLimit ) // Side chain to main chain await sunWeb.withdrawTrx( amount, withdrawFee, feeLimit )

Gestion des erreurs

try { const result = await provider.request({ method: 'tron_requestAccounts' }) if (result.code === 4001) { console.log('A connection request is already pending') } else if (result.code !== 200) { console.log('Connection was not approved:', result.message) } } catch (error) { console.error('Request failed:', error) }

OneKey est compatible TronLink. Mettez à jour votre logique de détection :

// Before (TronLink only) const tronWeb = window.tronWeb // After (OneKey with TronLink fallback) const provider = window.$onekey?.tron || window.tronLink const tronWeb = window.tronWeb // Compatibility global; verify which wallet owns it
Dernière mise à jour le