堅実性-契約

Solidityのコントラクトは、C ++のクラスに似ています。コントラクトには次のプロパティがあります。

  • Constructor −コンストラクタキーワードで宣言された特別な関数で、コントラクトごとに1回実行され、コントラクトの作成時に呼び出されます。

  • State Variables −契約の状態を格納するための契約ごとの変数。

  • Functions −状態変数を変更してコントラクトの状態を変更できる、コントラクトごとの関数。

可視性定量化子

以下は、コントラクトの関数/状態変数のさまざまな可視性定量化子です。

  • external−外部関数は、他のコントラクトによって呼び出されることを意図しています。内線通話には使用できません。コントラクト内で外部関数を呼び出すには、this.function_name()呼び出しが必要です。状態変数を外部としてマークすることはできません。

  • public−パブリック関数/変数は外部と内部の両方で使用できます。パブリック状態変数の場合、Solidityは自動的にゲッター関数を作成します。

  • internal −内部関数/変数は、内部または派生コントラクトによってのみ使用できます。

  • private −プライベート関数/変数は内部でのみ使用でき、派生コントラクトによっても使用できません。

pragma solidity ^0.5.0;

contract C {
   //private state variable
   uint private data;
   
   //public state variable
   uint public info;

   //constructor
   constructor() public {
      info = 10;
   }
   //private function
   function increment(uint a) private pure returns(uint) { return a + 1; }
   
   //public function
   function updateData(uint a) public { data = a; }
   function getData() public view returns(uint) { return data; }
   function compute(uint a, uint b) internal pure returns (uint) { return a + b; }
}
//External Contract
contract D {
   function readData() public returns(uint) {
      C c = new C();
      c.updateData(7);         
      return c.getData();
   }
}
//Derived Contract
contract E is C {
   uint private result;
   C private c;
   
   constructor() public {
      c = new C();
   }  
   function getComputedResult() public {      
      result = compute(3, 5); 
   }
   function getResult() public view returns(uint) { return result; }
   function getData() public view returns(uint) { return c.info(); }
}

Solidity First Applicationの章に記載されている手順を使用して、上記のプログラムを実行します。コントラクトのさまざまな方法を実行します。E.getComputedResult()の後にE.getResult()が続く場合、次のようになります。

出力

0: uint256: 8