标签: hardhat

使用 ethers js 运行安全帽测试时,合约事件侦听器不会触发

这是一个非常小的存储库来显示该问题:https ://github.com/adamdry/ethers-event-issue

但我也会在这里解释一下。这是我的合同:

//SPDX-License-Identifier: UNLICENSED;
pragma solidity 0.8.4;

contract ContractA {

    event TokensMinted(uint amount);

    function mint(uint amount) public {
        emit TokensMinted(amount);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

import * as chai from 'chai'
import { BigNumber, ContractTransaction } from 'ethers'
import { ethers } from 'hardhat'
import { ContractA, ContractAFactory } from '../typechain'

const expect = chai.expect

describe("Example test", function () {
    it("should fire the event", async function () {
        const [owner] = await ethers.getSigners();

        const contractAFactory = (await ethers.getContractFactory(
            'ContractA',
            owner, …
Run Code Online (Sandbox Code Playgroud)

solidity ethers.js hardhat

6
推荐指数
1
解决办法
6709
查看次数

不变失败:PRICE_BOUNDS 是什么意思?

我正在尝试创建 v3 uniswap 池的实例。我正在使用安全帽和孟买测试网的分支。

当我尝试创建池实例时:

const poolExample = new Pool(
  TokenA,
  TokenB,
  immutables.fee,
  state.sqrtPriceX96.toString(),
  state.liquidity.toString(),
  state.tick
);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error: Invariant failed: PRICE_BOUNDS
Run Code Online (Sandbox Code Playgroud)

堆栈是:

Error: Invariant failed: PRICE_BOUNDS
  at invariant (node_modules/tiny-invariant/dist/tiny-invariant.cjs.js:14:11)
  at new Pool (node_modules/@uniswap/v3-sdk/src/entities/pool.ts:71:5)
  at Context.<anonymous> (test/Uniswap-test.js:134:25)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)
Run Code Online (Sandbox Code Playgroud)

有关追踪错误根源的任何提示吗?

池的参数具有以下值:

fee : 3000
state.sqrtPriceX96 : 0
state.liquidity: 0
state.tick: 0
Run Code Online (Sandbox Code Playgroud)

hardhat uniswap

6
推荐指数
1
解决办法
1031
查看次数

如何计算 RSK 上的智能合约部署价格?

假设我有一个 ERC20 智能合约,正在Hardhat中开发和测试:

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Erc20Token is ERC20, Ownable {
  constructor(uint initialSupply) ERC20("ERC20 Token", "ETK") {
    ERC20._mint(msg.sender, initialSupply);
  }
}
Run Code Online (Sandbox Code Playgroud)

我打算使用以下 Hardhat脚本将其部署到RSKdeploy.js网络:

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Erc20Token is ERC20, Ownable {
  constructor(uint initialSupply) ERC20("ERC20 Token", "ETK") {
    ERC20._mint(msg.sender, initialSupply);
  }
}
Run Code Online (Sandbox Code Playgroud)

要运行此脚本并在RSK 主网上部署我的智能合约,我需要在终端中运行以下命令:

async function deploy() {
  try {
    const initialSupply = 1e6;
    const ERC20TokenFactory = await ethers.getContractFactory('Erc20Token');
    const erc20Token …
Run Code Online (Sandbox Code Playgroud)

solidity rsk ethers.js hardhat

6
推荐指数
1
解决办法
680
查看次数

使用 @nomiclabs/hardhat-waffle 实现装置

在官方华夫饼文档中,您可能会找到实现装置的下一种方法:

import {expect} from 'chai';
import {loadFixture, deployContract} from 'ethereum-waffle';
import BasicTokenMock from './build/BasicTokenMock';

describe('Fixtures', () => {
  async function fixture([wallet, other], provider) {
    const token = await deployContract(wallet, BasicTokenMock, [
      wallet.address, 1000
    ]);
    return {token, wallet, other};
  }

  it('Assigns initial balance', async () => {
    const {token, wallet} = await loadFixture(fixture);
    expect(await token.balanceOf(wallet.address)).to.equal(1000);
  });

  it('Transfer adds amount to destination account', async () => {
    const {token, other} = await loadFixture(fixture);
    await token.transfer(other.address, 7);
    expect(await token.balanceOf(other.address)).to.equal(7);
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,在安全帽上使用该插件时这将不起作用。插件文档没有给出官方说明。

回答如下。

waffle typescript ethereum solidity hardhat

5
推荐指数
1
解决办法
3301
查看次数

在安全帽上部署合约或铸造 NFT 时出现错误:ProviderError: invalid sender

我正在使用 HardHat 在 Polygon (Matic) 上部署合约,它在部署或铸造时大部分时间都有效。但当我从测试网切换到主网时,它通常会中断。

例如:我从主网切换到 rpc-mumbai.maticvigil.com,然后收到错误 ProviderError: invalid sender。

然后我更新了 Hardhat.config.js 以指向 matic-mumbai.chainstacklabs.com,并且我能够毫无错误地铸造和部署合约。

我正在联系以查看这是否是多边形和/或安全帽发生的已知问题?

polygon node.js ethereum hardhat

5
推荐指数
1
解决办法
1万
查看次数

API_URL 和私钥导入的 Hardhat 编译错误

想要遵循基本的NFT 教程,我不得不说,我在编程方面是个菜鸟。我面临的问题是我的 Hardhat.config.js 文件需要一个 API_KEY 和一个私钥,它应该从 process.env 文件导入:

API_URL = "https://ethropsten.alchemyapi.io/v2/UkW3oySI7WxvFwDwopQHPOHajHaWFZFv"
PRIVATE_KEY = "8d33c2613cb63d0dc6305e57..."
Run Code Online (Sandbox Code Playgroud)

Hardhad 配置文件如下所示:

* @type import('hardhat/config').HardhatUserConfig
*/
require('dotenv').config();
require("@nomiclabs/hardhat-ethers");
const { API_URL, PRIVATE_KEY } = process.env;
module.exports = {
  solidity: "0.8.0",
  defaultNetwork: "ropsten",
  networks: {
    hardhat: {},
    ropsten: {
      url: API_URL,
      accounts: [`0x${PRIVATE_KEY}`]
    }
  },
} 
Run Code Online (Sandbox Code Playgroud)

但是每当我尝试编译它并在我的deploy.js 文件中运行它时,我都会收到一条错误消息,该消息本质上告诉我导入是不可能的,如下所示:


  * Invalid value undefined for HardhatConfig.networks.ropsten.url - Expected a value of type string.
  * Invalid value {"accounts":["0xundefined"]} for HardhatConfig.networks.ropsten - Expected a value of type HttpNetworkConfig.
  
To …
Run Code Online (Sandbox Code Playgroud)

javascript solidity nft hardhat

5
推荐指数
1
解决办法
7691
查看次数

在 Brownie、Harhat 或 Truffle 测试套件中部署 Uniswap v2 / Sushiswap 或类似版本

我正在编写一个自动化测试套件,需要针对 Uniswap v2 风格的自动做市商测试功能:进行掉期并使用不同的订单路由。因此,需要部署路由器。

是否有任何现有示例说明如何在 Brownie 中部署可测试的 Uniswap v2 风格交换?因为 Brownie 是智能合约开发者中的少数,那么 Truffle 或 Hardhat 有没有例子呢?

我也在探索使用主网分叉的选项,但我不确定此操作是否太昂贵(慢)而无法用于单元测试。

ethereum ganache hardhat brownie uniswap

5
推荐指数
2
解决办法
2714
查看次数

Hardhat 在单个脚本中编译、部署和验证

我正在使用安全帽来编译、部署和验证以太坊智能合约。目前,我正在手动执行这些命令:

  1. npx hardhat compile

  2. npx hardhat run scripts/deploy.js

等待部署脚本返回合约地址。然后手动将返回的地址复制到verify命令中:

  1. npx hardhat verify 0x<contract-address>

  2. 将编译后的合约 json (abi) 文件复制到文件系统中我的项目目录。

有什么方法可以自动运行所有这些命令吗?我正在考虑使用 shell/bash/powershell 脚本来自动化它,但我不确定这是否是实现这一目标的最佳方法。

非常感谢!

scripting automation blockchain ethereum hardhat

5
推荐指数
1
解决办法
1761
查看次数

npx hardhat 编译意外的标记?

按照这篇文章运行了命令

npm install --dev hardhat @nomicfoundation/hardhat-toolbox
Run Code Online (Sandbox Code Playgroud)

得到了成功的回应。但是当我尝试运行

npx hardhat
Run Code Online (Sandbox Code Playgroud)

得到Unexpected token ?回应。

尝试删除 package-local.json。还尝试删除全局安装。什么都没起作用。

javascript jquery hardhat

5
推荐指数
1
解决办法
6577
查看次数

在 Hedera 测试网部署多个智能合约时,如何解决间歇性的“nonce 已被使用”错误?

当我同时将 2 个智能合约部署到 Hedera Testnet 时,出现以下错误:

nonce has already been used [ See: https://links.ethers.org/v5-errors-NONCE_EXPIRED ]
Run Code Online (Sandbox Code Playgroud)

这种情况间歇性地发生,大约有 20% 的时间发生。它们的发生似乎是不确定的,尽管我无法证实这一点。

我的部署代码是:

        const deploymentSigner: Signer = (await hre.ethers.getSigners())[0];
        // console.log('Deployment signer address', (await deploymentSigner.getAddress()));
        const scDeploymentPromises: Promise<Contract>[] = [];
        for (let idx = 0; idx < scNamesToDeploy.length; ++idx) {
            const scName = scNamesToDeploy[idx];
            const scFactory: ContractFactory =
                await hre.ethers.getContractFactory(scName);
            console.log(`Deploying ${scName} on ${networkName} ...`);
            const sc: Contract = await scFactory.deploy();
            // NOTE deployment with constructor params not needed for these particular SCs
            const …
Run Code Online (Sandbox Code Playgroud)

javascript hedera-hashgraph ethers.js hardhat hedera

5
推荐指数
1
解决办法
2054
查看次数