Por favor, déjame cómo instalo un nuevo contrato de fábrica en la consola geth. No puedo instanciar desde la consola geth. El createFactory de Factory Contract que se muestra a continuación funcionó perfectamente bien cuando intenté llamarlo desde el navegador Remix en línea. También incrementa el conteo en 1 cada vez que recibe una llamada. Mi Miner está funcionando cuando hago todas estas cosas.
A continuación se muestra el código fuente. Compilo la fuente usando el compilador de solidez del navegador en línea Remix
pragma solidity ^0.4.6;
contract Factory {
bytes32[] Names;
address[] newContracts;
uint public count=0;
function createContract (bytes32 name) {
address newContract = new Contract(name);
count=count+1;
newContracts.push(newContract);
}
function getName (uint i) constant returns (address sblcAddress){
Contract con = Contract(newContracts[i]);
sblcAddress= address(con);
return sblcAddress;
}
}
contract Contract {
bytes32 public Name;
function Contract (bytes32 name) {
Name = name;
}
}
Después de abrir la consola geth y desbloquear mi cuenta base, implemento el siguiente código.
var browser_contractfactory_sol_factoryContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"count","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"bytes32"}],"name":"createContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"getName","outputs":[{"name":"sblcAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]);
var browser_contractfactory_sol_factory = browser_contractfactory_sol_factoryContract.new(
{
from: web3.eth.accounts[0],
data: '0x60606040526000600255341561001457600080fd5b5b610376806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd146100545780633f811b801461007d5780636b8ff574146100a4575b600080fd5b341561005f57600080fd5b610067610107565b6040518082815260200191505060405180910390f35b341561008857600080fd5b6100a260048080356000191690602001909190505061010d565b005b34156100af57600080fd5b6100c560048080359060200190919050506101b7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60025481565b600081610118610205565b808260001916600019168152602001915050604051809103906000f080151561014057600080fd5b9050600160025401600281905550600180548060010182816101629190610214565b916000526020600020900160005b83909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b5050565b6000806001838154811015156101c957fe5b906000526020600020900160005b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508091508191505b50919050565b60405160e58061026683390190565b81548183558181151161023b5781836000526020600020918201910161023a9190610240565b5b505050565b61026291905b8082111561025e576000816000905550600101610246565b5090565b9056006060604052341561000f57600080fd5b6040516020806100e5833981016040528080519060200190919050505b80600081600019169055505b505b609d806100486000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638052474d14603d575b600080fd5b3415604757600080fd5b604d606b565b60405180826000191660001916815260200191505060405180910390f35b600054815600a165627a7a7230582072ea4eb8d6bf397a5e1d641def036a3a3776b2de002fb3d8a696958a36fdb86f0029a165627a7a72305820f96383d7dc97bbb8dcb737fe3cc485d872fa45409d75db689ccda27f6d1448f90029',
gas: '1087718887660'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
});
El código anterior crea un nuevo contrato de fábrica en una nueva dirección. Obtengo la dirección donde se crea mi contrato de fábrica. Usando esa dirección, trato de acceder a la función createContract del contrato de fábrica
var factoryCInstance = browser_contractfactory_sol_factoryContract.at('0x...FactoryContractAddress..');
factoryCInstance.createContract(3,{from: web3.eth.accounts[0]});
Después de ejecutar la línea anterior, todo lo que obtengo es el hash de la transacción. Cuando llamo factoryCInstance.count();
El conteo que se muestra es 0
Llamar a createContract() con el valor de gas especificado resolvió mi problema
factoryCInstance.createContract(2,{from:eth.accounts[0],gas: 470000});
EJÉRCITO DE RESERVA
ismael
createContract
? Si la transacción falla, no actualizará las variables de estado.EJÉRCITO DE RESERVA
EJÉRCITO DE RESERVA