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

1、开发包概述

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

支持Tron区块链原生Trx交易

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

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

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

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

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

TronTool的主要代码文件清单如下:

代码文件说明tron.php/src/TronKit.phpTron开发包入口类

tron.php/src/Trc20.phpTron TRC20智能合约封装类

tron.php/src/Contract.phpTron智能合约封装类

tron.php/src/Credential.phpTron区块链身份标识类,用于交易签名

tron.php/src/Address.phpTron地址表示类

tron.php/src/TronApi.phpTron节点API聚合封装类

tron.php/src/NodeClient.phpHTTP协议封装类

demo/NewAddressDemo.php演示代码,创建新的Tron区块链地址

demo/TrxDemo.php演示代码,Trx转账交易及余额查询

demo/Trc20Demo.php演示代码,Trc20代币转账、余额查询、事件监听等

demo/DeployContractDemo.php演示代码,智能合约的部署

demo/build-contract.php示例Trc20代币合约的构建脚本

demo/contract/EzToken.sol示例Trc20代币合约

demo/contract/build/EzToken.abi示例Trc20代币合约的ABI文件

demo/contract/build/EzToken.bin示例Trc20代币合约的字节码文件

vendor第三方依赖包目录

composer.jsoncomposer配置文件

2、使用示例代码

2.1 创建新地址

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

~$ cd ~/trontool/demo

~/trontool/demo$ php NewAddressDemo.php

执行结果如下:

2.2 Trx转账及余额查询

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

~$ cd ~/trontool/demo

~/trontool/demo$ php TrxDemo.php

执行结果如下:

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

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

~$ cd ~/trontool/demo

~/trontool/demo$ php Trc20Demo.php

执行结果如下:

2.4 Tron智能合约部署

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

~$ cd ~/trontool/demo

~/trontool/demo$ php DeployContractDemo.php

执行结果如下:

2、使用TronKit

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

Trx转账与余额查询

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

2.1 实例化TronKit

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

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

use TronToolTronKit;

use TronToolTronApi;

use TronToolCredential;

$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 TronToolCredential;

$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 TronToolCredential;

$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 TronToolTronApi;

$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; //显示账户余额

Tron区块链对接PHP开发包:http://sc.hubwiz.com/codebag/tron-php-lib/

trc20地址监听php,Tron/USDT-TRC20对接PHP开发包 - 人人都是架构师相关推荐

  1. trc20地址监听php,Tron/USDT-TRC20 PHP开发包

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

  2. Omni/USDT钱包对接PHP开发包

    OmniTool开发包适用于为PHP应用快速增加对Omni Layer/USDT数字资产的支持能力,即支持使用自有Omni Layer节点的应用场景,也支持基于第三方API服务和离线裸交易的轻量级部署 ...

  3. windows mysql 监听地址_MYSQL地址监听问题

    你的位置: 问答吧 -> 服务器 -> 问题详情 MYSQL地址监听问题 RedHat 9 系统 在论坛里找了很久发现通过改/etc/init.d/mysqld这个文件里的 $bindir ...

  4. Web3j通过合约地址监听transfer事件获取以太坊交易数据

    Web3j通过合约地址监听transfer事件获取以太坊交易数据 We3j web3j是一个轻量级的Java库,用于在Ethereum网络上集成客户端(节点). 核心特性 通过Java类型的JSON- ...

  5. oracle 配置ip地址监听,Windows环境下修改Oracle实例监听IP地址

    配置文件路径:\NETWORK\ADMIN 如:C:\Oracle11gR2\product\11.2.0\dbhome_1\NETWORK\ADMIN 一.修改配置文件:listener.ora # ...

  6. 监听拼音输入法确定输入 ,compositionstart 、 compositionend 、 input都存在时的解决办法

    $(function () {var cpLock = true;$('#textbox').off().on({compositionstart: function () {//中文输入开始cpLo ...

  7. freeswitch php监听,程序员罗杰-freeswitch对接asterisk压测

    重点说明freeswitch的配置 我们假设asterisk的IP为210.134.185.9,有个sip号码为60006 1.asterisk配置 修改sip.conf,添加如下内容: [fs_zm ...

  8. 一行代码实现Okhttp,Retrofit,Glide下载上传进度监听

    2019独角兽企业重金招聘Python工程师标准>>> 发表上篇文章 我一行代码都不写实现Toolbar!你却还在封装BaseActivity? 已是一个月前的事情~ 上篇文章的研究 ...

  9. nginx监听事件流程

    在前面的几篇文章中已经分析了master进程.work进程的初始化流程.但一直没有分析监听socket的创建流程,nginx服务器只有在创建socket, 绑定socet,监听socket执行完成后, ...

最新文章

  1. Linux终端实现自己的命令解释器----mybash
  2. 正则表达式最常用的符号匹配
  3. 21Iterator(迭代器)模式
  4. Linux下独立添加PHP扩展模块 mssql
  5. C++ STL lower_bound,upper_bound的使用总结
  6. 一款功能强大的IP查询工具
  7. php sprintf u,PHP sprintf()格式化用法详解
  8. 天天象棋 残局闯关 第18关
  9. 关于bochs用X11启动的说明
  10. jQuery 插件格式 规范
  11. Android图形之HWC(二十四)
  12. ZOJ Bookcase
  13. 分形、混沌理论、集异璧之大成
  14. FreeRTOS使用教程(配合CubeMX)
  15. ROS教程之读取激光雷达(sick_tim561)数据
  16. SSD1306-7针脚OLED的使用心得
  17. MATLAB画立体包络图
  18. 路由器桥接chinanet拨号共享
  19. 2023电工杯数学建模AB题思路分析
  20. iOS固定图片高度,宽度自适应缩放

热门文章

  1. android146 360 病毒查杀
  2. 你的灯亮着么阅读笔记3
  3. 借口很多呀嘛接口也很多呀嘛态也很多
  4. 二叉搜索时与双向链表python_【剑指offer】26 二叉搜索树与双向链表
  5. 反编译一款APP然后重新打包(Windows环境)
  6. Spring和SpringMVC总结篇
  7. mongodb [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify
  8. php v9 如何获取超级管理员权限,Windows8.1如何获取超级管理员权限
  9. c语言判断字符配对,【C语言】判断花括号{}是否匹配
  10. phoenix Explain Plan 翻译