合約程式碼不從 web3 執行,從 Mist 工作
從 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。我有一些公共計數器在使用前者時會正確遞增。對此有什麼想法嗎?我在solidity合約上有一個修改器,但刪除它並沒有什麼區別。我也嘗試過像這樣呼叫契約:
contract[functionName](args[0],args[1],..., { gas: ... } );
沒有區別。我在 AWS Linux 實例上執行 RPC 節點。
我正在執行 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 定義可能是錯誤的。你確定你在 web3 中正確定義了 ABI 嗎?