3

I am using web3.js 1.0.0-beta.36 to connect to the blockchain.

But unfortunately this code cannot connect to Metamask, if it has been enabled.

var metamask = false;
if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
    metamask = true; 
    web3.eth.defaultAccount = web3.eth.accounts[0];
} else {
    web3 = new Web3(new
    Web3.providers.HttpProvider(infuraUrl));
    var address = web3.eth.accounts.create().address;
}
myContract = new web3.eth.Contract(abi,contractAddress);
myContract.methods.Register((Name,Id).send({},function(error,result){
    if (! error)
        console.log(result);
    else
        console.log(error);
});

When we run this program with Metamsk it displays this error:

Error: Returned error: Error: MetaMask Tx Signature: User denied transaction signature.

but when I mention a fixed address it works:

myContract.methods.Register((Name,Id).send({from: '0x...'},function(error,result){
        if (! error)
            console.log(result);
        else
            console.log(error);
    });

For some reasons I can't bring the address itself in the source code and I want it to get the address from Metamask. What should I do?

2

1 Answer 1

4

Eureka!!! (without special Archimedes style!)

Finally I found.

window.addEventListener('load', async () => {
    // Modern dapp browsers...
    if (window.ethereum) {
        window.web3 = new Web3(ethereum);
        try {
            await ethereum.enable();
            var accounts= await web3.eth.getAccounts();
            var option={from: accounts[0] };
            var myContract = new web3.eth.Contract(abi,contractAddress);
            myContract.methods.RegisterInstructor('11','Ali')
            .send(option,function(error,result){
                if (! error)
                    console.log(result);
                else
                    console.log(error);
            });
        } catch (error) {
            // User denied account access...
        }
    }
    // Legacy dapp browsers...
    else if (window.web3) {
        window.web3 = new Web3(web3.currentProvider);
        // Acccounts always exposed
        web3.eth.sendTransaction({/* ... */});
    }
    // Non-dapp browsers...
    else {
        console.log('Non-Ethereum browser detected. You should consider trying MetaMask!');
    }
});

This connects to Metamask properly. Main problem was that our browsers are supermodern!!!

Thanks to @Ismael, because of his help for 70% of solution.

2
  • can you help me with all your dependencies? can you share your entie codebase? I have metamask installed in chrome browser but i am always getting Non-Ethereum browser detected. You should consider trying MetaMask! error Commented Aug 12, 2019 at 11:49
  • In newer versions you must try Metamask to enable at first: window.ethereum.enable(); Commented Aug 13, 2019 at 15:02

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.