Hardhat部署抽象合约ERC1155Facet报NomicLabsHardhatPluginError如何解决
问题根本原因
你声明的ERC1155Facet合约被标记为abstract(抽象合约),Solidity语法规定存在未实现函数的抽象合约无法直接部署,你当前的三层继承链ERC1155Facet -> ERC1155MintBurnPB -> ERC1155PB全是抽象合约,没有任何实际业务逻辑实现,自然无法通过getContractFactory创建部署用的工厂实例。
解决方案
根据你的使用场景二选一即可:
如果你确实需要部署
ERC1155Facet作为Diamond的功能切面:- 去掉
ERC1155Facet合约声明前的abstract关键字 - 在
ERC1155Facet中补全所有继承自上层抽象合约、接口的函数的具体实现,包括IERC1155定义的所有标准方法
修正后的合约示例:
// 去掉abstract关键字 contract ERC1155Facet is ERC1155MintBurnPB { // 补全所有接口要求的方法实现,举例: function balanceOf(address account, uint256 id) public view override returns (uint256) { // 你的业务逻辑 } function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) public override { // 你的业务逻辑 } // 其他需要实现的方法... }- 确认测试代码中
getContractFactory传入的合约名称和修正后的非抽象合约名称一致。
- 去掉
如果你只是想用
ERC1155Facet作为接口调用已经部署完成的合约:
直接按照错误提示修改测试代码即可,不需要走部署流程:// 替换原有的getContractFactory逻辑,填入实际部署的合约地址 const erc1155Facet = await ethers.getContractAt("ERC1155Facet", 已部署的合约地址, signer);
内容的提问来源于stack exchange,提问作者Vakindu
相关产品推荐
相关产品推荐

