Solidity

無法在智能合約中執行寫入功能 - 地址無效?

  • July 14, 2017

我有以下簡單的智能合約……

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 呼叫智能合約方法時出錯

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