我是否需要始终使用 setter 因为合同本质上是永久性的?
Do I need to always use a setter since contracts are essentially permanent?
因此,据我了解,使用临时合同并在需要更改时重新部署是个好主意。假设我使用以下代码控制了一个智能灯泡。
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 作为成本,使用 onlyOwner
修饰符来限制访问。
因此,据我了解,使用临时合同并在需要更改时重新部署是个好主意。假设我使用以下代码控制了一个智能灯泡。
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 作为成本,使用 onlyOwner
修饰符来限制访问。