1

I have a simple Vue form, that calls a method in an Ethereum contract. If I don't provide a callback to my method, Metamask complains:

Uncaught Error: The MetaMask Web3 object does not support synchronous methods like eth_sendTransaction without a callback parameter.

So I added this. (even though I already have a callback in my sendTransaction)

Then I get the error:

Uncaught TypeError: Cannot read property 'sendTransaction' of undefined

In my console.log I can clearly see the method on dash.crowdsaleContractInstance, and the sendTransaction property as well.

I'm using Ganache CLI v6.7.0 (ganache-core: 2.8.0) and metamask web3 api version: 0.20.7

Im calling my method on the instance of the contract not the contract object

I tried this as well as found in the documentation: myContract.methods.myMethod(123).send... but the methods property is not available, so I guess I'm on another version of web3?

I've done a fair share of web3 smart contract programming by now, but I still find it very hard to debug, to be honest. Anybody who can help to find what is going wrong here?

dash is an object where I instantiate a lot of async functionality

Thanks.

vmBuyform = new Vue({
el: '#buyForm',
data: {
  to: dash.crowdsaleaddress,
  from: accounts[0],
  amount: 0.25
},
methods: {
  buy: function (event) {

    var sender = this.from;
    var receiver = this.to;
    var amountVal = this.amount;

    var amount = web3.toWei(amountVal, 'ether');
    console.log(dash.crowdsaleContractInstance);
    console.log(abis.crowdsaleContractInstance);
    console.log('Version: ', web3.version);

    // does not work with metamask enabled, works without metamask
    dash.crowdsaleContractInstance.depositFunds({from:sender, to:receiver, value: amount, gas: 2000000},
      function(error, result){}).sendTransaction({from:sender, to:receiver, value: amount, gas: 2000000},function(error, result){

      if(!error){
          console.log(result);

      }
      else{
          console.error(error);
      }

    });
  }
}
})
3
  • "so I guess I'm on another version of web3?" - Correct, if the methods property is not available, then you're using web3.js v0.x. The official documentation for this version is here. I recommend switching to v1.2.1 or higher, but not higher than the highest v1.x. Nov 27, 2019 at 14:14
  • How web3 is create? How dash.crowdsaleContractInstance is created?
    – Ismael
    Nov 27, 2019 at 15:13
  • Solved, the problem was something else... in the contract coins were send, but the sender address had an empty balance.
    – hdries
    Nov 27, 2019 at 20:38

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.