Solidity 中的对象组合
Object composition in Solidity
对象组合在 Solidity 中是如何工作的?我还没有找到全面的指南,所有示例似乎都涉及 hello world 级别的内容或 ERC20 令牌实现。
- 我可以与属于其他合同的 public 物业签订合同吗?
- 这些合约实例可以作为函数参数在合约之间传递吗?
对这两个问题都是肯定的 - 一个简单的例子来说明如下:
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
合同,其中包含方法 setSaleAuctionAddress
和 setSiringAuctionAddress
。这些函数分别设置对单独部署的 SaleClockAuction
和 SiringClockAuction
合约的引用。
对象组合在 Solidity 中是如何工作的?我还没有找到全面的指南,所有示例似乎都涉及 hello world 级别的内容或 ERC20 令牌实现。
- 我可以与属于其他合同的 public 物业签订合同吗?
- 这些合约实例可以作为函数参数在合约之间传递吗?
对这两个问题都是肯定的 - 一个简单的例子来说明如下:
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
合同,其中包含方法 setSaleAuctionAddress
和 setSiringAuctionAddress
。这些函数分别设置对单独部署的 SaleClockAuction
和 SiringClockAuction
合约的引用。