Solidity

合約程式碼不從 web3 執行,從 Mist 工作

  • June 24, 2016

從 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

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

不工作(始終在第 65 步停止):http ://testnet.etherscan.io/vmtrace?txhash=0x0c8447d26c90189d4fcb6cfac3a2143d7132db9b6b6b55854401b4a9be99cb28

如果查看交易數據的前四個字節,一個是0x9cd61592,另一個是0x1e2564fb。這表明您沒有在兩個事務中呼叫相同的函式。web3 交易執行的短暫性讓我懷疑函式簽名與合約中的任何函式都不匹配,這意味著你的 ABI 定義可能是錯誤的。

你確定你在 web3 中正確定義了 ABI 嗎?

引用自:https://ethereum.stackexchange.com/questions/6488