首页 > 解决方案 > Solidity 和 Cryptozombies 中的继承:如何部署完整的 OOP 树?

问题描述

我正在研究加密僵尸教程,但遇到了一个概念障碍。似乎“ZombieFactory”合约是一个单例合约,其中包含我们假设的加密僵尸游戏的全局状态,它保存在几个数组和映射中,但我不清楚所有子合约都会指向无需额外工作即可部署到同一个注册表。

子合约通常指的是在其父合约(即 ZombieFactory)中持有的状态,至少在加密僵尸的上下文中,它似乎被假定为单例。这不符合我的 OOP 概念模型,其中子类的每个实例化都包含其所有状态的闭包(包括在其父类中声明的状态变量)。看起来(没有一些仔细的部署),部署在 OOP 层次结构中连接的多个合约(尤其是当该层次结构是树而不是链表时)可能会出现问题。我怎么知道我不是每次都声明不同的实例?

在这种情况下,我如何确保以我的问题第一部分中描述的方式部署合同?是否需要在字段中保存父合约的地址?

标签: ethereumsoliditysmartcontracts

解决方案


您实际上只需要部署最后一个类。假设您有 A,它是 B 的父级,B 是 C 的父级。然后您将 C 部署到网络,但您还将提供 A 和 B 的源代码,因此编译器会将 A、B 和 C 类编译为一个代码块并将其上传到网络。因此,您将只有一个合约实例,其中包含 A、B 和 C 的所有方法/字段。可以将合约作为单独的实例上传,但它们是库并通过组合而不是继承使用。希望能帮助到你。


推荐阅读