繁体   English   中英

Solidity:更改已发布的智能合约中变量的值

[英]Solidity: change a the value of a variable in a smart contract already published

我正在尝试更改区块链中合同中变量的值。 我已经扣除了它的代码,是这样的:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM