I wrote a contract A that creates a new contract B and returns the address of the new contract B that's been created. When I tested this on solidity browser it seems to work well, but when I tried to run the create method using web3, I keep getting this error:
throw errors.InvalidResponse(result);
^
Error: VM Exception while processing transaction: out of gas
Here's my contract code:
pragma solidity ^0.4.2;
contract B {
int public id;
function B(int _id) {
id = _id;
}
}
contract A {
address Baddress;
function createB(int _id) returns (address) {
Baddress = new B(_id);
return Baddress;
}
}
Here's my Javascript code that attempts to run A's createB method:
web3.eth.defaultAccount = web3.eth.coinbase;
var Acontract = web3.eth.contract([{"constant":false,"inputs":[],"name":"getdum","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"num","type":"int256"}],"name":"create","outputs":[],"payable":false,"type":"function"}]);
var A = Acontract.new({from: web3.eth.accounts[0],
data: '{{compiled byte code}}',
gas: '47000000'}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address);
contract.createcreateB(5000).then(console.log); // This line throws the error
}
})
I've read many other related posts and could only find answers that suggest to use more gas, but no matter how much gas I sent with the transaction, it would throw the same error. You can see I'm using a really large value for gas in the code. Can anyone help me identify what I'm doing wrong? I'm using solc Version: 0.4.9+commit.364da425.Darwin.appleclang, EthereumJS TestRPC v3.0.3, and node v6.4.0.