是否可以修改另一个合同中的变量值?
Posted
技术标签:
【中文标题】是否可以修改另一个合同中的变量值?【英文标题】:Is it possible to modify a variable value from another contract? 【发布时间】:2018-09-02 02:52:05 【问题描述】:我可以从here获取有关访问另一个合约变量的信息
但我找不到如何修改另一个合约的变量。
这里是合约A的例子,
contract A
uint public target;
这是合约B的例子
contract B
function edit_A_a() public
A.target = 1; // some kind of this
我想修改合约B中target
变量的值。
另外,假设所有操作都在solidity合约级别执行。
谢谢
【问题讨论】:
您好,欢迎来到 Stack Overflow。请花点时间查看以下操作方法资源:How to Ask 和 Complete Examples。 @lavor 嗨!感谢您对问题的反馈。我添加了一些内容,我还能添加什么? 添加额外信息做得很好。 ?????? 【参考方案1】:将状态变量声明为public
会生成公共getter,但不会生成setter。如果您希望另一个合约修改您的合约的状态变量,您必须自己编写一个函数来执行此操作:
contract A
uint public target;
function setTarget(uint _target) public
target = _target;
contract B
A a = Test(0x123abc...); // address of deployed A
function editA() public
a.setTarget(1);
【讨论】:
谢谢!这真的很有帮助:)【参考方案2】:不,您不能直接编辑合同的变量。那将是一场安全噩梦。
您只能通过接口使用外部合约提供的公共/外部功能。如果该函数本身是 setter
并允许您更改变量,那么只有这样才有可能。
合同 A:
contract A
uint myVariable = 1
function setMyVariable(uint _newVar) public
myVariable = _newVar;
合同 B:
interface A
function getMyVariable() view public returns(uint);
function setMyVariable(uint _newVar) public onlyOwner
A a = A([CONTRACT A ADDRESS HERE])
a.setMyVariable(_newVar);
【讨论】:
以上是关于是否可以修改另一个合同中的变量值?的主要内容,如果未能解决你的问题,请参考以下文章