我从事 Hardhat 项目已经有一段时间了。
一段时间后,当我运行
npx hardhat node
启动 HH 服务器时,出现以下错误:

我尝试研究该错误并在安全帽网站上找到了这个
HH12: Hardhat is not installed or installed globally
You tried to run Hardhat from a global installation or not installing it at all. This is not supported.
Please install Hardhat locally using npm or Yarn, and try again.
Run Code Online (Sandbox Code Playgroud)
有趣的是,我创建了一个新的 HH 项目并重新安装了所有内容
,然后将我的代码导入到新项目中,这似乎解决了问题......
但过了一段时间,问题又开始了。
我不能每次发生这种情况时都创建一个新项目。
我已经被困了好几天了,非常感谢任何帮助。
操作系统:windows10
在尝试建立一个基本的自托管单元测试环境(和 CI)来测试这个 Chainlink VRF 随机数合约时时,我在如何在本地模拟任何相关的区块链/测试网方面遇到了一些困难。
\n例如,我发现这个测试 Chainlinks VRF 的存储库。但是,对于默认部署,它建议/需要免费,KOVAN_RPC_URL例如来自 Infura 的站点,甚至对于“本地部署”,它建议/需要免费MAINNET_RPC_URL例如来自 Alchemy 的站点。
我采用了waffle框架的单元测试环境,描述如下:
\nsrc____AmIRichAlready.sol\n |____RandomNumberConsumer.sol\n |\ntest____AmIRichAlready.test.ts\n |____mocha.opts\npackage.json\ntsconfig.json\nwaffle.json\nyarn.lock\nRun Code Online (Sandbox Code Playgroud)\nAmIRichAlready.sol
\npragma solidity ^0.6.2;\n\ninterface IERC20 {\n function balanceOf(address account) external view returns (uint256);\n}\n\ncontract AmIRichAlready {\n IERC20 private tokenContract;\n uint public richness = 1000000 * 10 ** 18;\n\n constructor (IERC20 _tokenContract) public {\n tokenContract = _tokenContract;\n }\n\n function check() public view returns …Run Code Online (Sandbox Code Playgroud) PriceFeed中获取最新价格的代码是:
pragma solidity ^0.6.7;
import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
contract PriceConsumerV3 {
AggregatorV3Interface internal priceFeed;
/**
* Network: Kovan
* Aggregator: ETH/USD
* Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
*/
constructor() public {
priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
}
/**
* Returns the latest price
*/
function getThePrice() public view returns (int) {
(
uint80 roundID,
int price,
uint startedAt,
uint timeStamp,
uint80 answeredInRound
) = priceFeed.latestRoundData();
return price;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在 function 中getThePrice,为什么 Chainlink在价格上int price使用类型?int为什么不直接uint打字呢?Chainlink PriceFeed 是否有可能获得负价格?
我最终尝试在 remix IDE 中运行此代码,我使用 0.6.6 版本的 Solidity 运行此代码并遇到了此错误。我也尝试过使用其他版本,例如 0.8 和 0.6。
// SPDX-License-Identifier: MIT
pragma solidity =0.8.7;
import "@chainlink/contracts/src/v0.6/vendor/SafeMathChainlink.sol";
contract myContract{
using SafeMathChainlink for uint256;
mapping(address => uint256) public payTo;
function Payment() public payable {
uint256 minimumUSD = 50 * 10 ** 18;
require(getConversionRate(msg.value) >= minimumUSD, "Doesn't satisfy the minimum condition");
payTo[msg.sender] += msg.value;
}
}
Run Code Online (Sandbox Code Playgroud) 我试图通过在下面的代码中uint timeStamp键入来进行打印:return timeStamp;return price;
pragma solidity ^0.6.7;
import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
contract PriceConsumerV3 {
AggregatorV3Interface internal priceFeed;
/**
* Network: Kovan
* Aggregator: BTC/USD
* Address: 0x6135b13325bfC4B00278B4abC5e20bbce2D6580e
*/
constructor() public {
priceFeed = AggregatorV3Interface(0x6135b13325bfC4B00278B4abC5e20bbce2D6580e);
}
/**
* Returns the latest price
*/
function getThePrice() public view returns (int) {
(
uint80 roundID,
int price,
uint startedAt,
uint timeStamp,
uint80 answeredInRound
) = priceFeed.latestRoundData();
return price;
return timeStamp;
}
}
Run Code Online (Sandbox Code Playgroud)
当我在 Remix Compiler 上编译上面的代码时,它回复:
类型错误:返回参数类型 uint256 无法隐式转换为预期类型(第一个返回变量的类型)int256。返回时间戳;^--------^
我倾向于认为我只需要输入int256 …
当我将版本更改为 0.8 时出现错误,但在 0.6 上工作正常,我如何查看最新版本?,我尝试从 npm install @chainlink/contracts --save 下载,但仅适用于模拟模式。
这是我的仓库: https: //github.com/irwingtello/lottery
正在编译合约... Solc 版本:0.8.9 优化器:启用运行:200 EVM 版本:Istanbul CompilerError:solc 返回以下错误:
ParserError:找不到源“C:/Users/irwin/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”:找不到文件。--> 合同/Lottery.sol:4:1: | 4 | 导入“@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
错误:无法加载项目
在我的 Ubuntu 中运行 geth 中的私有链节点和 Chainlink 节点后,我想测试 Chainlink Any API 的功能(https://docs.chain.link/any-api/get-request/examples/single-word -响应,单字响应)。
我运行这些命令来运行节点:
## SHELL1
cd ~/myChain/localChain/node1 && geth --datadir data --gcmode "archive" --syncmode=full --networkid 4190 --http --http.addr 0.0.0.0 --http.port 6789 --http.corsdomain "*" --ws --port 30305 --allow-insecure-unlock --unlock edd96278959aA8B27DdC14FD70ACb31f7e7beC2F --keystore ./keystore console
## SHELL2
cd ~/myChain/chainlink/.chainlink && docker run --net host -u=root -p 6688:6688 -v ~/.chainlink:/chainlink -it --env-file=.env smartcontract/chainlink:1.11.0 local n
Run Code Online (Sandbox Code Playgroud)
我成功部署了我的LinkToken合约,operator并在我的 Chainlink 节点 UI Operator 中创建了一个新作业(GET>uint256)。它们如下:
链克.sol
pragma solidity ^0.4.11;
import …Run Code Online (Sandbox Code Playgroud) 现在我正在使用@openzeppelin/truffle-upgrades将基本智能合约转换为可升级的智能合约
因此,我遵循了文档中的所有必需步骤,但仍然存在一个问题:
Truffle-Upgrades 要求我用初始化器替换构造函数,这对我来说很好,但不适用于导入到我自己的智能合约中的智能合约,示例:
pragma solidity 0.6.6;
import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";
contract Sample is VRFConsumerBase {
address private owner;
bytes32 internal keyHash;
uint256 internal fee;
constructor(address _owner)
VRFConsumerBase(
0xa555fC018435bef5A13C6c6870a9d4C11DEC329C, // VRF Coordinator
0x84b9B910527Ad5C03A9Ca831909E21e236EA7b06 // LINK Token
) public
{
keyHash = 0xcaf3c3727e033261d383b315559476f48034c13b18f8cafed4d871abe5049186;
fee = 0.1 * 10 ** 18; // 0.1 LINK (Varies by network)
owner = _owner;
}
...
Run Code Online (Sandbox Code Playgroud)
因此松露抱怨道:
../@chainlink/contracts/src/v0.6/VRFConsumerBase.sol:182: Contract `VRFConsumerBase` has a constructor
Define an initializer instead
Run Code Online (Sandbox Code Playgroud)
由于它是第三方软件包,我无法替换它:)
有什么架构技巧/配置吗?
我浏览了几乎所有关于 chainlink/truffle 的文档,但没有找到这个问题的解决方案。
谢谢!
更新1:
首先,我将 VRFConsumerBase 合约修改为:(我还删除了注释以使其简短..) …
我在 Visual Studio Code 中使用布朗尼编译时遇到问题,因为我收到一条信息:无法找到给定模式的文件。
这是我得到的错误:

Hardhat 不支持 https 导入。使用 npm 安装 openzeppelin 和 chainlink 并使用 @openzeppelin/@chainlink 后,我们会遇到 pragma/compiler 版本问题,即使 Hardhat.config.js 中的编译器版本不同,甚至覆盖。如何使用安全帽和这些导入进行开发和编译?
chainlink ×10
solidity ×6
ethereum ×2
random ×2
blockchain ×1
brownie ×1
go-ethereum ×1
hardhat ×1
numbers ×1
python ×1
truffle ×1
unit-testing ×1