Solidity
無法在智能合約中執行寫入功能 - 地址無效?
我有以下簡單的智能合約……
contract SimpleStorage { uint storedData; function set(uint x) { storedData = x; } function get() constant returns (uint retVal) { return storedData; } }
我在 geth 控制台中使用以下程式碼部署…
var source = "contract SimpleStorage...[code here]" var compiled = web3.eth.compile.solidity(source) var contract = web3.eth.contract(compiled.Coin.info.abiDefinition) var storage = contract.new({from:web3.eth.accounts[0], data: compiled.SimpleStorage.code, gas: 300000})
合約被探勘後,我可以通過儲存對象訪問合約功能。我以為我可以打電話給…
storage.set(10)
…設置 storedData 變數。但是,每次嘗試此操作時,都會收到“無效地址”錯誤。
我確定這是因為我試圖對合約的內部狀態執行寫操作(讀操作工作正常)。
我需要送出一個探勘契約新狀態的交易,但是我不知道如何做到這一點。
如何在智能合約中執行寫交易?
嘗試設置
web3.eth.defaultAccount = eth.accounts
$$ 0 $$
聽起來您的交易不知道使用哪個帳戶來簽署通話。任何改變合約狀態的呼叫(寫操作)都需要一個簽名的交易。
另一種方法是將“交易對象”作為契約方法的最後一個參數傳遞:
storage.set(10,{from: accounts[0]});
編輯1:
當我選擇“來自”帳戶時,出現以下錯誤:“需要身份驗證:密碼或解鎖”。所以我需要執行 personal.unlockAccount(eth.accounts
$$ 0 $$“密碼”,15000)。您可以在‘authentication required: password or unlock’ 嘗試通過 web3 呼叫智能合約方法時出錯。