首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: ethers.getContract不是一个函数

TypeError: ethers.getContract不是一个函数
EN

Ethereum用户
提问于 2022-11-14 23:31:49
回答 2查看 987关注 0票数 3

我会寻找一个替代,但不能使用以太模块将使我疯狂的道路。代码是从帕特里克的坚实Javascript课程,NFT部分,第14课复制的。

下面的代码应该在我点击console.log(“-”)行之后,将模拟部署到hardhat的本地ganache链中,并打印出图像位置。

02-deploy-random-ipfs.js

代码语言:javascript
复制
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"];

堆栈跟踪:

代码语言:javascript
复制
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)

package.json

代码语言:javascript
复制
{
  "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,但仍然没有骰子。有什么建议吗?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2022-11-17 03:47:22

我在任何地方都能认出那个部署脚本。这就是我从帕特里克身上学到的,就像你一样,我也遇到了这个问题。这是一个安全帽问题,您需要安装作为别名的安全帽部署-以太,并强制下载硬帽子-华夫饼。

执行以下操作:首先通过添加以下行来安装安全帽-部署-醚

代码语言:javascript
复制
 "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.10"

到你的package.json,那么

代码语言:javascript
复制
npm i

去安装。下一次力量硬帽华夫饼使用

代码语言:javascript
复制
npm install -D @nomiclabs/hardhat-waffle --force

您完成了,getContract就变成了一个函数。使用解决方案会有所帮助,但是Patrick经常使用部署脚本,您也会想要使用它。关于"getContractAt“的工作是很棒的,但是当我只是运行没有部署的脚本时,我主要使用它。你也会意识到这一点,跟随帕特里克,所以你可能会得到解决错误,并完成它。Ps保存此页面,您很可能再次遇到错误。

要获得更多的清晰性,请参见Wighawag的解释这里

票数 3
EN

Ethereum用户

发布于 2022-11-15 12:35:00

如果其他解决方案根本不起作用,您可以尝试实现这个解决方案,而不是使用ethers.getContract(),结果应该是相同的:

代码语言:javascript
复制
 await deployments.fixture(["MyContract"]);

 const myContract = await deployments.get("MyContract");

 const contract = await ethers.getContractAt(
      myContract.abi,
      myContract.address
    );
  });
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/139409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档