State-Variable
函式不會改變變數的值
我已經與一個結構體 Stock 簽訂了契約。我有一個包含兩個這樣的股票的數組。它們可以很好地初始化,但是當我嘗試更改變數的值時,什麼也沒有發生。此外,同一函式不能更改簡單字元串變數的值。
這是程式碼:
contract Company{ struct Stock{ address owner; string bitcoinAddress; } string public companyName; Stock[2] public owners; string public test; function Company(string _companyName, address[2] addresses){ companyName = _companyName; for(uint8 x=0; x<owners.length; x++){ owners[x] = Stock(addresses[x], ""); } } function changeStockOwner(uint8 _number, address _newAddress) constant returns(string){ if(msg.sender == owners[_number].owner){ owners[_number].owner = _newAddress; test = "hello"; return "well"; } } }
所以,當我打電話時
company.changeStockOwner(0, personal.listAccounts[1])
,它返回“好”,所以我猜它可以通過 if 語句。但是,什麼都沒有改變。我認為更改數組中結構的值可能會有些困難,所以我添加了測試只是為了看看我是否可以改變它,但這也不會改變。我也嘗試將 web3.eth.defaultAccount 設置為相同的所有者
$$ 0 $$.owner (只是看看它是否會工作)。 我使用了ethereum.github.io的線上編譯器。
我不知道我做錯了什麼。似乎很明顯它應該工作,但為什麼不呢?
changeStockOwner()
被標記為常量,因此無法更改區塊鏈。我從建構子中刪除了初始化循環,並在有效性檢查中添加了一個軟糖。它讓我們在建構子中使用 null args 初始化合約,並有助於確認設置/獲取過程。
contract Company{ struct Stock{ address owner; string bitcoinAddress; } bytes32 public companyName; Stock[2] public owners; string public test; function Company(bytes32 _companyName, address[2] addresses){ companyName = _companyName; // arrays are initialized to 0 } function changeStockOwner(uint8 ownerNumber, string newAddress) returns(bool success){ // little fudge for testing if(msg.sender != owners[ownerNumber].owner && owners[ownerNumber].owner != 0) throw; owners[ownerNumber].bitcoinAddress = newAddress; return true; } }
希望能幫助到你。