首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Hardhat编译外部契约

如何使用Hardhat编译外部契约
EN

Ethereum用户
提问于 2021-11-26 13:58:48
回答 2查看 1.8K关注 0票数 5

我想在我的测试中使用node_modules中的一个契约,但是我得到了:HardhatError: HH700: Artifact for contract "SomeContract" not found.

这可能是因为/contracts目录下的任何文件都不使用它,因此不会生成工件。有办法在node_module中编译这些合同吗?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2021-11-26 14:07:05

有两种解决办法。

1.进口合同

这就是我在我的个人合同库里做的

代码语言:javascript
复制
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.4;

import "@prb/math/contracts/PRBMathUD60x18.sol";

正如您所看到的,所有这些都是从npm包中导入外部契约,这样的话,硬件就会捡起它并为它生成一个工件。

2.使用硬帽子依赖项编译器

这是一个由尼克巴里开发的安全帽插件。安装:

代码语言:javascript
复制
yarn add --dev hardhat-dependency-compiler

并将以下内容添加到您的硬帽子配置文件中:

代码语言:javascript
复制
dependencyCompiler: {
  paths: [
    'path/to/external/Contract.sol',
  ],
}

不管它有什么价值,我更喜欢第一个解决方案。它不那么冗长,因为我没有在我的package.json文件中添加另一个节点包。

票数 8
EN

Ethereum用户

发布于 2022-10-05 22:06:28

如果您的node_modules中的契约已经包含已编译的输出(即abi和字节码),那么您可以将这些已编译的输出文件设置为测试文件中的变量,并在通过ethers方法设置契约对象时将abi和字节码作为参数传递。

例如,在使用npm包@ensdomains/ens-contracts时,我已经这样做了:

代码语言:javascript
复制
const { expect } = require('chai');
const { ethers } = require('hardhat');
const ensRegistryCompiled = requires('@ensdomains/ens-contracts/artifacts/contracts/registry/ENSRegistry.sol/ENSRegistry.json');

describe('test', () => {

before(async () => {
[deployer] = await ethers.getSigners();

const ENSRegistryFactory = await ethers.getContractFactory(ensRegistryCompiled.abi, ensRegistryCompiled.bytecode);
const ENSRegistry = await ENSRegistryFactory.deploy();
await ENSRegistry.deployed();

/// rest of your test file
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/114376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档