cqtop/eth-nano-erc20

该软件包的最新版本(v1.0.2)没有提供许可证信息。

此库提供了一种简单的方式来与以太坊ERC20代币进行交互。

v1.0.2 2022-04-01 09:34 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:45 UTC


README

此库提供了一种简单的方式来与以太坊ERC20代币进行交互。
默认支持所有ERC20标准函数(如balanceOf、transfer、transferFrom、approve、allowance、decimal、name等),也可以扩展以支持其他合约。

基于lessmore92/php-erc20库进行了修改

安装

composer require cqtop/eth-nano-erc20

使用

有两种使用方式

1- 为您的代币创建一个新类并指定其函数

2- 使用具有所有标准函数的通用类

下面了解更多信息

1- 为您的代币创建一个新类

简单地创建一个继承自 \Lessmore92\Ethereum\Foundation\StandardERC20Token 的新类

在下面的示例中,我们为Tether (USDT) 创建了一个新类

class USDT extends \Lessmore92\Ethereum\Foundation\StandardERC20Token 
{
    protected $contractAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7";  
}

然后,为了使用它,创建一个新的实例并从您的类中实例化

$tether = new USDT("https://mainnet.infura.io/v3/API_KEY");
var_dump($tether->name());
var_dump($tether->decimals());

2- 使用通用类

$token = new \Lessmore92\Ethereum\Token("0xdac17f958d2ee523a2206206994597c13d831ec7", "https://mainnet.infura.io/v3/API_KEY");
var_dump($token->name());

连接超时

连接超时可以通过代币类的最后一个参数进行设置

$timeout  = 3; //secs
$tether = new USDT("https://mainnet.infura.io/v3/API_KEY",$timeout);

或者

$timeout  = 3; //secs
$tether = new \Lessmore92\Ethereum\Token("0xdac17f958d2ee523a2206206994597c13d831ec7", "https://mainnet.infura.io/v3/API_KEY", $timeout);

以太坊RPC客户端

要连接到以太坊区块链,您需要一个以太坊节点;Infura 是一个简单快捷的解决方案,但您也可以启动自己的 Geth 节点

ERC20代币 transferFrom

ERC20交易费用需要用 ETH 支付。在某些情况下,您的应用程序需要代表用户支付此费用。
假设,用户A有一个密钥对(私钥,公钥),并且所有交易都限于usdt。用户A需要发送10usdt,但他/她没有ETH来支付交易费。
在这些情况下,您的应用程序应代表用户支付费用。
transferFrom 是这些情况下的良好解决方案。

transferFrom 流程

1. 首先,使用 approve 方法授予委托人权限。
2. 然后,使用 transferFrom 方法代表用户进行交易。

实施

$owner_private = '0xcf29c83a88e23d0b9e676beca426490bf79aca71e9d24f79a99d30c48292e1e3';
$owner_address = '0xA7e5F270c27E9d33911EE7D50D8E814f793d2760';

$myapp_private = '0xa6b6be193bfeac6160178ee6e1435609ae566a9054715e0802e4c3b39bb94e83';
$myapp_address = '0x8dC9b3c20795815aa063FEdBE8E564566CEc1893';

$to_address = '0x245013F05DdA116142Ca8db205ec4F8C780E3DcB';

//by this method we allow $myapp_address to send upto 99999 token behalf of $owner_address
$approve_tx    = $token->approve($owner_address, $myapp_address, 99999);
$approve_tx_id = $approve_tx->sign($owner_private)
                            ->send()
;


//the magic is here, $myapp_address send 10 tokens behalf of user and $myapp_address pay transaction fee
$transfer_tx    = $token->transferFrom($myapp_address, $owner_address, $to_address, 10);
$transfer_tx_id = $transfer_tx->sign($myapp_private)
                              ->send()
;

使用 allowance 检查剩余的 transferFrom 数量

$remain = $token->allowance($owner_address, $myapp_address);

注意事项
approve 方法不需要在每次交易中都使用。
要撤销 transferFrom 权限,请调用 $token->approve($owner_address, $myapp_address, 0),金额为 0