solidity_get合约地址问题

问题描述 投票:0回答:1
    // 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();
    }
  
}

我的问题是:在 Remix 上测试上述代码时,我无法获得相同的地址,为什么?这是SS: 非常感谢!

ethereum blockchain solidity smartcontracts remix
1个回答
0
投票

这里有一个要点:

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
中的两个函数返回相同的结果:

© www.soinside.com 2019 - 2024. All rights reserved.