您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > php

Polygon区块链PHP开发包

时间:2022-04-06 09:40:20  来源:  作者:新缸中之脑

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

Polygon PHP开发包主要包含以下特性:

  • 支持Polygon区块链原生PHP转账交易及余额查询
  • 支持Polygon链上智能合约的部署与交互,支持ERC20/ERC721/ERC1155转账交易及到账跟踪
  • 支持Polygon链上交易的离线签名,避免泄露私钥
  • 支持使用自有节点或第三方节点,例如Polygon官方提供的公共节点

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

Polygon区块链PHP开发包

 

Polygon PHP开发包的主要代码文件清单如下:

代码文件

说明

polygon.php/src/Kit.php

Polygon PHP开发包入口类

polygon.php/src/Erc20.php

ERC20智能合约封装类

polygon.php/src/Erc721.php

ERC721智能合约封装类

polygon.php/src/Erc1155.php

ERC1155智能合约封装类

polygon.php/src/SmartContract.php

Polygon智能合约封装类

polygon.php/src/Credential.php

Polygon区链上身份标识类,用于交易签名

polygon.php/src/NodeClient.php

Polygon节点协议封装类

polygon.php/src/Callback.php

Php回调辅助类

polygon.php/src/Helper.php

杂项辅助函数集

contracts/WizToken.sol

示例ERC20合约

contracts/WizNFT.sol

示例ERC721合约

contracts/WizMT.sol

示例ERC1155合约

bin/build-contracts.sh

合约编译脚本工具

demo/credential-demo.php

演示如何创建新的Polygon账号或导入已有私钥

demo/matic-demo.php

演示MATIC转账及查询

demo/erc20-demo.php

演示ERC20转账及查询

demo/erc20-event-demo.php

演示ERC20到账监听

demo/erc721-demo.php

演示ERC721转账及查询

demo/erc721-event-demo.php

演示ERC721到账监听

demo/erc1155-demo.php

演示ERC1155转账及查询

demo/erc1155-event-demo.php

演示ERC1155到账监听

demo/deploy-contracts-demo.php

演示代码,智能合约的部署

vendor

第三方依赖包目录

composer.json

composer配置文件

2、使用示例代码

在使用示例代码之前,请按照实际情况设置demo/config.php中的以下配置信息:

  • .NETWORK:要接入的区块链网络,可选:mAInNet - Polygon主链, testNet - Polygon测试链
  • ALICE_ADDR:demo程序使用的主测试账号,该账号将用于部署代币合约、执行MATIC及ERC20/ERC721/ERC1155转账交易等操作,因此 需要有一定数量的MATIC余额。
  • ALICE_SK:主测试账号对应的私钥

2.1 Polygon链上地址创建与回复

demo/credential-demo.php演示了如何使用Polygon PHP开发包创建新的Polygon链上地址,或者导入已有私钥重建账号。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php credential-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.2 MATIC转账及余额查询

demo/matic-demo.php演示了如何使用Polygon PHP开发包实现MATIC转账和余额查询。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php matic-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.3 Polygon智能合约部署


demo/deploy-contracts-demo.php演示了如何使用Polygon PHP开发包部署ERC20/ERC721/ERC1155智能合约。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php deploy-contracts-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.4 ERC20转账及查询

demo/erc20-demo.php演示了如何使用Polygon PHP开发包实现ERC20转账和余额查询等操作。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php erc20-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.5 ERC20到账跟踪

demo/erc20-event-demo.php演示了如何使用Polygon PHP开发包的合约事件查询功能 实现ERC20通证的到账跟踪。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php erc20-event-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.6 ERC721 NFT转让及查询

demo/erc721-demo.php演示了如何使用Polygon PHP开发包实现ERC721 NFT转让和查询等操作。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php erc721-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.7 ERC721 NFT到账跟踪


demo/erc721-event-demo.php演示了如何使用Polygon PHP开发包的合约事件查询功能 实现ERC721 NFT的到账跟踪。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php erc721-event-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.8 ERC1155转让及查询

demo/erc1155-demo.php演示了如何使用Polygon PHP开发包实现ERC1155转让和查询等操作。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php erc1155-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

2.8 ERC1155到账跟踪


demo/erc1155-event-demo.php演示了如何使用Polygon PHP开发包的合约事件查询功能 实现ERC1155的到账跟踪。

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

~$ cd ~/polygon-php/demo
~/polygon-php/demo$ php erc1155-event-demo.php

执行结果如下:

Polygon区块链PHP开发包

 

3、使用Polygon PHP开发包

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

  • MATIC转账与余额查询
  • ERC20代币转账、授权、余额查询等

3.1 Kit的实例化

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

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

//use polygonKit;
//use polygonNodeClient;
//use polygonCredential;

$kit = new Kit(
  NodeClient::mainNet(),                                    //接入主链
  Credential::fromKey('0x87c12d....d435')                   //使用指定私钥
);

3.2 MATIC转账及余额查询

使用Kit对象的transfer()方法进行MATIC转账,例如发送0.1 MATIC:

//use polygonKit;

$to = '0x90F8bf6...0e7944Ea8c9C1';                          //转账目标地址
$amount = bn('100000000000000000');                         //转账金额,按最小单位
$txid = $kit->transfer($to,$amount);                        //提交MATIC转账交易
echo 'txid => ' . $txid .  PHP_EOL;                         //显示交易ID

注意:需要将金额转换为最小单位,由于MATIC的小数位数是18, 因此 0.1 MATIC = 100000000000000000 最小单位。

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

$addr = '0x90F8bf6...0e7944Ea8c9C1';                  //要查询的Polygon链上地址
$balance = $kit->balanceOf($addr);                    //查询MATIC余额,按最小单位
echo 'balance => ' . $balance . PHP_EOL;              //显示MATIC余额

3.3 ERC20转账

使用Kit对象的erc20()方法获取指定ERC20合约实例,然后调用合约 的transfer()方法进行ERC20转账。例如,下面的代码 指定地址间转账123.4567 USDT(合约地址:
0xc2132D05D31c914a87C6611C10748AEb04B58e8F):

//use polygonKit;

$to = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1';           //转账目标地址
$amount = bn('123456700');                                    //转账ERC20数量
$contractAddr = '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'  //USDT合约的部署地址
$txid = $kit->erc20($contractAddr)
            ->transfer($to,$amount);                          //转账ERC20
echo 'txid => ' . $txid .  PHP_EOL;                           //显示转账交易ID

3.4 ERC20余额查询

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

//use polygonKit;

$contractAddr = '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'  //USDT合约的部署地址
$balance = $kit->erc20($contractAddr)
               ->balanceOf('0x90F8bf6...0e7944Ea8c9C1');      //查询地址0x90F8...的USDT余额
echo 'balance => ' . $balance . PHP_EOL;                      //显示余额

3.5 ERC20到账跟踪

使用erc20()方法获取指定ERC20合约实例,然后调用 合约实例的getTransferEvents()方法查询指定条件的转账事件。

可以使用getTransferEvents()方法跟踪指定地址的到账状态。 例如查询地址0x90F8...在最近1000个区块的USDT代币到账事件:

//use polygonKit;

$height = $kit->getBlockHeight();
$contractAddr = '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'  //USDT合约的部署地址
$events = $kit->erc20($contractAddr)
              ->getTransferEvents(                           //查询到账事件
                [],                                          //转出账号,空数组表示不要求特定的转出账号 
                ['0x90F8bf6...0e7944Ea8c9C1'],               //接收账号,仅查询地址0x90F8...的到账事件
                $height-1000,                                //查询起始区块号
                $height                                      //查询结束区块号
              );                              

foreach($events as $event){                                   
  echo 'block => ' . $event->blockNumber . PHP_EOL;            //事件发生区块号
  echo 'from => ' . $event->params['from'] . PHP_EOL;          //转出账号
  echo 'to => ' . $event->params['to'] . PHP_EOL;              //转入账号
  echo 'value => ' . $event->params['value'] . PHP_EOL;        //转账金额
}

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

  • blockHash:事件触发的区块哈希
  • blockNumber:事件触发的区块号
  • transactionHash:触发事件的交易ID
  • address:事件触发的合约地址
  • name:事件名称,例如转账事件的名称为:Transfer
  • params:事件参数数组,例如转账事件包含以下三个参数:from:转出账号to:转入账号value:转账数量

3.6 ERC721 NFT转让

使用Kit对象的erc721()方法获取指定ERC721合约实例,然后调用合约 的transferFrom()方法进行ERC721 NFT转账。例如,下面的代码 指定地址间转让编号为1278的ERC721 NFT(合约地址:
0xc2132D05D31c914a87C6611C10748AEb04B58e8F):

//use polygonKit;

$to = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1';           //目标地址
$tokenId = 1278;                                              //转让的NFT编号
$contractAddr = '0xcc739b569624f82f9d7a4f614e47133f37482fed'; //ERC721合约的部署地址
$txid = $kit->erc721($contractAddr)
            ->transfer($to,$tokenId);                         //转让指定的ERC721 NFT
echo 'txid => ' . $txid .  PHP_EOL;                           //显示交易ID

3.7 ERC721 NFT查询

使用Kit对象的erc721()方法获取指定的ERC721合约实例后,可以调用合约的方法查询NFT的 基本信息以及特定编号的NFT的持有人信息等。例如:

//use PolygonKit;

$contractAddr = '0xcc739b569624f82f9d7a4f614e47133f37482fed'; //ERC721合约的部署地址
$nft = $kit->erc721($contractAddr);                           //返回ERC721合约实例

echo 'name => ' . $nft->name() . PHP_EOL;
echo 'symbol => ' . $nft->symbol() . PHP_EOL;
echo 'total supply =>' . $nft->totalSupply() . PHP_EOL;

$tokenId = 1278;                                              //NFT编号
echo 'owner => ' . $nft->ownerOf($tokenId);                   //返回指定NFT的持有人
echo 'token uri => ' . $nft->tokenURI($tokenId) . PHP_EOL;    //返回指定NFT的元信息URI

$user = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1';         //用户地址
echo 'total nfts => ' . $nft->balanceOf($user) . PHP_EOL;     //用户持有的NFT总数

3.8 ERC721 NFT到账跟踪

使用erc721()方法获取指定ERC721合约实例,然后调用 合约实例的getTransferEvents()方法查询指定条件的转账事件。

可以使用getTransferEvents()方法跟踪指定地址的到账状态。 例如查询地址0x90F8...在最近1000个区块的指定NFT合约到账事件:

//use polygonKit;

$height = $kit->getBlockHeight();
$contractAddr = '0xcc739b569624f82f9d7a4f614e47133f37482fed';  //ERC721合约的部署地址
$events = $kit->erc721($contractAddr)
              ->getTransferEvents(                           //查询到账事件
                [],                                          //转出账号,空数组表示不要求特定的转出账号 
                ['0x90F8bf6...0e7944Ea8c9C1'],               //接收账号,仅查询地址0x90F8...的到账事件
                $height-1000,                                //查询起始区块号
                $height                                      //查询结束区块号
              );                              

foreach($events as $event){                                   
  echo 'block => ' . $event->blockNumber . PHP_EOL;            //事件发生区块号
  echo 'from => ' . $event->params['from'] . PHP_EOL;          //转出账号
  echo 'to => ' . $event->params['to'] . PHP_EOL;              //转入账号
  echo 'tokenId => ' . $event->params['tokenId'] . PHP_EOL;    //转让的NFT编号
}

3.9 ERC1155转帐

使用Kit对象的erc1155()方法获取指定ERC1155合约实例,然后调用合约 的safeTransferFrom()方法进行ERC1155转账。例如,下面的代码 指定地址间转帐编号为1的ERC1155 NFT(合约地址:
0xafefbbab1038a4fd475d685c11b07bd697e20e38):

//use polygonKit;

$from = $kit->getSender();                                    //转出地址                                    
$to = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1';           //目标地址
$tokenId = 1;                                                 //转让的通证编号
$value = 1000000;                                             //转让数量
$contractAddr = '0xafefbbab1038a4fd475d685c11b07bd697e20e38'; //ERC1155合约的部署地址
$txid = $kit->erc1155($contractAddr)
            ->safeTransferFrom($from, $to,$tokenId, $value);  //转让指定的ERC1155通证
echo 'txid => ' . $txid .  PHP_EOL;                           //显示交易ID

3.10 ERC1155查询

使用Kit对象的erc1155()方法获取指定ERC1155合约实例后,可以调用合约的balanceOf()方法 查询用户持有的ERC1155通证数量。例如:

//use PolygonKit;

$contractAddr = '0xafefbbab1038a4fd475d685c11b07bd697e20e38';  //ERC1155合约的部署地址
$mt = $kit->erc1155($contractAddr);                            //返回合约实例 

$user = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1';          //用户地址
$tokenId = 1;                                                  //通证编号
echo 'banalce => ' . $mt->balanceOf($user, $tokenId);          //用户持有的指定编号通证的数量

3.11 ERC1155到账跟踪

使用Kit对象的erc1155()方法获取指定的ERC1155合约实例,然后调用 合约实例的getTransferEvents()方法查询指定条件的转账事件。

可以使用getTransferEvents()方法跟踪指定地址的到账状态。 例如查询地址0x90F8...在最近1000个区块的指定ERC1155通证到账事件:

//use polygonKit;

$height = $kit->getBlockHeight();
$contractAddr = '0xafefbbab1038a4fd475d685c11b07bd697e20e38';  //ERC1155合约的部署地址
$events = $kit->erc1155($contractAddr)
              ->getTransferEvents(                           //查询到账事件
                [],                                          //转出账号,空数组表示不要求特定的转出账号 
                ['0x90F8bf6...0e7944Ea8c9C1'],               //接收账号,仅查询地址0x90F8...的到账事件
                $height-1000,                                //查询起始区块号
                $height                                      //查询结束区块号
              );                              

foreach($events as $event){                                   
  echo 'block => ' . $event->blockNumber . PHP_EOL;            //事件发生区块号
  echo 'from => ' . $event->params['from'] . PHP_EOL;          //转出账号
  echo 'to => ' . $event->params['to'] . PHP_EOL;              //转入账号
  echo 'id => ' . $event->params['id'] . PHP_EOL;              //转让的通证编号
  echo 'value => ' . $event->params['value'] . PHP_EOL;        //转让的通证数量
}

4、Polygon区块链身份与地址表示

在Polygon PHP开发包中,使用Credential对象表征区块链上的一个用户身份,使用普通的 字符串表征区块链上的一个地址,这两者的区别在于Credential包含了用户 的私钥信息,可以用来签名交易,因此需要保护。

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

//use polygonCredential;

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

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

//use polygonCredential;

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

5、使用NodeClient

NodeClient类封装了Polygon节点的RPC访问协议。实例化NodeClient时,需要指定要连接 的节点URL,例如使用本地的全节点:

//use polygonNodeClient;

$client = new NodeClient('http://localhost:8545');

当使用Polygon官方节点时,NodeClient类也提供列两个静态函数mainNet()和testNet(),分别 用于接入官方提供的主链节点和测试链节点。

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

//use polygonNodeClient;

$client = new NodeClient('https://rpc-mainnet.maticvigil.com');
$tc = NodeClient::mainNet();                       //与上面等效

$tc = new NodeClient('https://rpc-mumbai.maticvigil.com');
$tc = NodeClient::testNet();                       //与上面等效

原文链接:
http://sc.hubwiz.com/codebag/polygon-php/



Tags:PHP开发包   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Polygon区块链PHP开发包
Polygon PHP开发包适用于为PHP应用快速增加对Polygon区块链数字资产的支持能力, 即支持使用自有Polygon区块链节点的应用场景,也支持基于Polygon区块链官方节点API服务的 轻量...【详细内容】
2022-04-06  Search: PHP开发包  点击:(770)  评论:(0)  加入收藏
▌简易百科推荐
PHP 8.3 新特性解读
作者 | Deepak Vohra译者 | 明知山策划 | 丁晓昀本文是 PHP 8.x 系列文章的一部分。你可以通过订阅 RSS 来接收有关本系列文章的更新通知。PHP 仍然是互联网上使用最广泛的...【详细内容】
2024-03-12    InfoQ  Tags:PHP 8.3   点击:(30)  评论:(0)  加入收藏
如何使用PHP SSH2模块执行远程Linux命令
PHP SSH2扩展是用于在PHP程序中使用SSH(安全壳协议)的一种扩展。它允许建立加密连接和执行远程命令、上传和下载文件等操作,十分方便实用。下面我将为大家详细介绍一下该扩展的...【详细内容】
2024-01-26  开源技术小栈  微信公众号  Tags:PHP   点击:(112)  评论:(0)  加入收藏
如何使用PHP抓取百度首页排名?方法与步骤详解
PHP是一种广泛应用于网站开发的脚本语言,具备简单、灵活、高效的特点,因此在SEO优化中也得到了广泛的应用。本文将深入解析如何使用PHP抓取百度首页排名,并介绍一些相关的内容...【详细内容】
2024-01-12  ·小钟无艳遇  今日头条  Tags:php   点击:(85)  评论:(0)  加入收藏
2023 年,PHP 停滞不前
热心开发者分析了一波 GitHub 的数据后发现,编程语言为 PHP 的 PR 数量逐年下降。GitHut 是通过 GitHub 数据专门分析编程语言的项目。它基于各种编程语言在 GitHub 中的使用...【详细内容】
2023-12-17  OSC开源社区    Tags:PHP   点击:(21)  评论:(0)  加入收藏
全方位深度剖析PHP7底层源码
PHP7是一门流行的Web编程语言,以其易学易用和广泛的应用场景而备受欢迎。本文将为您深入讲解PHP7的特性和优势,包括性能提升、语法改进和新特性等方面,帮助您了解和掌握这门灵...【详细内容】
2023-12-06  笔画春秋润    Tags:PHP7   点击:(187)  评论:(0)  加入收藏
PHP 8.3 正式发布!
作者 | Tim Anderson编译 | 如烟出品 | 51CTO技术栈(微信号:blog51cto)PHP 8.3 正式发布,最主要的变化是添加“类常量显式类型”、“只读属性深拷贝”,“以及对随机性功能的补充...【详细内容】
2023-11-27    51CTO  Tags:PHP   点击:(171)  评论:(0)  加入收藏
原来真的可以在 Next.js 中写 PHP 代码?
Next.js 14 近期发布,其中一个重大的功能点是 Server Actions 成为稳定版,因其超前和熟悉的开发方式,在社交网络上引起了一阵讨论,应该是下面这张图的内容了。图片有人说这是又...【详细内容】
2023-11-07  编程界  微信公众号  Tags:PHP   点击:(297)  评论:(0)  加入收藏
PHP编程语言,这个老古董,还有人用吗?
近年来,随着大数据、云计算和人工智能等新兴技术的崛起,许多传统的编程语言悄然退出了舞台。而PHP(PHP Hypertext Preprocessor)作为最古老的编程语言之一,是否也在逐渐沦为过去...【详细内容】
2023-11-02  程序员职场故事    Tags:PHP编程   点击:(235)  评论:(0)  加入收藏
PHP如何获取前几天日期时间
在PHP中,我们经常需要获取当前日期的前几天日期时间,以便进行一些特定的计算或数据处理。本文将介绍如何使用PHP获取前几天的日期时间,并提供具体的实现示例和代码。文章地址ht...【详细内容】
2023-08-10  学无止境    Tags:PHP   点击:(387)  评论:(0)  加入收藏
PHP+Python轻松抓取网络图片资源
你是否曾经遇到过需要从网络上获取大量图片的需求?你是否曾经为手动下载图片而感到疲惫?那么,本文将为你介绍一种高效、易用的方法——利用PHP和Python编写爬虫程序,...【详细内容】
2023-05-09  俊俊的生活日记    Tags:PHP   点击:(337)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条