Contrato de fábrica que no se crea - Mix

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 Factorypero 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;
    }
}

Respuestas (1)

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.

Gracias. ¿Cómo llamo gizmopor dirección en js, por ejemplo contracts[0x97fea572b69e27ca44475534359d9bb932133fb3].contract.value()?
Realmente no puede devolver un valor de una transacción en cadena, por lo que la mejor manera es probablemente declarar address constant gizmoAddry luego usar ABI para crear un nuevo objeto de contrato en web3
O puede poner una función en Factory que le permita llamar a Gizmo sin necesidad de usar manualmente la dirección de Gizmo
No estoy entendiendo esto. Necesito que la fábrica llame a la instancia del gizmo después de crearla. No puedo declarar gizmoAddrtan 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. :/
function getGizmoVal() constant returns (int)funciona correctamente
La constantpalabra 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