热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHPTronTool开发包有哪些特性

本篇内容主要讲解“PHPTronTool开发包有哪些特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHPT

本篇内容主要讲解“PHP TronTool开发包有哪些特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP TronTool开发包有哪些特性”吧!

TronTool开发包适用于为PHP应用快速增加对Tron/USDT-TRC20数字资产的支持能力,即支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。

1、开发包概述

TronTool开发包主要包含以下特性:

  • 支持Tron区块链原生Trx交易

  • 支持Tron智能合约以及TRC20代币,例如USDT-TRC20等

  • 支持交易的离线签名,避免泄露私钥

  • 完善的Tron节点API封装,支持全节点、Solidity节点和事件节点提供的API

  • 支持使用自有节点或第三方节点,例如Tron官方提供的公共节点

TronTool软件包运行在**Php 7.1+**环境下,当前版本1.0.0,主要类/接口及关系如下图所示:

PHP TronTool开发包有哪些特性

TronTool的主要代码文件清单参见官网说明:TronTool PHP 。

2、使用示例代码

2.1 创建新地址

在终端进入演示代码目录,执行如下命令:

~$ cd ~/trontool/demo
~/trontool/demo$ php NewAddressDemo.php

执行结果如下:

PHP TronTool开发包有哪些特性

2.2 Trx转账及余额查询

在终端进入演示代码目录,执行如下命令:

~$ cd ~/trontool/demo
~/trontool/demo$ php TrxDemo.php

执行结果如下:

PHP TronTool开发包有哪些特性

2.3 Trc20代币转账、余额查询及事件监听

在终端进入演示代码目录,执行如下命令:

~$ cd ~/trontool/demo
~/trontool/demo$ php Trc20Demo.php

执行结果如下:

PHP TronTool开发包有哪些特性

2.4 Tron智能合约部署

在终端进入演示代码目录,执行如下命令:

~$ cd ~/trontool/demo
~/trontool/demo$ php DeployContractDemo.php

执行结果如下:

PHP TronTool开发包有哪些特性

2、使用TronKit

TronKit是开发包的入口,使用这个类可以快速实现如下功能:

  • Trx转账与余额查询

  • Trc20代币转账、授权、余额查询等

2.1 实例化TronKit

TronKit实例化需要传入TronApi对象和Credential对象,这两个参数分别封装了Tron节点提供的API,以及进行交易签名的用户身份信息。

例如,下面的代码创建一个接入Tron主链的TronKit实例,并使用指定的私钥进行交易签名:

use TronTool\TronKit;
use TronTool\TronApi;
use TronTool\Credential;

$kit = new TronKit(
  TronApi::mainNet(),                                       //接入主链
  Credential::fromPrivateKey('87c12d....d435')              //使用指定私钥
);

2.2 Trx转账及余额查询

使用TronKit的sendTrx()方法进行Trx转账,例如发送1000 TRX:

$to = 'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx';                 //转账目标地址
$amount = 1000000000;                                       //转账金额,单位:SUN
$ret = $kit->sendTrx($to,$amount);                          //提交Trx转账交易
echo 'txid => ' . $ret->tx->txID .  PHP_EOL;                //显示交易ID
echo 'result => ' . $ret->result . PHP_EOL;                 //显示交易结果

注意:需要将金额单位转换为SUN,1 TRX = 1000000 SUN。

使用getTrxBalance()方法查询指定地址的Trx余额,例如:

$addr = 'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx';               //要查询的Tron地址
$balance = $kit->getTrxBlanace($addr);                      //查询Trx余额,单位:SUN
echo 'trx balance => ' . $balance . PHP_EOL;                //显示余额

2.3 TRC20代币转账

使用Trc20()方法获取指定TRC20代币合约实例,然后调用合约的transfer()方法进行TRC20代币转账。例如,下面的代码指定地址间转账1315300个最小单位的USDT-TRC20代币,即1.3153 USDT:

$to = 'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx';                 //转账目标地址
$amount = 1315300;                                          //转账Trc20代币数量
$contractAddress = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'     //USDT-TRC20代币合约的部署地址
$usdt = $kit->Trc20($contractAddress);                      //创建Trc20代币合约实例
$ret = $usdt->transfer($to,$amount);                        //转账Trc20代币
echo 'txid => ' . $ret->tx->txID .  PHP_EOL;                //显示转账交易ID
echo 'result => ' . $ret->result . PHP_EOL;                 //显示转账交易结果

2.4 TRC20代币余额查询

使用Trc20()方法获取指定TRC20代币合约实例,然后调用合约的balanceOf()方法查询指定地址的TRC20代币余额。例如,下面的代码查询指定地址的USDT代币余额:

$usdt = $kit->Trc20('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t');          //创建USDT-TRC20代币合约实例
$balance = $usdt->balanceOf('TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx');  //查询Trc20代币余额
echo 'usdt balance => ' . $balance . PHP_EOL;                       //显示代币余额

2.5 TRC20代币事件查询

使用Trc20()方法获取指定TRC20代币合约实例,然后调用合约的events()方法查询指定合约触发事件。

例如查询USDT代币合约最近10秒的事件:

$usdt = $kit->Trc20('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t');    //创建Trc20代币合约实例
$since = time() - 10000;                                      //计算检查时间点
$events = $usdt->events($since);                              //提取合约事件
foreach($events as $event){                                   
  echo 'block height => ' . $event->block_number . PHP_EOL;   //显示事件触发的区块高度
  echo 'event name => ' . $event->event_name . PHP_EOL;       //显示事件名称
}

events()返回的结果是一个事件对象数组,每个成员对象的主要字段说明如下:

  • caller_contract_address:调用合约地址,base58格式

  • transaction_id:触发合约事件的交易ID,16进制字符串

  • result:合约事件参数列表,数组

  • result_type:合约事件参数类型列表,数组

  • block_timestamp:事件所在区块时间戳,整数

  • block_number:事件所在区块号,整数

  • event_name:事件名称,字符串

  • contract_address:合约地址,base58格式

  • event_index:事件索引序号,整数

例如,下面是一个TRC20代币合约的Transfer事件对象的JSON表示,在event_name字段给出了事件名称,在result字段则给出了两种索引形式的事件参数:

{
  "caller_contract_address": "TS2Hzo6KpAc8Ym2nGb3idpMtUpM2GiK2gL",
  "transaction_id": "265cf378f4943b7c77b7a294f533d4b8c718c297dd28a664848d77cd3f3a0af0",
  "result": {
    "0": "0x2539ef4f3eb733c105a957eebb20fd60ad8c9a43",      //事件参数0
    "1": "0x6f6794f3904ff51f9fa81e928afdec91f6744a50",      //事件参数1
    "2": "8",                                               //事件参数2        
    "_from": "0x2539ef4f3eb733c105a957eebb20fd60ad8c9a43",  //事件参数_from
    "_value": "8",                                          //事件参数_value
    "_to": "0x6f6794f3904ff51f9fa81e928afdec91f6744a50"     //事件参数_to
  },
  "result_type": {
    "_from": "address",                                     
    "_value": "uint256",
    "_to": "address"
  },
  "block_timestamp": 1586263455000,
  "block_number": 3539438,
  "event_name": "Transfer",                                 //事件名称   
  "contract_address": "TS2Hzo6KpAc8Ym2nGb3idpMtUpM2GiK2gL",
  "event_index": 0
}

3、Tron区块链身份与地址表示

在TronTool中,使用Credential表征Tron区块链中的一个用户身份,使用Address表征Tron区块链中的一个地址。两者的区别在于Credential包含了用户的私钥信息,可以用来签名交易,因此需要保护,而Address则是可以公开的信息。

使用Credential类的静态方法create()创建新账户。例如,下面的代码创建一个新的账户并显示其私钥、公钥和地址:

use TronTool\Credential;

$credential = Credential::create();                           //创建新账号
echo 'private key => ' . $credential->privateKey() . PHP_EOL; //显示私钥
echo 'public key => ' . $credential->publicKey() . PHP_EOL;   //显示公钥
echo 'address => ' . $credential->address() . PHP_EOL;        //显示地址

可以使用静态方法fromPrivateKey()导入已有的私钥来实例化Credential。例如下面的代码导入已有私钥并显示地址:

use TronTool\Credential;

$credential = Credential::fromPrivateKey('7889...023a');      //导入已有私钥
echo 'address => ' . $credential->address() . PHP_EOL;        //显示相应地址

在Tron区块链中,地址有两种表示:16进制和base58表示,例如下面是同一个地址的两种表示:

  • base58:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

  • 16进制: 412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address类包含了相应的编解码逻辑,可以方面的利用不同形式的地址实例化Address。例如:

$a1 = Address::fromBase58('TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx');
echo $a1->hex() . PHP_EOL;        //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

$a2 = Address::fromHex('412539EF4F3EB733C105A957EEBB20FD60AD8C9A43');
echo $a2->base58() . PHP_EOL;     //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

有时我们只需要简单的在base58和16进制之间转换地址,这时并不需要中间的Address对象,可以直接使用静态方法encode()和decode()。例如:

$a1 = Address::decode('TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx');
echo $a1 . PHP_EOL;             //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

$a2 = Address::encode('412539EF4F3EB733C105A957EEBB20FD60AD8C9A43');
echo $a2 . PHP_EOL;             //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

4、使用TronApi访问Tron节点API

使用TronApi访问Tron的各种节点API。TronApi聚合了多种Tron节点提供的API,例如tron全节点、solidity节点和事件服务节点的API。

实例化TronApi时,可以分别为不同类型的Tron节点指定不同的连接URL,例如:

use TronTool\TronApi;

$tc = new TronApi(
  'https://api.trongrid.io',       //全节点URL
  'https://api.trongrid.io',       //合约节点URL
  'https://api.trongrid.io'        //事件节点URL
);

当上述三个节点的URL相同时,可以简写为:

$tc = new TronApi('https://api.trongrid.io');

如果用的是Tron官方提供的TronGrid节点,那么可以直接使用TronApi提供的两个静态函数mainNet()和testNet(),分别接入主链和shasta测试链。

例如,下面的代码是等效的:

$tc = new TronApi('https://api.trongrid.io');
$tc = TronApi::mainNet();                       //与上面等效

$tc = new TronApi('https://api.shasta.trongrid.io');
$tc = TronApi::testNet();                       //与上面等效

TronApi封装了Tron官方多种节点提供的API,并基本保持了对应关系以便于查找利用。例如查询账户的TRX余额:

$info = $tc->getAccount('TEgM5CPeqowkKUXoKrFrpvB7vcBgVkD4tP');  //查询账户信息
echo 'balance -> ' . $info->balance . PHP_EOL;                  //显示账户余额

到此,相信大家对“PHP TronTool开发包有哪些特性”有了更深的了解,不妨来实际操作一番吧!这里是编程笔记网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
author-avatar
lingling2502852417
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有