Ethereum 关于合同调用另一个合同的问题
需要两个相关坚固性问题的帮助Ethereum 关于合同调用另一个合同的问题,ethereum,solidity,Ethereum,Solidity,需要两个相关坚固性问题的帮助 问题1。比如说,我有一份合同叫另一份: contract B { function f1() { ... } } contract A { B b; function f() { b.f1(); } } f1的msg.sender是否与f()相同?当然,它是合同的地址吗 问题2。 喂,我有合同A和B。 我想要 contract A { B b; A(address addr) { b = B(addr
contract B {
function f1() {
...
}
}
contract A {
B b;
function f() {
b.f1();
}
}
f1
的msg.sender
是否与f()
相同?当然,它是合同的地址吗
contract A {
B b;
A(address addr) {
b = B(addr);
}
}
bb=null声明中的代码>,以避免双重初始化,但它不能稳定工作。那么,我如何声明一个成员变量,然后通过地址初始化它呢
f1的msg.sender是否与f()相同?当然,这会是你的地址吗
合同
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);
}
}
谢谢,亚当。但对于第二个问题:当我宣布B;,应该调用默认构造函数,对吗?所以我付了钱…不,构造函数只被调用一次,每个契约只有一个构造函数(从:“创建契约时,其构造函数(与契约同名的函数)执行一次。构造函数是可选的。只允许一个构造函数,这意味着不支持重载。”)。合约变量将初始化为0的内部字节表示形式。看见