标签: hardhat

VScode Solidity 扩展 - 找不到 openzepplin 导入

我正在尝试开始使用应该是非常简单的 Solidity 合同,但是 VSCode 给我带来了困难。我正在使用 Juan Blancos solidity 插件,但 VSCode 找不到 openzepplin 导入

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

错误是:

找不到源“@openzeppelin/contracts/token/ERC20/ERC20.sol”:不支持文件导入回调

即使 vscode 显示红色波浪线,我也可以通过hardhat compile成功编译

如果我将路径更改为

import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";

VScode 停止抱怨,但随后我无法通过 hardhard 进行编译,错误是:

未找到源“node_modules/@openzeppelin/contracts/security/Pausable.sol”:允许目录之外的文件。

我的用户和工作区 Solidity 扩展的 VSCode 设置是:

"solidity.packageDefaultDependenciesContractsDirectory": "contracts",
"solidity.packageDefaultDependenciesDirectory": "node_modules"
Run Code Online (Sandbox Code Playgroud)

这对应于我的项目结构

root 
 |_ contracts
    |_ MyToken.sol
 |_ node_modules
    |_ @openzepplin
Run Code Online (Sandbox Code Playgroud)

我按照此处的说明进行了广泛的研究,但不幸的是无法使其正常工作。

visual-studio-code solidity openzeppelin hardhat

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

如何在 Node.js 应用程序中使用 ethers.js Contract.on() 监听来自智能合约的事件?

我正在尝试在 node.js 应用程序中使用 ethers.js (不是 web3)监听 USDT 合约 Transfer 函数发出的事件。

当我运行脚本时,代码运行没有错误,然后快速退出。我希望获得事件日志。我不确定我错过了哪一步。

我通过调用 getOwner() 方法并控制台记录结果来测试此脚本,这工作正常,所以我与主网的连接正常。

我正在使用炼金术网络套接字。

我的index.js 文件

const hre = require("hardhat");
const ethers = require('ethers');
const USDT_ABI = require('../abis/USDT_ABI.json')

async function main() {

const usdt = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
const provider = new ethers.providers.WebSocketProvider("wss://eth-mainnet.ws.alchemyapi.io/v2/MY_API");
const contract = new ethers.Contract(usdt, USDT_ABI, provider)

contract.on('Transfer', (from, to, value) => console.log(from, to, value))

}

main()
  .then(() => process.exit(0))
  .catch(error => {
    console.error(error);
    process.exit(1);
  });
Run Code Online (Sandbox Code Playgroud)

我的 Hardhat.config.js 文件


    require("@nomiclabs/hardhat-waffle");
require('dotenv').config()

// This is a sample Hardhat task. …
Run Code Online (Sandbox Code Playgroud)

javascript node.js ethers.js hardhat

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

安全帽测试中的时间操纵

假设我在 Solidity 智能合约中有一个函数,需要经过一定的时间才能对这个例子采取一些行动,假设一年,为了正确地实现这个函数的单元测试,我现在显然需要等待一年这是不切实际的,所以我的问题是:是否有一种简单的方法来操纵block.timestamp安全帽开发网络内部的价值?

solidity hardhat

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

当我使用 ETH 部署 NFT 时出现错误

我是 NFT 新手,我正在尝试创建测试 NFT,当我尝试部署该 NFT 时,我收到此错误,insufficient funds for intrinsic transaction cost即使我的帐户中有 1 ETH 余额,但我已附加了它的完整代码,可以有人请帮助我,如何解决这个问题?MyNFT.sol

//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyNFT is ERC721URIStorage, Ownable {   
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("MyNFT", "NFT") {}

    function mintNFT(address recipient, string memory tokenURI)
        public onlyOwner
        returns (uint256)
    {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(recipient, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}
Run Code Online (Sandbox Code Playgroud)

安全帽.config.js

/**

* @type import('hardhat/config').HardhatUserConfig …
Run Code Online (Sandbox Code Playgroud)

ethereum solidity openzeppelin nft hardhat

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

如何通过 Hardhat 测试 RSK 测试网部署的智能合约?

我正在使用 Hardhat 在 RSK 测试网上部署和测试我的智能合约。这是hardhat.config.js我正在使用的设置:

require('@nomiclabs/hardhat-waffle');

const mnemonic = fs.readFileSync('.mnemonic', 'utf8').toString().trim();
const minimumGasPriceTestnet = 65164000;
const TESTNET_GAS_MULT = 1;
module.exports = {
  solidity: '0.7.3',
  defaultNetwork: 'rsktestnet',
  networks: {
    hardhat: {},
    rsktestnet: {
      chainId: 31,
      url: 'https://public-node.testnet.rsk.co/',
      gasPrice: Math.floor(minimumGasPriceTestnet * TESTNET_GAS_MULT),
      gasMultiplier: TESTNET_GAS_MULT,
      accounts: {
        mnemonic,
        initialIndex: 0,
        count: 10,
      },
    },
  },
};

Run Code Online (Sandbox Code Playgroud)

不幸的是,我的测试失败,并且收到以下错误消息:

Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/ales/Work/IOV/demo-code-snippets/hardhat-tutorial/ethers-waffle/test/Token.js)
          at listOnTimeout …
Run Code Online (Sandbox Code Playgroud)

javascript mocha.js rsk hardhat

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

如何从 Hardhat 上的助记词生成匹配的 RSK 帐户?

我已经遵循了这个Hardhat 教程。但我正在修改配置文件以使其在RSK上运行上工作,\n并且遇到了一些意外的地址行为。\n\xe2\x80\x8b

\n
const { expect } = require(\'chai\');\n\xe2\x80\x8b\ndescribe(\'Token contract\', () => {\n  it(\'Deployment should assign the total supply of tokens to the owner\', async () => {\n    const [owner] = await ethers.getSigners();\n    console.log(\'Smart contract owner: \', owner.address);\n      \n    const Token = await ethers.getContractFactory(\'Token\');\n\xe2\x80\x8b\n    const hardhatToken = await Token.deploy();\n    \n    const ownerBalance = await hardhatToken.balanceOf(owner.address);\n    expect(await hardhatToken.totalSupply()).to.equal(ownerBalance);\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b\n这里是hardhat.config.js我正在使用的设置:\n\xe2\x80\x8b

\n
require(\'@nomiclabs/hardhat-waffle\');\nconst fs = require(\'fs\');\n\xe2\x80\x8b\nconst minimumGasPriceTestnet = 65164000;\nconst TESTNET_GAS_MULT = 1;\nconst mnemonic = fs.readFileSync(\'.secret\', …
Run Code Online (Sandbox Code Playgroud)

rsk hardhat

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

如何在测试之间重置 Hardhat 的主网分叉?

我正在使用 Hardhat 的主网分支在 Hardhat 中编写单元测试,但是一项测试的结果似乎会影响未来的测试并导致我的断言失败。我正在使用 Alchemy 和区块 #14189520 进行分叉。

例如:

it("Test 1", async function () {
    const provider = ethers.provider;
    const [owner, addr1] = await ethers.getSigners();

    // Assert owner has 1000 ETH to start
    ownerBalance = await provider.getBalance(owner.address);
    expectedBalance = ethers.BigNumber.from("10000000000000000000000");
    assert(ownerBalance.eq(expectedBalance));

    // Send 1 Ether to addr1
    sendEth(1, owner, addr1);
});

it("Test 2", async function () {
    const provider = ethers.provider;
    const [owner, addr1] = await ethers.getSigners();

    // ownerBalance is now only 999 Eth because of previous test
    ownerBalance …
Run Code Online (Sandbox Code Playgroud)

mocha.js ethereum ethers.js hardhat

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

智能合约部署时是否可以充值?

假设我有一个 Solidity 智能合约MultiToken.sol,正在使用Hardhat开发和测试并部署到RSK网络。\n\xe2\x80\x8b

\n
//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.0;\n\xe2\x80\x8b\nimport "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";\n\xe2\x80\x8b\ncontract MultiToken is ERC1155 {\n    constructor(string memory uri) ERC1155(uri) {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b\n我正在测试before部分部署智能合约:\n\xe2\x80\x8b

\n
//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.0;\n\xe2\x80\x8b\nimport "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";\n\xe2\x80\x8b\ncontract MultiToken is ERC1155 {\n    constructor(string memory uri) ERC1155(uri) {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b\n我希望能够在部署交易期间将一些RBTC转移到我的智能合约地址。是否可以在部署时使用 Hardhat 和 Ether 充值智能合约的余额?\n\xe2\x80\x8b\n具体来说,我可以通过单个交易来完成此操作吗?\n\xe2\x80\ x8b\n供参考,这是我的hardhat.config.js:\n\xe2\x80\x8b

\n
const { expect } = require(\'chai\');\nconst { ethers } = require(\'hardhat\');\n\xe2\x80\x8b\ndescribe(\'MultiToken\', () => {\n  let multiToken;\n\xe2\x80\x8b\n  const uri = \'https://token-cdn-domain/{id}.json\';\n\xe2\x80\x8b\n  before(async () => …
Run Code Online (Sandbox Code Playgroud)

solidity rsk ethers.js hardhat

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

如何通过 Hardhat 测试 Solidity Fallback() 函数?

我有一个 Solidity 智能合约Demo,正在Hardhat中开发并在RSK Testnet上进行测试。

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

contract Demo {
    event Error(string);
    fallback() external {
      emit Error("call of a non-existent function");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想确保调用该函数并发出fallback事件。Error为此,我尝试nonExistentFunction在智能合约上调用:

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

contract Demo {
    event Error(string);
    fallback() external {
      emit Error("call of a non-existent function");
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,HarhatTypeError在实际连接到 RSK 上的智能合约之前就抛出了一个问题:

  Demo
    1) should invoke the fallback function


  0 passing (555ms)
  1 failing

  1) Demo
       should invoke …
Run Code Online (Sandbox Code Playgroud)

solidity rsk ethers.js hardhat

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

为什么通过“delegateCall”调用的智能合约函数发出的事件会消失?

我有两个交互的智能合约,正在 Hardhat 中开发/测试并部署到RSK

\n
    \n
  1. DelegateCallee带有函数的智能合约getData(),发出一个Received事件:
  2. \n
\n
contract DelegateCallee {\n  event Received(address sender, uint value);\n  function getData() external payable {\n    emit Received(msg.sender, msg.value);\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. DelegateCaller智能合约使用 Solidity来delegateCall调用:getData()DelegateCallee
  2. \n
\n
contract DelegateCaller {\n  address callee;\n\n  constructor(address _callee) {\n    callee = _callee;\n  }\n\n  function delegateCallGetData() external payable {\n    (bool success, ) = callee.delegatecall(\n      abi.encodeWithSelector(DelegateCallee.getData.selector)\n    );\n    require(success, "delegate call failed");\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我正在运行 Hardhat 测试来拦截DelegateCallee. 当我getData() …

solidity rsk ethers.js hardhat

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