当前位置: 首页 > 知识库问答 >
问题:

PHP web3 ERC20令牌函数调用

司马晋
2023-03-14

我有一个代表ERC20令牌的智能合约。我已经使用安全帽在币安测试网上部署了智能合约。

我也有一个部署的智能合约地址。

我使用以下链接在PHP laravel项目中集成了Web3库。

https://github.com/web3p/web3.php

我可以调用web3函数来获取令牌符号。它运行良好。

我想使用智能合约的“转移”功能将我的代币转移到某个钱包地址。

我正在使用以下代码。

$timeout = 30; // set this time accordingly by default it is 1 sec
$web3 = new Web3(new HttpProvider(new HttpRequestManager('https://data-seed-prebsc-1- s1.binance.org:8545', $timeout)));
$ContractMeta = json_decode(file_get_contents(base_path('public/web3/Token.json')));
$contract = new Contract($web3->provider, $ContractMeta->abi);
$toAccount = 'WALLET_ADDRESS_OF_RECEIVER';
$fromAccount = 'PRIVATE_KEY_OF_SENDER';

$contract->at("DEPLOYED_WALLET_ADDRESS")->send('transfer', $toAccount, 18, [
        'from' => $fromAccount,
        'value' => '1000',
        'gas' => '0x200b20',
        'gasPrice' => '20000000000'
    ], function ($err, $result) use ($contract, $fromAccount, $toAccount) {
        if ($err !== null) {
            throw $err;
        }
        if ($result) {
            echo "\nTransaction has made:) id: " . $result . "\n";
        }
        $transactionId = $result;

        $contract->eth->getTransactionReceipt($transactionId, function ($err, $transaction) use ($fromAccount, $toAccount) {
            if ($err !== null) {
                throw $err;
            }
            if ($transaction) {
                echo "\nTransaction has mind:) block number: " . $transaction->blockNumber . "\nTransaction dump:\n";
                var_dump($transaction);
            }
        });
    });

但我得到以下错误。

{
  "message": "Wrong type of eth_sendTransaction method argument 0.",
  "exception": "RuntimeException",
  "file": "/var/www/html/vendor/web3p/web3.php/src/Methods/EthMethod.php",
  "line": 125,
  "trace": [
    {
      "file": "/var/www/html/vendor/web3p/web3.php/src/Eth.php",
      "line": 102,
      "function": "validate",
      "class": "Web3\\Methods\\EthMethod",
      "type": "->"
    },
    {
      "file": "/var/www/html/vendor/web3p/web3.php/src/Contract.php",
      "line": 572,
      "function": "__call",
      "class": "Web3\\Eth",
      "type": "->"
    }
  ]
}

有人能指导我解决这个问题吗?

这是Token.json-

阿比

共有1个答案

解阳泽
2023-03-14

此错误告诉您,您的合约响应中没有name=transfer和type=function的对象。它应该是这样的:

   {
      "constant": false,
      "inputs": [
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
 类似资料:
  • 尝试使用Firebase函数从我的Cloud Firestore中获取我的FCM令牌 我的功能代码: 我的Firestore 岗位: 用户: 如果我手动添加令牌,所有东西都可以工作,但只是将每个“喜欢”发送到一个设备,我的目标是只发送一个链接给帖子的所有者

  • 使聊天应用程序通过Node in action引用,并在运行server.js时,得到以下错误:function serveStatic(response,cache,absPath)^^^^^^^^^^^^syntaxerror:exports.runinthiscontext(VM.JS:73:16)在module._compile(module.js:543:28)在object.modul

  • 问题内容: 我正在尝试将功能部署到Firebase,并且在部署过程中出现错误 错误:功能未正确部署。 可以将其与异步功能链接吗? 实际行为 函数部署时出错,cli向我显示以下消息: ===============控制台日志================ ===============函数index.js文件================ =============== package.json

  • 因此,我尝试使用async/await,但出现以下错误: 代码如下:

  • 将react本机应用升级到0.59版后。8我让它在android上工作,但当尝试构建它并在ios上运行时,它向我显示了以下错误: 即使在执行react-native-info或react-native-start或react-native-run ios时,也会显示相同的错误,您知道此错误是什么意思吗?

  • 我有几个azure函数,我想设置一个基于令牌的身份验证(使用承载令牌)。我想确保没有在HTTP头中传递承载令牌的用户不能访问azure函数。我正在使用可视代码/蔚蓝云。如有任何帮助或指导,将不胜感激。我有一种方法可以使用客户端id、secret和租户id来获得承载令牌,但是如何使其成为azure函数的必填字段呢?