State-Variable
設置契約級別變數
我是一名進入 Solidity 的 Python 開發人員,我覺得我缺少一些關於變數和範圍的東西。
如何設置和訪問函式範圍之外的變數?
我似乎無法將旋轉(簡單 uint)添加到我的旋轉歷史(uint
$$ $$) 並在其他地方訪問它們。我可以使用 push 並將其放入同一函式中的數組中,但它不會更新 State 級別的變數。
contract GoldenEgg{ uint[] public spinHistory; function spin() constant returns (uint) { uint spin = uint8(uint256(keccak256(block.timestamp, block.difficulty))%37); addToHistory(spin); return spin; } function getHistory() constant returns (uint[]) { return spinHistory; } function addToHistory( uint spin ) constant returns (uint[]) { spinHistory.push(spin); return spinHistory; }}
spin()
被標記constant
(不推薦使用的別名view
)。所以它不能改變任何狀態。當您呼叫一個view
函式時,您只需要求一個節點(您連接的節點)執行程式碼並告訴您結果,而不是向網路發送交易。沒有更改被持久化或儲存在區塊鏈中。如果您刪除
constant
,您將在呼叫該函式時發送交易。執行需要更長的時間並且實際上不會返回結果,但您所做的狀態更改將持續存在。