由于合同本质上是永久性的,我是否需要始终使用二传手?

时间:2018-06-26 20:40:48

标签: ethereum solidity

因此,据我了解,使用临时合同并在需要更改时重新部署是个好主意。假设我用以下代码控制了智能灯泡。

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 :(得分:0)

合同部署非常昂贵,您通常希望尽可能避免这样做。业务规则更改时,您将部署新合同。对于像您所描述的那样的简单状态更改操作,您可能希望提供一个使用onlyOwner修饰符来限制访问的费用设置器。