【问题标题】:Object composition in SoliditySolidity 中的对象组合
【发布时间】:2018-05-31 04:13:49
【问题描述】:
对象组合在 Solidity 中是如何工作的?我还没有找到一个全面的指南,所有的例子似乎都处理了 hello world 级别的东西或 ERC20 令牌实现。
- 我可以与其他合同的公共财产签订合同吗?
- 这些合约实例能否在合约之间作为函数参数传递?
【问题讨论】:
标签:
oop
solidity
smartcontracts
【解决方案1】:
对这两个问题都是肯定的 - 一个简单的示例如下所示:
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 源代码here,他们使用这种类型的模式。
要挖掘的代码相当多,但您可以查找KittyAuction 合约,其中包含方法setSaleAuctionAddress 和setSiringAuctionAddress。这些函数分别设置了对单独部署的SaleClockAuction和SiringClockAuction合约的引用。