Solidez - Contratos

Contrato em Solidity é semelhante a uma classe em C ++. Um contrato tem as seguintes propriedades.

  • Constructor - Uma função especial declarada com a palavra-chave constructor que será executada uma vez por contrato e é invocada quando um contrato é criado.

  • State Variables - Variáveis ​​por contrato para armazenar o estado do contrato.

  • Functions - Funções por contrato que podem modificar as variáveis ​​de estado para alterar o estado de um contrato.

Quantificadores de Visibilidade

A seguir estão vários quantificadores de visibilidade para funções / variáveis ​​de estado de um contrato.

  • external- As funções externas devem ser chamadas por outros contratos. Eles não podem ser usados ​​para chamadas internas. Para chamar uma função externa dentro do contrato, a chamada de this.function_name () é necessária. Variáveis ​​de estado não podem ser marcadas como externas.

  • public- Funções / variáveis ​​públicas podem ser usadas tanto externa quanto internamente. Para a variável de estado público, o Solidity cria automaticamente uma função getter.

  • internal - As funções / variáveis ​​internas só podem ser usadas internamente ou por contratos derivados.

  • private - As funções / variáveis ​​privadas só podem ser utilizadas internamente e nem mesmo por contratos derivados.

Exemplo

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

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First . Execute vários métodos de contratos. Para E.getComputedResult () seguido por E.getResult () mostra -

Resultado

0: uint256: 8