Ethereum 我是否需要始终使用setter,因为合同基本上是永久性的?

Ethereum 我是否需要始终使用setter,因为合同基本上是永久性的?,ethereum,solidity,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 ethe

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

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

}

如果我想改变成本,我应该重新部署合同吗?此外,我可以将成本放在构造函数中,但是如果我想更改成本,我仍然必须重新部署,所以这真的很重要吗?

契约部署非常昂贵,您通常希望尽可能避免它。当业务规则更改时,您将部署一个新合同。对于您描述的简单状态更改操作,您可能希望为成本提供一个setter,该setter使用
onlyOwner
修饰符来限制访问。

让控制灯的打开和关闭的合同从另一个合同继承成本函数的所有权和更改是否过份?如果您有重用的理由,请确定。另一方面,这并不重要。部署的版本将几乎相同。好的,我考虑过安全性方面的好处,但是如果没有,我将在这个例子中避免它,因为我是在它的基础上构建的。谢谢你的回答。