Vertragscode wird nicht von web3 ausgeführt, funktioniert von Mist

Ich habe anscheinend ein Problem mit dem Vertragscode, der nicht ausgeführt wird, wenn er von web3 aufgerufen wird (funktioniert, wenn er von Nebel aufgerufen wird). Die Eth geht zum Vertrag, also weiß ich, dass sie zumindest den Anruf tätigt. Ich nenne den Vertrag als solchen:

```

    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);

```

und wie bereits erwähnt, funktioniert es mit Mist, aber nicht mit web3. Ich habe einige öffentliche Zähler, die bei Verwendung des ersteren korrekt hochzählen. Irgendwelche Ideen dazu? Ich hatte einen Modifikator für den Solidity-Vertrag, habe ihn aber entfernt und keinen Unterschied gemacht. Ich habe auch versucht, den Vertrag wie folgt aufzurufen:

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

ohne Unterschied. Ich betreibe einen RPC-Knoten auf einer AWS-Linux-Instance.

Ich führe geth als solches aus:

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

BEARBEITEN: Hier ist ein funktionierender und ein nicht funktionierender vmtrace

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

funktioniert nicht (stoppt ständig bei Schritt 65): http://testnet.etherscan.io/vmtrace?txhash=0x0c8447d26c90189d4fcb6cfac3a2143d7132db9b6b6b55854401b4a9be99cb28

Antworten (1)

Wenn Sie sich die ersten vier Bytes der Transaktionsdaten ansehen, ist das eine 0x9cd61592und das andere 0x1e2564fb. Dies weist darauf hin, dass Sie nicht in beiden Transaktionen dieselbe Funktion aufrufen. Die Kürze der Ausführung der Web3-Transaktion lässt mich vermuten, dass die Funktionssignatur mit keiner Funktion im Vertrag übereinstimmt, was bedeutet, dass Ihre ABI-Definition wahrscheinlich falsch ist.

Sind Sie sicher, dass Sie die ABI in web3 richtig definiert haben?

Weißt du, ich hatte einen Verdacht, dachte aber, ich hätte mich geirrt. Werde mal nachschauen und berichten, gehe erstmal schlafen. Ich habe das Gefühl, das ist richtig.