【问题标题】: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_here 是fooAddress.code。
MySmartContract 实际上只是一个底层地址。这是为该地址指定 ABI 协议的便捷方式。没有它,如果你想在 foo 中调用一个函数,你就必须使用foo.call(abi.encodeWithSignature("someFunction")),这样就不太方便了。
如果您的意图是从foo 获取公共变量,您可以直接使用foo.someVariable()。