日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2023/12/10 php 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 trc20地址监听php,Tron/USDT-TRC20对接PHP开发包 - 人人都是架构师 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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开发包 - 人人都是架构师的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。