是否可以修改另一个合同中的变量值?

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);

【讨论】:

以上是关于是否可以修改另一个合同中的变量值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 中的方法更改另一个范围内的变量值

python - 如何将一个类方法中的变量值用于python中的另一个类[关闭]

如何在后续推送通知中保留通知服务扩展中的变量值

批处理文件中的多行 IF 语句内的变量值未递增 [重复]

如何在Visual Studio中检查函数末尾的变量值

怎么在debug时显示全部的变量值