Как установить адрес владельца при развертывании смарт-контракта

#ethereum #solidity

#ethereum #надежность

Вопрос:

Вот простой смарт-контракт с owner :

 pragma ^0.7.2

contract simple {
  address owner;

  constructor() public {
    //do something 
  }

  modifier() {
    require(
      owner == msg.sender,
      'No sufficient right'
    )
  }

  function setOwner() ownerOnly external {
     owner = msg.sender;
  }
}
  

Мой вопрос в том, как безопасно установить адрес владельца на адрес владельца смарт-контракта?

Ответ №1:

Вы должны установить адрес владельца непосредственно в конструкторе. поле msg.sender будет представлять создателя контракта.

 constructor ()  {
       owner = msg.sender;
   }
  

И ваша функция SetOwner не имеет большого смысла, потому что даже в случае, если владелец был установлен при создании, его нельзя изменить. Модификатор отклонит все транзакции, которые отправляются не от владельца. В противном случае он просто переназначит владельца на msg.sender, который также является владельцем.
Это должно выглядеть так:

 function setOwner(address newOwner) ownerOnly external {
     owner = newOwner;
  }