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

Hyu*_*woo 6 ethereum solidity

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

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

这是合同A的例子,

contract A {
    uint public target;
}
Run Code Online (Sandbox Code Playgroud)

这是合同B的例子

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

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

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

谢谢

use*_*559 7

将状态变量声明为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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Rey*_*nes 7

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

您只能通过接口使用外部合约提供的公共/外部函数。如果该函数本身是 asetter并且允许您更改变量,那么只有这样才是可能的。

合同甲:

contract A {
    uint myVariable = 1

    function setMyVariable(uint _newVar) public {
        myVariable = _newVar;
    }
}
Run Code Online (Sandbox Code Playgroud)

合同乙:

interface A {
    function getMyVariable() view public returns(uint);
}

function setMyVariable(uint _newVar) public onlyOwner {
    A a = A([CONTRACT A ADDRESS HERE])
    a.setMyVariable(_newVar);
}
Run Code Online (Sandbox Code Playgroud)