关于合同调用另一份合同的问题

时间:2017-12-17 19:06:05

标签: ethereum solidity

需要帮助解决两个相关的Solidity问题。

  1. 问题1.说,我有一份合同叫另一个:

    contract B {
      function f1() {
         ...
      }
    }
    
    contract A {
      B b;
    
      function f() {
        b.f1();
      }
    }
    
  2. msg.sender f1f()相同吗?它会是合同的地址A吗?

    1. 问题2。 说,我有合同A和B. 我想要

      contract A {
        B b;
      
        A(address addr) { 
          b = B(addr); 
        }
      }
      
    2. 在其他语言中,我会在声明中使用B b = null;来避免双重初始化,但它在Solidity中不起作用。那么如何声明成员变量然后按地址初始化呢?

1 个答案:

答案 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);
    }
}