Нужно ли мне всегда использовать сеттер, поскольку контракты по сути постоянны? - PullRequest
0 голосов
/ 26 июня 2018

Итак, насколько я понимаю, хорошей идеей является использование временных контрактов и повторное развертывание, когда необходимо внести изменения. Давайте предположим, что я управлял умной лампочкой со следующим кодом.

pragma solidity 0.4.24;

contract Lightbulb {
  enum LightState { off, on }
  address public owner;
  LightState light;
  LightState constant defaultChoice = LightState.off;
  uint public cost = 1 ether;

constructor () public {
    owner = msg.sender;
 }


modifier onlyOwner() {
    require(msg.sender == owner);
    _;
 }

function turnOn() public payable {
    require(msg.value == cost);
    light = LightState.on;
 }

function turnOff() public {
  light = LightState.off;
 }

function getState() public view returns (LightState) {
  return light;
 }

}

Должен ли я просто перераспределить контракт, если я хочу изменить стоимость? Кроме того, я мог бы поместить стоимость в конструктор, но если бы я хотел изменить стоимость, мне все равно пришлось бы перераспределить, так что это действительно имеет значение?

1 Ответ

0 голосов
/ 27 июня 2018

Контрактное развертывание очень дорого, и вы, как правило, хотите избежать его, когда это возможно. Вы изменили бы новый контракт при изменении бизнес-правил. Для простой операции изменения состояния, подобной той, что вы описали, вы бы хотели предоставить сеттер для стоимости, которая использует модификатор onlyOwner для ограничения доступа.

...