Estoy tratando de implementar contratos de fábrica en Mix, pero no puedo hacer que el niño cree y devuelva una dirección. Despliego Factory
pero cuando trato de llamar a la función del creador,
contracts['Factory'].contract.Create(10)
Lanzamientos mixtos:
JavaScript error 14:18:06 web3.js - line 3881 - Uncaught invalid address
contract Gizmo
{
int public value;
function Gizmo(int v) {
value = v;
}
}
contract Factory
{
address gizmoAddr;
function Create(int _value) returns (address) {
gizmoAddr = new Gizmo(_value);
return gizmoAddr;
}
}
Debe especificar una dirección desde la que está enviando la transacción
contracts['Factory'].contract.Create(10,{from: web3.eth.accounts[0],gas:100000});
Puede cambiar el gas según sea necesario, pero 100,000 deberían ser suficientes para esto.
o0ragman0o
gizmo
por dirección en js, por ejemplocontracts[0x97fea572b69e27ca44475534359d9bb932133fb3].contract.value()
?tjaden hess
address constant gizmoAddr
y luego usar ABI para crear un nuevo objeto de contrato en web3tjaden hess
o0ragman0o
gizmoAddr
tan constante como necesita ser creado dinámicamente. Además, a Factory, agregué la función:function getGizmoVal() returns (int) { return gizmoAddr.val(); }
pero cuando la llamo con JS responde con un valor de retorno diferente cada vez. :/o0ragman0o
function getGizmoVal() constant returns (int)
funciona correctamentetjaden hess
constant
palabra clave en realidad no hace nada en el contrato, por cierto. Simplemente le dice a web3 que simule una ejecución por defecto en lugar de enviar una transacción