【问题标题】:Get Smart Contract instance from its address从其地址获取智能合约实例
【发布时间】:2022-11-13 01:48:09
【问题描述】:

在 Solidity 中,给定一个名为 foo 的智能合约实例

MySmartContract foo = new MySmartContract()

我可以使用address(foo) 获取这个智能合约实例的地址

address fooAdress = address(foo)

我如何取回foo 对象,仅给出其地址fooAdress

我期待类似的东西:

MySmartContract originalFoo = some_function_goes_here(fooAdress)

【问题讨论】:

    标签: blockchain ethereum solidity smartcontracts


    【解决方案1】:

    你也需要合约的接口。如果您没有合约代码并且您想调用合约方法,但如果您没有代码,您如何知道要调用哪些方法?

    interface InterfaceA {
        function count() external view returns (uint256);
        function increment() external;
    }
    

    你知道合约地址

    InterfaceA a = InterfaceA(addressA);
    

    a 是合约实例

    【讨论】:

      【解决方案2】:

      除非您的意图是获取合约的字节码,否则您无法获取“对象”。在这种情况下,some_function_goes_herefooAddress.code

      MySmartContract 实际上只是一个底层地址。这是为该地址指定 ABI 协议的便捷方式。没有它,如果你想在 foo 中调用一个函数,你就必须使用foo.call(abi.encodeWithSignature("someFunction")),这样就不太方便了。

      如果您的意图是从foo 获取公共变量,您可以直接使用foo.someVariable()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-01
        • 2017-08-19
        • 2021-10-18
        • 2012-07-12
        • 2022-12-06
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        相关资源
        最近更新 更多