When the contract will deploy locally on developmentChains
(hardhat environment) with the following script:
deploy.js
const { network, ethers } = require("hardhat")
const { developmentChains, networkConfig } = require("../helper-hardhat-config")
const { verify } = require("../helper-hardhat-config")
module.exports = async function ({ getNamedAccounts, deployments }) {
const { deploy, log } = deployments
const { deployer } = await getNamedAccounts()
const chainId = network.config.chainId
const VRF_SUB_FUND_AMOUNT_LOCALNETWORK = ethers.parseEther("100")
const entranceFee = networkConfig[chainId]["entranceFee"]
const gasLane = networkConfig[chainId]["keyHash"]
const callbackGasLimit = networkConfig[chainId]["callbackGasLimit"]
const interval = networkConfig[chainId]["interval"]
let vrfCoordinatorV2_5Address, subscriptionId, args
if (developmentChains.includes(network.name)) {
args = []
// args = [30]
const signer = await ethers.getSigner(deployer)
const vrfCoordinatorV2_5Address = (await deployments.get("VRFCoordinatorV2_5Mock")).address
const vrfCoordinatorV2 = await ethers.getContractAt("VRFCoordinatorV2_5Mock", vrfCoordinatorV2_5Address, signer)
// create the subscription
const transactionResponse = await vrfCoordinatorV2.createSubscription()
const transactionReceipt = await transactionResponse.wait()
subscriptionId = transactionReceipt.logs[0].args.subId
const transactionResponseA = await vrfCoordinatorV2.fundSubscription(subscriptionId, VRF_SUB_FUND_AMOUNT_LOCALNETWORK)
await transactionResponseA.wait()
} else {
vrfCoordinatorV2_5Address = networkConfig[chainId]["vrfCoordinatorV2"]
subscriptionId = networkConfig[chainId]["subscriptionId"]
args = [vrfCoordinatorV2_5Address, entranceFee, gasLane, subscriptionId, callbackGasLimit, interval]
}
const blob = await deploy("Blob", {
from: deployer,
args: args,
log: true,
waitConfirmations: network.config.blockConfirmations || 1,
})
if (!developmentChains.includes(network.name) && vars.has("ETHERSCAN_API_KEY")) {
log("Verifying...")
await verify(blob.address, args)
}
log("--------------------------")
}
module.exports.tags = ["all", "blob"]
Blob - Constructor
constructor(
address _vrfCoordinator,
uint256 entrance,
bytes32 gasLane,
uint256 subscriptionId,
uint32 callbackGasLimit,
uint256 interval
) VRFConsumerBaseV2Plus(_vrfCoordinator) {
i_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);
i_entrance = entrance;
i_gasLane = gasLane;
s_subscriptionId = subscriptionId;
i_callbackGasLimit = callbackGasLimit;
i_interval = interval;
s_lastTimestamp = block.timestamp;
}
Actually, I expect the parse / compiler would expects 6 constructor arguments...
Hardhat-VM:
eth_chainId (2)
eth_accounts (2)
eth_chainId (2)
eth_estimateGas
eth_chainId
eth_getTransactionCount
eth_blockNumber
eth_chainId
eth_getBlockByNumber
eth_feeHistory
eth_maxPriorityFeePerGas
eth_sendTransaction
Contract deployment: VRFCoordinatorV2_5Mock
Contract address: 0x5fbdb2315678afecb367f032d93f642f64180aa3
Transaction: 0xf2fe779536aaad6df94922f8e2583145e46c4330f52e1b88ea1fd759718c5f8c
From: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
Value: 0 ETH
Gas used: 5364148 of 5364148
Block #1: 0x9bb34680137d95c6e55c99dbce662af8af3b227a3fd3ea01fe913f169aa7073e
eth_chainId
eth_getTransactionByHash
eth_chainId
eth_getTransactionReceipt
hardhat_metadata
eth_blockNumber
eth_feeHistory
eth_sendTransaction
Contract call: VRFCoordinatorV2_5Mock#createSubscription
Transaction: 0xf98cf0ad6d06ea315b959d7d5ebbf50b0c9cc8105b0405ef9e83af89a1326a27
From: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
To: 0x5fbdb2315678afecb367f032d93f642f64180aa3
Value: 0 ETH
Gas used: 146429 of 30000000
Block #2: 0x2ecc2208bcbe5c7eb9267a39c6d8d11ce7207df4775c67a783cdd102e37d7f72
eth_getTransactionByHash
eth_getTransactionReceipt
eth_blockNumber (2)
eth_feeHistory
eth_sendTransaction
Contract call: VRFCoordinatorV2_5Mock#fundSubscription
Transaction: 0x3131c6d9ebe95c9cac82a5bd25b4f23be8fe5914a103ca96f53c467c0c735499
From: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
To: 0x5fbdb2315678afecb367f032d93f642f64180aa3
Value: 0 ETH
Gas used: 72196 of 30000000
Block #3: 0x023ceaf780f0324b3bfceacba1ee5c25864d1889df89bbff3e1a73402c68e77f
eth_getTransactionByHash
eth_getTransactionReceipt
eth_blockNumber
eth_chainId
eth_estimateGas -> !!! THIS IS COLORED RED!!!
Contract creation without any data provided
- If
args = [30]
has some value, there´s anError: expected 0 constructor arguments, got 1
- If
args = []
is empty, there´s anProviderError: Contract creation without any data provided
. But VRFCoordinatorV2_5Mock has been deployed. Blob has not been deployed.
If more than 0 args the contract won´t deploy. Could someone assist me to prevent this error(s) and tell me what´s going on please?
Blob
contract's constructor?abstract
; I wasn't suggesting that you mark yoursabstract
. Anyway, I'm glad you were able to solve your issue!