堅牢性-変数

Solidityは3種類の変数をサポートしています。

  • State Variables −値がコントラクトストレージに永続的に保存される変数。

  • Local Variables −関数が実行されるまで値が存在する変数。

  • Global Variables −ブロックチェーンに関する情報を取得するために使用されるグローバル名前空間に特別な変数が存在します。

Solidityは静的に型付けされた言語です。つまり、宣言時に状態またはローカル変数の型を指定する必要があります。宣言された各変数には、そのタイプに基づいたデフォルト値が常にあります。「未定義」または「ヌル」の概念はありません。

状態変数

値がコントラクトストレージに永続的に保存される変数。

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData;      // State variable
   constructor() public {
      storedData = 10;   // Using State variable
   }
}

ローカル変数

値が定義されている関数内でのみ使用できる変数。関数パラメーターは常にその関数に対してローカルです。

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData; // State variable
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // local variable
      uint b = 2;
      uint result = a + b;
      return result; //access the local variable
   }
}

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData; // State variable
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // local variable
      uint b = 2;
      uint result = a + b;
      return storedData; //access the state variable
   }
}

Solidity First Applicationの章に記載されている手順を使用して、上記のプログラムを実行します。

出力

0: uint256: 10

グローバル変数

これらは、グローバルワークスペースに存在し、ブロックチェーンとトランザクションのプロパティに関する情報を提供する特別な変数です。

名前 戻り値
blockhash(uint blockNumber)は(bytes32)を返します 指定されたブロックのハッシュ-現在のブロックを除く最新の256ブロックでのみ機能します
block.coinbase(支払い可能なアドレス) 現在のブロックマイナーのアドレス
block.difficulty(uint) 現在のブロックの難しさ
block.gaslimit(uint) 現在のブロックガス制限
block.number(uint) 現在のブロック番号
block.timestamp(uint) UNIXエポックからの秒数としての現在のブロックタイムスタンプ
gasleft()は(uint256)を返します 残りのガス
msg.data(バイトcalldata) 完全なcalldata
msg.sender(支払い可能なアドレス) メッセージの送信者(現在の発信者)
msg.sig(bytes4) calldata(関数識別子)の最初の4バイト
msg.value(uint) メッセージとともに送信されたweiの数
今(uint) 現在のブロックのタイムスタンプ
tx.gasprice(uint) 取引のガス価格
tx.origin(支払い可能なアドレス) トランザクションの送信者

Solidity変数名

Solidityで変数に名前を付けるときは、次のルールに注意してください。

  • Solidityの予約済みキーワードを変数名として使用しないでください。これらのキーワードについては、次のセクションで説明します。たとえば、breakまたはboolean変数名は無効です。

  • Solidity変数名は、数字(0〜9)で始めることはできません。文字または下線文字で始める必要があります。たとえば、123testは無効な変数名ですが、_123testは有効な変数名です。

  • Solidity変数名では大文字と小文字が区別されます。たとえば、Nameとnameは2つの異なる変数です。