State-Variable

設置契約級別變數

  • August 30, 2018

我是一名進入 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,您將在呼叫該函式時發送交易。執行需要更長的時間並且實際上不會返回結果,但您所做的狀態更改將持續存在。

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