// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 < 0.9.0;
contract Receiver{
function getAddress() public view returns(address){
return address(this);
}
}
contract Caller{
Receiver receiver;
constructor(){
receiver = new Receiver();
}
function getAddress() public view returns(address){
return receiver.getAddress();
}
}
这里有一个要点:
new
关键字部署并创建一个新的合约实例。在调用者合约的构造函数中,您实际上正在部署 Receiver
的新实例。我添加另一个函数来获取已部署的 Receiver
实例
contract Caller{
Receiver receiver;
constructor(){
// you created a new Receiver instance
receiver = new Receiver();
}
function getAddress() public view returns(address){
return receiver.getAddress();
}
// this returns the address of deployed Receiver instance
function deployedReceiverAddress() public view returns(address){
return address(receiver);
}
}
您不必在 remix 上部署
Receiver
合约。 Caller
已经部署了一份新合约。上面 Caller
中的两个函数返回相同的结果: