Search code examples
javascriptsolidity

TypeError: vrfCoordinatorV2Mock.createSubscription is not a function


`

const { network, ethers } = require("hardhat")
const { developmentChains, networkConfig } = require("../helper-hardhat.config")
const { verify } = require("../helper-hardhat.config")

const FUND_AMOUNT = "100000000000000000" 

module.exports = async ({ getNamedAccounts, deployments }) => {
    const { deploy, log } = deployments
    const { deployer } = await getNamedAccounts()
    const chainId = network.config.chainId
    let vrfCoordinatorV2Address, subsciptionId

    if (developmentChains.includes(network.name)) {
      
        const vrfCoordinatorV2Mock = await deployments.get("VRFCoordinatorV2Mock")
        vrfCoordinatorV2Address = vrfCoordinatorV2Mock.address
        
        const transactionResponse = await vrfCoordinatorV2Mock.createSubscription()
        const transactionReceipt = await transactionResponse.wait(1)
        subscriptionId = transactionReceipt.events[0].args.subId 
      
        await vrfCoordinatorV2Mock.fundSubscription(subscriptionId, FUND_AMOUNT)
    } else {
        vrfCoordinatorV2Address = networkConfig[chainId]["vrfCoordinatorV2"]
        subscriptionId = networkConfig[chainId]["subscriptionId"]
    }
    const entranceFee = networkConfig[chainId]["entranceFee"]
    const gasLane = networkConfig[chainId]["gasLane"]
    const callbackGasLimit = networkConfig[chainId]["callbackGasLimit"]
    const interval = networkConfig[chainId]["interval"]

    const args = [
        vrfCoordinatorV2Address,
        entranceFee,
        gasLane,
        subscriptionId,
        callbackGasLimit,
        interval,
    ]
    const raffle = await deploy("Raffle", {
        from: deployer,
        args: args,
        log: true,
        waitConfirmations: network.config.blockConfirmations || 1,
    })
    if (!developmentChains.includes(network.name) && process.env.ETHERSCAN_API_KEY) {
        log("-------Verifying.... Please Wait !-------------")
        await verify(raffle.address, args)
    }
    log("--------------------------------------------------------------------------------")
}

module.exports.tags = ["all", "raffle"]`

Hello, I am learning solidity, and in the middle of writing a script for a contract. So, i am getting error TypeError: vrfCoordinatorV2Mock.createSubsctiption is not a function with the code above. Now I had to make some adjustment as in another lesson we used const vrfCoordinatorV2Mock = await deployments.get("VRFCoordinatorV2Mock") "deployments.get" to get the latest deployements. If I use:

const vrfCoordinatorV2Mock = await ethers.getContract("VRFCoordinatorV2Mock")

the "getContract" piece is giving me this error: TypeError: Cannot read properties of undefined (reading 'getContract')

So I am stuck now, I had searched the discussions for "getContract" error, no luck, may be I am missing some "imports" as I cant use syntax ethers.utils.parseEther to input ETHER value as well. That thing is generating another error TypeError: Cannot read properties of undefined (reading 'utils'). Please Help me out I am stuck and have no clue whats going on.

Thank You in advance!


Solution

  • try adding hardhat-ethers using yarn this way:

        yarn add --dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers
    

    and check your package.json file. this should fix the "calling from ethers" problem