Solidność - kontrakty

Kontrakt w Solidity jest podobny do klasy w C ++. Umowa ma następujące właściwości.

  • Constructor - Specjalna funkcja zadeklarowana za pomocą słowa kluczowego constructor, która będzie wykonywana raz na kontrakt i jest wywoływana podczas tworzenia kontraktu.

  • State Variables - Zmienne na kontrakt do przechowywania stanu kontraktu.

  • Functions - Funkcje na kontrakt, które mogą modyfikować zmienne stanu w celu zmiany stanu kontraktu.

Kwantyfikatory widoczności

Poniżej przedstawiono różne kwantyfikatory widoczności dla funkcji / zmiennych stanu kontraktu.

  • external- Funkcje zewnętrzne mają być wywoływane przez inne umowy. Nie można ich używać do połączeń wewnętrznych. Aby wywołać funkcję zewnętrzną w ramach kontraktu, wymagane jest wywołanie this.function_name (). Zmienne stanu nie mogą być oznaczone jako zewnętrzne.

  • public- Funkcje / zmienne publiczne mogą być używane zarówno zewnętrznie, jak i wewnętrznie. Dla zmiennej stanu publicznego Solidity automatycznie tworzy funkcję pobierającą.

  • internal - Funkcje / zmienne wewnętrzne mogą być używane tylko wewnętrznie lub przez umowy pochodne.

  • private - Prywatne funkcje / zmienne mogą być używane tylko wewnętrznie, a nawet w umowach pochodnych.

Przykład

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(); }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application . Uruchom różne metody kontraktów. Dla E.getComputedResult (), po którym następuje E.getResult (), pokazuje -

Wynik

0: uint256: 8