Solidity - Конструкторы

Конструктор - это специальная функция, объявленная с использованием constructorключевое слово. Это дополнительная функция, которая используется для инициализации переменных состояния контракта. Ниже приведены ключевые характеристики конструктора.

  • В контракте может быть только один конструктор.

  • Код конструктора выполняется один раз при создании контракта и используется для инициализации состояния контракта.

  • После выполнения кода конструктора окончательный код развертывается в блокчейне. Этот код включает общедоступные функции и код, доступный через общедоступные функции. Код конструктора или любой внутренний метод, используемый только конструктором, не включается в окончательный код.

  • Конструктор может быть публичным или внутренним.

  • Внутренний конструктор отмечает контракт как абстрактный.

  • Если конструктор не определен, в контракте присутствует конструктор по умолчанию.

pragma solidity ^0.5.0;

contract Test {
   constructor() public {}
}
  • Если в базовом контракте есть конструктор с аргументами, каждый производный контракт должен их передавать.

  • Базовый конструктор можно инициализировать напрямую, используя следующий способ:

pragma solidity ^0.5.0;

contract Base {
   uint data;
   constructor(uint _data) public {
      data = _data;   
   }
}
contract Derived is Base (5) {
   constructor() public {}
}
  • Базовый конструктор может быть инициализирован косвенно следующим образом:

pragma solidity ^0.5.0;

contract Base {
   uint data;
   constructor(uint _data) public {
      data = _data;   
   }
}
contract Derived is Base {
   constructor(uint _info) Base(_info * _info) public {}
}
  • Прямой и косвенный способы инициализации конструктора базового контракта не допускаются.

  • Если производный контракт не передает аргумент (ы) конструктору базового контракта, тогда производный контракт станет абстрактным.