我正在尝试开始使用应该是非常简单的 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)
我按照此处的说明进行了广泛的研究,但不幸的是无法使其正常工作。
我正在尝试在 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) 假设我在 Solidity 智能合约中有一个函数,需要经过一定的时间才能对这个例子采取一些行动,假设一年,为了正确地实现这个函数的单元测试,我现在显然需要等待一年这是不切实际的,所以我的问题是:是否有一种简单的方法来操纵block.timestamp安全帽开发网络内部的价值?
我是 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) 我正在使用 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) 我已经遵循了这个Hardhat 教程。但我正在修改配置文件以使其在RSK上运行上工作,\n并且遇到了一些意外的地址行为。\n\xe2\x80\x8b
\nconst { 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});\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\x8b\n这里是hardhat.config.js我正在使用的设置:\n\xe2\x80\x8b
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) 我正在使用 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) 假设我有一个 Solidity 智能合约MultiToken.sol,正在使用Hardhat开发和测试并部署到RSK网络。\n\xe2\x80\x8b
//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}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\x8b\n我正在测试before部分部署智能合约:\n\xe2\x80\x8b
//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}\nRun 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
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 智能合约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) 我有两个交互的智能合约,正在 Hardhat 中开发/测试并部署到RSK:
\nDelegateCallee带有函数的智能合约getData(),发出一个Received事件:contract DelegateCallee {\n event Received(address sender, uint value);\n function getData() external payable {\n emit Received(msg.sender, msg.value);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nDelegateCaller智能合约使用 Solidity来delegateCall调用:getData()DelegateCalleecontract 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}\nRun Code Online (Sandbox Code Playgroud)\n我正在运行 Hardhat 测试来拦截DelegateCallee. 当我getData() …
hardhat ×10
solidity ×6
ethers.js ×5
rsk ×5
ethereum ×2
javascript ×2
mocha.js ×2
openzeppelin ×2
nft ×1
node.js ×1