需要帮助解决两个相关的Solidity问题。
问题1.说,我有一份合同叫另一个:
contract B {
function f1() {
...
}
}
contract A {
B b;
function f() {
b.f1();
}
}
msg.sender
f1
与f()
相同吗?它会是合同的地址A
吗?
问题2。 说,我有合同A和B. 我想要
contract A {
B b;
A(address addr) {
b = B(addr);
}
}
在其他语言中,我会在声明中使用B b = null;
来避免双重初始化,但它在Solidity中不起作用。那么如何声明成员变量然后按地址初始化呢?
答案 0 :(得分:3)
f1的msg.sender与f()相同吗?它将是一个地址 合同A?
msg.sender
将是合约A的地址。如果您想引用原始来电者,请使用tx.origin
。
那么如何声明成员变量然后通过初始化它 地址?
声明成员变量时,无需担心初始化。 Solidity中的所有变量都具有默认值。你可以遵循这样的事情:
contract B {
address sender;
function B(address addr) {
sender = addr;
}
}
contract A {
B b;
function A(){
b = B(msg.sender);
}
}