这是一个非常小的存储库来显示该问题: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) 我正在尝试创建 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) 假设我有一个 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) 在官方华夫饼文档中,您可能会找到实现装置的下一种方法:
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)
但是,在安全帽上使用该插件时这将不起作用。插件文档没有给出官方说明。
回答如下。
我正在使用 HardHat 在 Polygon (Matic) 上部署合约,它在部署或铸造时大部分时间都有效。但当我从测试网切换到主网时,它通常会中断。
例如:我从主网切换到 rpc-mumbai.maticvigil.com,然后收到错误 ProviderError: invalid sender。
然后我更新了 Hardhat.config.js 以指向 matic-mumbai.chainstacklabs.com,并且我能够毫无错误地铸造和部署合约。
我正在联系以查看这是否是多边形和/或安全帽发生的已知问题?
想要遵循基本的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) 我正在编写一个自动化测试套件,需要针对 Uniswap v2 风格的自动做市商测试功能:进行掉期并使用不同的订单路由。因此,需要部署路由器。
是否有任何现有示例说明如何在 Brownie 中部署可测试的 Uniswap v2 风格交换?因为 Brownie 是智能合约开发者中的少数,那么 Truffle 或 Hardhat 有没有例子呢?
我也在探索使用主网分叉的选项,但我不确定此操作是否太昂贵(慢)而无法用于单元测试。
我正在使用安全帽来编译、部署和验证以太坊智能合约。目前,我正在手动执行这些命令:
npx hardhat compile
npx hardhat run scripts/deploy.js
等待部署脚本返回合约地址。然后手动将返回的地址复制到verify命令中:
npx hardhat verify 0x<contract-address>
将编译后的合约 json (abi) 文件复制到文件系统中我的项目目录。
有什么方法可以自动运行所有这些命令吗?我正在考虑使用 shell/bash/powershell 脚本来自动化它,但我不确定这是否是实现这一目标的最佳方法。
非常感谢!
按照这篇文章运行了命令
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。还尝试删除全局安装。什么都没起作用。
当我同时将 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) hardhat ×10
ethereum ×4
solidity ×4
ethers.js ×3
javascript ×3
uniswap ×2
automation ×1
blockchain ×1
brownie ×1
ganache ×1
hedera ×1
jquery ×1
nft ×1
node.js ×1
polygon ×1
rsk ×1
scripting ×1
typescript ×1
waffle ×1