TronLink,类似于 MetaMask,允许 TRON DApp 在浏览器中运行而不必部署TRON Full Node 。 如果用户已经在 Chrome 扩展程序中安装了TronLink,则 TronLink 会将tronWeb及tronLink对象注入每个浏览器页面。 这将允许 web DApp 与 TRON 网络交互。

我们通过一个简单的示例来了解它:

📘

注:

本文demo需要依托开发软件或者http server来通过访问方可以运行。以开发软件WebStorm为例,点击浏览器访问demo页面:

1493
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <button onclick="getTronweb()">Can you get tronweb from tronlink?</button>
    <script>
        function getTronweb(){
            var obj = setInterval(async ()=>{
                if (window.tronWeb && window.tronWeb.defaultAddress.base58) {
                    clearInterval(obj)
                    document.write("Yes, catch it:",window.tronWeb.defaultAddress.base58)
                }
            }, 10)
        }

    </script>
</body>
</html>

TronWeb其他函数使用请参考文档

新变量说明

📘

注:

Tronlink chrome v3.22.0 版本开始支持tronLink对象注入,v3.22.0之前版本不支持tronLink对象注入,Tronlink APP 安卓及IOS版本将在 v4.3.4版本开始支持tronLink对象注入。

interface tronLinkParams{
  ready: Bool; //初始化为false, 用户授权后为true
  request: (args: any): any => {};// dapp网站调插件的方法
  sunWeb: sunWeb;
  tronWeb: tronWeb;
}

window.tronLink <tronLinkParams>;


## 示例

window.tronLink = {
  ready: true,
  request: function(){}, // 插件自定义调用入口方法
  sunWeb: sunWeb,
  tronWeb: tronWeb;
}

用户授权

唤起授权框以便用户可以授权账户信息给Dapp网站

interface requestAccountsResponse{
  code: Number, // 200:ok,4000:在队列中,不需要重复提交, 4001:user rejected
  message: String
}

const res: requestAccountsResponse = await tronLink.request({method: 'tron_requestAccounts'})

其中code码如下:

code码解释
200用户接受授权
4000在队列中,不需要重复提交
4001用户拒绝授权

签名

在完成交易过程当中,TronWeb需要让TronLink来进行签名,这里TronLink重写了签名,签名过程在TronLink中完成,然后把签名后的transaction返还给TronWeb进行广播。我们通过一个示例来了解它:

<!DOCTYPE html>
<html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    </head>
    <body>
    <script>
        var obj = setInterval(async ()=>{
            if (window.tronWeb && window.tronWeb.defaultAddress.base58) {
          //if (window.tronLink.tronWeb) 
                clearInterval(obj)
                var tronweb = window.tronWeb
                var tx = await tronweb.transactionBuilder.sendTrx('TN9RRaXkCFtTXRso2GdTZxSxxwufzxLQPP', 10, 'TTSFjEG3Lu9WkHdp4JrWYhbGP6K1REqnGQ')
                var signedTx = await tronweb.trx.sign(tx)
                var broastTx = await tronweb.trx.sendRawTransaction(signedTx)
                console.log(broastTx)
            }
        }, 10)
    </script>
    </body>
</html>

当执行代码到 tronweb.trx.sign(tx) 时,TronLink会弹出窗口,来确认签名。

2474

TronWeb其他函数使用请参考文档