如何通过与PHP geth的合约地址获取ERC20令牌名称和符号



我有以下情况:

事务:https://etherscan.io/tx/0xc7ee5bf1ea144b4e9e7dad32b574990c5e1b832226a626973929246577954fdf

我能够在这次交易中获得合同地址"0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c"使用以下代码:

$transaction_receipt = $geth->eth_getTransactionReceipt($transaction['hash']);
$erc20_address = $transaction_receipt['logs'][0]['topics'];

现在我需要通过合同地址获得这个ERC20令牌的名称和符号。

我试了试我的运气&;eth_call&;,因为我看到有人在stackoverflow的帖子中提到了这个。但不幸的是,我被语法困在这里,我不确定这是否是正确的方法。

$geth->eth_call($transaction_receipt['logs'][0]['address'])

错误:

函数参数太少dappstatusGethJsonRpc::eth_call(), 1/var/www/html/app/http/controllers/HomeController.php on第2321行和正好2行

我在阅读API wiki https://eth.wiki/json-rpc/API

后尝试使用第二个参数
$geth->eth_call($transaction_receipt['logs'][0]['address'],"'id':1")

现在我得到这个错误(错误的语法)

无效参数0:json:无法将字符串解封为Go值ethapi类型。CallArgs

也许有人得到了解决方案a我的语法错误和B得到ERC20名称&符号,如果我使用eth_call的方式是错误的。

您可以直接使用php-erc20库。

<?php
require_once "vendor/autoload.php";
$token = new Lessmore92EthereumToken("0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c", "https://mainnet.infura.io/v3/API_KEY");
var_dump($token->name());
var_dump($token->symbol());

输出:

string(10) "Enjin Coin"
string(3) "ENJ"

更新:
如果您正在使用您的Geth节点,您可以使用它作为JSON-RPC服务器:

$token = new Lessmore92EthereumToken(CONTRACT_ADDRESS, "http://127.0.0.1:8545");