繁体   English   中英

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

[英]Is it possible to modify a variable value from another contract?

我可以从这里获得有关访问另一个合同变量的信息

但我找不到如何修改另一个合同的变量。

这是合同A的例子,

contract A {
    uint public target;
}

这是合同B的例子

contract B {
    function edit_A_a() public {
        A.target = 1;  // some kind of this
    }
}

我想修改合同B中target变量的值。

此外,假设所有操作都在可靠性合同级别执行。

谢谢

将状态变量声明为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);
    }
}

不,您无法直接编辑合同的变量。 那将是一场安全噩梦。

您只能通过接口使用外部合同提供的公共/外部功能。 如果该函数本身是一个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);
}

暂无
暂无

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

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