Кажется, у меня проблема с кодом контракта, который не выполняется при вызове из web3 (работает при вызове из тумана). Eth идет на контракт, так что я знаю, что он, по крайней мере, делает колл. Я называю контракт как таковой:
```
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);
```
и, как уже упоминалось, он работает с Mist, но не с web3. У меня есть несколько общедоступных счетчиков, которые правильно увеличиваются при использовании первого. Любые идеи по этому поводу? У меня был модификатор на контракт солидности, но я удалил его без разницы. Я также пытался вызвать контракт, например:
contract[functionName](args[0],args[1],..., { gas: ... } );
без разницы. Я запускаю узел RPC на экземпляре AWS Linux.
Я запускаю geth как таковой:
geth --testnet --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --rpcapi="db,eth,net,web3,personal,web3"
РЕДАКТИРОВАТЬ: Вот рабочий и нерабочий vmtrace
не работает (постоянно останавливается на шаге 65): http://testnet.etherscan.io/vmtrace?txhash=0x0c8447d26c90189d4fcb6cfac3a2143d7132db9b6b6b55854401b4a9be99cb28
Если вы посмотрите на первые четыре байта данных транзакции, один из них будет , 0x9cd61592
а другой — 0x1e2564fb
. Это указывает на то, что вы не вызываете одну и ту же функцию в обеих транзакциях. Краткость выполнения транзакции web3 заставляет меня подозревать, что сигнатура функции не соответствует какой-либо функции в контракте, а это означает, что ваше определение ABI, вероятно, неверно.
Вы уверены, что правильно определили ABI в web3?
детские торты