我试图更改区块链合同中变量的值。我已经扣除了它的代码并且是这样的:
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中的代码。 可能有一种方法可以创建一个具有正确名称的函数的库,并以某种方式插入汇编代码来更改变量的值。但它就像用原子弹杀死蚂蚁一样。我正在寻找更简单的方法来做到这一点。 我也知道这份合同不安全,我试图了解这是否可行,我想了解合同的风险程度。
答案 0 :(得分:2)
如果没有更改变量的功能,则无法进行。部署合同代码后,它是最终的,不可能进行任何更改。您需要部署新合同。
您可以通过检查特定钱包地址的msg.sender属性来控制合同允许哪个钱包调用该函数。
address owner = 0x2FD4...;
if(msg.sender != owner) throw;
//code afterwards)