El código del contrato no se ejecuta desde web3, funciona desde Mist

Parece que tengo un problema con el código de contrato que no se ejecuta cuando se llama desde web3 (funciona cuando se llama desde mist). El Eth va al contrato, así que sé que al menos está haciendo la llamada. Llamo al contrato como tal:

```

    var fromAddr = sender;
    if(typeof fromAddr == "undefined" || !fromAddr )
        return false;

    var contractAddr = this.addr;
    var abi = this.abi;
    var contract = web3.eth.contract(abi).at(contractAddr);

    ...(some vars)...

    args.push({from: fromAddr, value: parseInt(value), gasPrice: gasPrice, gas: gas});
    var callback = function(err, txhash) {
        console.log('error: ' + err);
        console.log('txhash: ' + txhash);
    }
    args.push(callback);

    web3.personal.unlockAccount(fromAddr, pw);

    contract[functionName].apply(this,args);

```

y como se mencionó, funciona desde Mist pero no desde web3. Tengo algunos contadores públicos que se incrementan correctamente al usar el primero. ¿Alguna idea sobre esto? Tenía un modificador en el contrato de solidez pero lo eliminé sin ninguna diferencia. También he intentado llamar al contrato como:

contract[functionName](args[0],args[1],..., { gas: ... } );

sin diferencia Estoy ejecutando un nodo RPC en una instancia de AWS Linux.

Estoy ejecutando geth como tal:

geth --testnet --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --rpcapi="db,eth,net,web3,personal,web3"

EDITAR: Aquí hay un vmtrace que funciona y que no funciona

trabajando: http://testnet.etherscan.io/vmtrace?txhash=0xfb022ae9cbf0b39f9ee1890e794226ab02737bc0ccd9ae95d87a646ecbc91744

no funciona (se detiene constantemente en el paso 65): http://testnet.etherscan.io/vmtrace?txhash=0x0c8447d26c90189d4fcb6cfac3a2143d7132db9b6b6b55854401b4a9be99cb28

Respuestas (1)

Si observa los primeros cuatro bytes de los datos de la transacción, uno es 0x9cd61592y el otro es 0x1e2564fb. Esto indica que no está llamando a la misma función en ambas transacciones. La brevedad de la ejecución de la transacción web3 me hace sospechar que la firma de la función no coincide con ninguna función en el contrato, lo que significa que su definición de ABI probablemente sea incorrecta.

¿Estás seguro de que definiste la ABI correctamente en web3?

Sabes, tenía una sospecha pero pensé que seguramente estaba equivocado. Verificaré e informaré, me iré a dormir por ahora. Tengo la sensación de que esto es correcto.