You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hardhat部署抽象合约ERC1155Facet报NomicLabsHardhatPluginError如何解决

问题根本原因

你声明的ERC1155Facet合约被标记为abstract(抽象合约),Solidity语法规定存在未实现函数的抽象合约无法直接部署,你当前的三层继承链ERC1155Facet -> ERC1155MintBurnPB -> ERC1155PB全是抽象合约,没有任何实际业务逻辑实现,自然无法通过getContractFactory创建部署用的工厂实例。

解决方案

根据你的使用场景二选一即可:

  • 如果你确实需要部署ERC1155Facet作为Diamond的功能切面:

    1. 去掉ERC1155Facet合约声明前的abstract关键字
    2. 在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 {
            // 你的业务逻辑
        }
        // 其他需要实现的方法...
    }
    
    1. 确认测试代码中getContractFactory传入的合约名称和修正后的非抽象合约名称一致。
  • 如果你只是想用ERC1155Facet作为接口调用已经部署完成的合约:
    直接按照错误提示修改测试代码即可,不需要走部署流程:

    // 替换原有的getContractFactory逻辑,填入实际部署的合约地址
    const erc1155Facet = await ethers.getContractAt("ERC1155Facet", 已部署的合约地址, signer);
    

内容的提问来源于stack exchange,提问作者Vakindu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:54:01