I have a method on a Contract A which I am calling (in my dapp). This method in turn instantiates a second Contract B and emits an event with contract B's address.
I then use this address, along with the ABI (from my source code) to create a representation of this contract to interact with - in web3. However, when I try to interact with Contract B I get the following error:
Error: Returned error: Internal JSON-RPC error.
Unlike for my other transactions - metamask does not event attempt to open.
This is the code
const transactionObject = this.context.drizzle.contracts.FundingApplications.methods.submitApplication(name, description);
const data = await transactionObject.send({from: this.props.accounts[0], value: this.drizzle.web3.utils.toWei(String(0.004), "ether")}); // this succesfully uses metamask to make a request
const applicationAddress = data.events.ApplicationSubmitted.address;
const web3Instance = new Web3(this.context.drizzle.web3.currentProvider);
const application = new web3Instance.eth.Contract(Application.abi, applicationAddress);
const transactionalObject = application.methods.voteForApplication(1);
const gas = await transactionalObject.estimateGas(); // this is where it fails
const transaction = await transactionalObject.send({from: this.props.accounts[0], gas: gas});
When I log out transactionalObject, I see that it is indeed the transactional object required by web3 and metamask. However as soon as I call estimateGas
, send
or call
on it, it fails with the above error. This method of interacting with contracts works for all my other contracts which are deployed and then passed into drizzle options... but this method appears not to work for this contract, the only difference being that I am insantiating this contract at runtime using web3 and passing it the metamask provider. What am I missing?