是否可以修改另一个合约的变量值?
Is it possible to modify a variable value from another contract?
我可以从 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 合约级别执行。
谢谢
将状态变量声明为 public
会生成 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);
}
}
不,您不能直接编辑合同的变量。那将是一场安全噩梦。
您只能通过接口使用外部合约提供的public/external功能。如果该函数本身是一个 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);
}
我可以从 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 合约级别执行。
谢谢
将状态变量声明为 public
会生成 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);
}
}
不,您不能直接编辑合同的变量。那将是一场安全噩梦。
您只能通过接口使用外部合约提供的public/external功能。如果该函数本身是一个 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);
}