Solidity 中的对象组合

Object composition in Solidity

对象组合在 Solidity 中是如何工作的?我还没有找到全面的指南,所有示例似乎都涉及 hello world 级别的内容或 ERC20 令牌实现。

  1. 我可以与属于其他合同的 public 物业签订合同吗?
  2. 这些合约实例可以作为函数参数在合约之间传递吗?

对这两个问题都是肯定的 - 一个简单的例子来说明如下:

    contract HelperContract {
        function foo() public pure returns(uint) {
            return(0);
        }
    }

    contract MainContract {
        HelperContract helperContract;

        function MainContract(address helperAddress) public {
            helperContract = HelperContract(helperAddress);
        }

        function bar() public view returns(uint) {
            return helperContract.foo();
        }
    }

部署 HelperContract,然后使用现在部署的 HelperContract 地址创建 MainContract 的实例,我们可以调用 bar,它会依次调用 foo.

您可以将此代码复制并粘贴到 remix 中并很快验证情况是否如此。

如果您想查看 Hello world! 类型以外的真实示例,您可以查看 CryptoKitties source here,他们在其中使用了这种类型的模式。

需要挖掘的代码相当多,但您可以查找 KittyAuction 合同,其中包含方法 setSaleAuctionAddresssetSiringAuctionAddress。这些函数分别设置对单独部署的 SaleClockAuctionSiringClockAuction 合约的引用。