我会寻找一个替代,但不能使用以太模块将使我疯狂的道路。代码是从帕特里克的坚实Javascript课程,NFT部分,第14课复制的。
下面的代码应该在我点击console.log(“-”)行之后,将模拟部署到hardhat的本地ganache链中,并打印出图像位置。
const { network, ethers } = require("hardhat");
const { developmentChains, networkConfig } = require("../helper-hardhat-config");
const { verify } = require("../utils/verify");
const { storeImages } = require("../utils/uploadToPinata");
const imagesLocation = "./images/randomNft";
module.exports = async function ({ getNamedAccounts, deployments }) {
const { deploy, log } = deployments;
const { deployer } = await getNamedAccounts();
const chainId = network.config.chainId;
// get IPFS hashes of images
let tokenUris;
if (process.env.UPLOAD_TO_PINATA == "true") {
tokenUris = await handleTokenUris();
}
let vrfCoordinatorV2Address, subscriptionId;
if (developmentChains.includes(network.name)) {
//const vrfCoordinatorV2Mock = await deployments.get("VRFCoordinatorV2Mock"); // works
const vrfCoordinatorV2Mock = await ethers.getContract("VRFCoordinatorV2Mock"); /**ERROR**/
vrfCoordinatorV2Address = vrfCoordinatorV2Mock.address;
const tx = await vrfCoordinatorV2Mock.createSubscription();
const txReceipt = await tx.wait(1);
subscriptionId = txReceipt.events[0].args.subId;
} else {
vrfCoordinatorV2Address = networkConfig[chainId].vrfCoordinatorV2;
subscriptionId = networkConfig[chainId].subscriptionId;
}
console.log("------------------------------");
await storeImages(imagesLocation);
// const args = [
// vrfCoordinatorV2Address,
// subscriptionId,
// networkConfig[chainId].gasLane,
// networkConfig[chainId].callbackGasLimit,
// //tokenUris,
// networkConfig[chainId].mintFee,
// ];
}
async function handleTokenUris() {
tokenUris = [];
// store image in IPFS
// store metadata in IPFS
return tokenUris
}
module.exports.tags = ["all", "randomipfs", "main", "02"];Error: ERROR processing /Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/deploy/02-deploy-random-ipfs.js:
TypeError: ethers.getContract is not a function
at Object.module.exports [as func] (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/deploy/02-deploy-random-ipfs.js:25:51)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at DeploymentsManager.executeDeployScripts (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1220:22)
at DeploymentsManager.runDeploy (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1053:5)
at SimpleTaskDefinition.action (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/index.ts:422:5)
at Environment._runTaskDefinition (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:308:14)
at Environment.run (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:156:14)
at SimpleTaskDefinition.action (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/index.ts:568:32)
at Environment._runTaskDefinition (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:308:14)
at Environment.run (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:156:14)
at DeploymentsManager.executeDeployScripts (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1223:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at DeploymentsManager.runDeploy (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1053:5)
at SimpleTaskDefinition.action (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/index.ts:422:5)
at Environment._runTaskDefinition (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:308:14)
at Environment.run (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:156:14)
at SimpleTaskDefinition.action (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/index.ts:568:32)
at Environment._runTaskDefinition (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:308:14)
at Environment.run (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat/src/internal/core/runtime-environment.ts:156:14)
at SimpleTaskDefinition.action (/Users/user/Documents/Programs/link/hh-fcc/hardhat-nft-fcc/node_modules/hardhat-deploy/src/index.ts:653:5){
"devDependencies": {
"@chainlink/contracts": "^0.5.1",
"@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers",
"@nomiclabs/hardhat-etherscan": "^3.1.2",
"@nomiclabs/hardhat-waffle": "^2.0.3",
"@openzeppelin/contracts": "^4.8.0",
"@pinata/sdk": "^2.1.0",
"chai": "^4.3.7",
"dotenv": "^16.0.3",
"ethereum-waffle": "^3.4.4",
"ethers": "5.5.4",
"hardhat": "^2.12.2",
"hardhat-contract-sizer": "^2.6.1",
"hardhat-deploy": "0.10.5",
"hardhat-gas-reporter": "^1.0.9",
"prettier-plugin-solidity": "^1.0.0-rc.1",
"solhint": "^3.3.7",
"solidity-coverage": "^0.8.2"
},
"dependencies": {}
}我在这个问题上看到了一些问题,其中发现模块之间存在冲突,但它们的解决方案不起作用。
这是因为我试图删除我的node_modules文件夹,并从
yarn install重新安装从来自github的package.json,但仍然没有骰子。有什么建议吗?
发布于 2022-11-17 03:47:22
我在任何地方都能认出那个部署脚本。这就是我从帕特里克身上学到的,就像你一样,我也遇到了这个问题。这是一个安全帽问题,您需要安装作为别名的安全帽部署-以太,并强制下载硬帽子-华夫饼。
执行以下操作:首先通过添加以下行来安装安全帽-部署-醚
"@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.10"到你的package.json,那么
npm i去安装。下一次力量硬帽华夫饼使用
npm install -D @nomiclabs/hardhat-waffle --force您完成了,getContract就变成了一个函数。使用解决方案会有所帮助,但是Patrick经常使用部署脚本,您也会想要使用它。关于"getContractAt“的工作是很棒的,但是当我只是运行没有部署的脚本时,我主要使用它。你也会意识到这一点,跟随帕特里克,所以你可能会得到解决错误,并完成它。Ps保存此页面,您很可能再次遇到错误。
要获得更多的清晰性,请参见Wighawag的解释这里
发布于 2022-11-15 12:35:00
如果其他解决方案根本不起作用,您可以尝试实现这个解决方案,而不是使用ethers.getContract(),结果应该是相同的:
await deployments.fixture(["MyContract"]);
const myContract = await deployments.get("MyContract");
const contract = await ethers.getContractAt(
myContract.abi,
myContract.address
);
});https://ethereum.stackexchange.com/questions/139409
复制相似问题