首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MetaMask Web3对象不支持像eth_sendTransaction这样没有回调参数的同步方法

MetaMask Web3对象不支持像eth_sendTransaction这样没有回调参数的同步方法
EN

Stack Overflow用户
提问于 2019-11-04 00:33:22
回答 2查看 2.1K关注 0票数 2

我在智能合约中有一个名为'gameDeposit‘的支付函数,用户需要在该函数中存入eth才能参与游戏,但当我使用web3 javascript api调用它时,它给了我未捕获的错误

代码语言:javascript
复制
inpage.js:1 Uncaught (in promise) Error: The MetaMask Web3 object does not support synchronous methods like eth_sendTransaction without a callback parameter
代码语言:javascript
复制
        const Abi = [{ABI}];
        const contractAbi = web3.eth.contract(Abi);
        const myContract = contractAbi.at("0x3....");
        const amountEth = '0.01';
        console.log(myContract);
        const gameID = '10';
        myContract.gameDeposit(gameID).send({
            from: web3.eth.accounts[0],
            value: web3.toWei(amountEth, 'ether')
        },(error , result) => {
            if(!error)
                console.log(result);
            else
                console.error(error)
        })
    })
EN

回答 2

Stack Overflow用户

发布于 2019-11-06 11:51:59

我已经有了解决方案。gameDeposit函数中不应有参数,参数应在.sendTransaction()中。

代码语言:javascript
复制
     myContract.gameDeposit.sendTransaction(gameID,{
            from:   web3.eth.accounts[0],
             value: 1000000000000000
         },function(error , result){
             if(!error)
                 console.log(result);
             else
                 console.log(error.code)
        })
票数 3
EN

Stack Overflow用户

发布于 2020-08-25 09:58:03

@Chitranshu answer非常正确(工作正常),但只要包含回调函数,就可以将参数放在gameDeposit上。如下所示:

代码语言:javascript
复制
myContract.gameDeposit(gameID,{
        from:   web3.eth.accounts[0],
         value: 1000000000000000
     },function(error, result){
         if(!error)
             console.log(result);
         else
             console.error(error);
    });

这样,它就会根据方法类型自动确定是使用call还是sendTransaction。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58682257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档