Ethereum 稳健性:更改已发布的智能合约中变量的值

Ethereum 稳健性:更改已发布的智能合约中变量的值,ethereum,dynamic-library,solidity,smartcontracts,Ethereum,Dynamic Library,Solidity,Smartcontracts,我试图改变区块链中合同中变量的值。我扣除了它的代码,是这样的: pragma solidity ^0.4.8; contract Trial { address public owner; address public person; uint initialEther; function Trial(address _person) payable { owner = msg.sender; person = _person;

我试图改变区块链中合同中变量的值。我扣除了它的代码,是这样的:

pragma solidity ^0.4.8;
contract Trial {
   address public owner;
   address public person;
   uint initialEther;
   function Trial(address _person) payable {
       owner = msg.sender;
       person = _person;
       initialEther = msg.value;
   }
   modifier only_person() {
       if (msg.sender!=person && tx.origin!=person) throw;
       _;
   }


   function() payable {}  

   bytes4 public signature = bytes4(sha3("libraryFunction()"));
   bool variableToBeChanged = false;
   function libraryInvocation(address libraryAddress) only_person {
       bool doSomething = libraryAddress.delegatecall(signature);
       if (variableToBeChanged) {
           .....
      }
   }
}
假设我有正确的库函数签名,我要做的是更改“variableToBeChanged”的值,以便在if中执行代码。 可能有一种方法可以创建一个具有适当名称的函数的库,并以某种方式插入汇编代码来更改变量的值。但这就像用原子弹杀死蚂蚁一样。我正在寻找一种更简单的方法。
我也知道这份合同是不安全的,我想知道这是否可能,我想知道这对一份合同来说有多大的风险

如果没有函数更改变量,则不可能。一旦合同代码被部署,它就是最终的,不可能进行任何更改。您需要部署一个新合同

通过检查特定钱包地址的msg.sender属性,您可以使用合同控制允许哪个钱包调用该功能

address owner = 0x2FD4...;
if(msg.sender != owner) throw;
        //code afterwards)

我不这么认为。我确信在这样的合同中这是可能的。例如,假设创建如下库:。这将改变一些变量的值。我不知道这是如何工作的。但您不能在部署后更改合同。您需要函数来更改变量。这是因为动态契约使用delegatedcall。这样可以更新合同。我刚刚注意到代码中有一个错误。有一个bool在返回负载时应为bytes32