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
no funciona (se detiene constantemente en el paso 65): http://testnet.etherscan.io/vmtrace?txhash=0x0c8447d26c90189d4fcb6cfac3a2143d7132db9b6b6b55854401b4a9be99cb28
Si observa los primeros cuatro bytes de los datos de la transacción, uno es 0x9cd61592
y 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?
tortas de bebe