我有以下情况:
事务: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");