-
At 21:59:21, when the RandomIpfsNft contract is deployed you can see a deployment message on the screen. When I deploy my own code I don't see that for RandomIpfsNft, only VRFCoordinatorV2Mock. I don't receive any error messages. I just don't see the deployment message. I'm not sure it's deploying. 02-deploy-random-ipfs.js const { network } = require("hardhat");
const { developmentChains, networkConfig } = require("../helper-hardhat-config");
const { verify } = require("../utils/verify");
const { storeImages, storeTokenURIMetadata } = require("../utils/upload-to-pinata");
const imagesLocation = "./images/randomNft";
const metadataTemplate = {
name: "",
description: "",
image: "",
attributes: [
{
trait_type: "Cuteness",
value: 100,
},
],
};
module.exports = async function ({ getNamedAccounts, deployments }) {
const { deploy, log } = deployments;
const { deployer } = await getNamedAccounts();
let vrfCoordinatorV2Address, subscriptionId;
const chainId = network.config.chainId;
let tokenURIs = [
"ipfs://QmaVkBn2tKmjbhphU7eyztbvSQU5EXDdqRyXZtRhSGgJGo",
"ipfs://QmYQC5aGZu2PTH8XzbJrbDnvhj3gVs7ya33H9mqUNvST3d",
"ipfs://QmZYmH5iDbD6v3U2ixoVAjioSzvWJszDzYdbeCLquGSpVm",
];
if (process.env.UPLOAD_TO_PINATA == "true") {
tokenURIs = await handleTokenURIs();
}
if (developmentChains.includes(network.name)) {
const vrfCoordinatorV2Mock = await ethers.getContract("VRFCoordinatorV2Mock");
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;
}
log("____________________________________________________");
const args = [
vrfCoordinatorV2Address,
subscriptionId,
networkConfig[chainId].gasLane,
networkConfig[chainId].callbackGasLimit,
tokenURIs,
networkConfig[chainId].mintFee,
];
const randomIpfsNft = await deploy("RandomIpfsNft", {
from: deployer,
log: true,
args: args,
waitConfirmations: network.config.blockConfirmations || 1,
});
log("randomIpfsNft deployed!");
if (!developmentChains.includes(network.name) && process.env.ETHERSCAN_API_KEY) {
log("Verifying...");
await verify(randomIpfsNft.address, args);
}
};
async function handleTokenURIs() {
let tokenURIs = [];
const { responses: imageUploadResponses, files } = await storeImages(imagesLocation);
for (imageUploadResponseIndex in imageUploadResponses) {
let tokenURIMetadata = { ...metadataTemplate };
tokenURIMetadata.name = files[imageUploadResponseIndex].replace(".png", "");
tokenURIMetadata.description = `An adorable ${tokenURIMetadata.name} pup!`;
tokenURIMetadata.image = `ipfs://${imageUploadResponses[imageUploadResponseIndex].IpfsHash}`;
console.log(`Uploading ${tokenURIMetadata.name}`);
const metadataUploadResponse = await storeTokenURIMetadata(tokenURIMetadata);
tokenURIs.push(`ipfs://${metadataUploadResponse.IpfsHash}`);
}
console.log("TokenURIs uploaded. They are...");
console.log(tokenURIs);
return tokenURIs;
}
module.exports.tags = ["all", "randomipfs", "main"];
RansomIpfsNft.sol //SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol";
import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
error RandomIpfsNft__RangeOutOfBounds();
error RandomIpfsNft__NeedMoreEthSent();
error RandomIpfsNft__TransferFailed();
contract RandomIpfsNft is VRFConsumerBaseV2, ERC721URIStorage, Ownable {
enum Breed {
PUG,
SHIBE_INU,
ST_BERNARD
}
VRFCoordinatorV2Interface private immutable i_vrfCoordinator;
uint64 private immutable i_subscriptionId;
bytes32 private immutable i_gasLane;
uint32 private immutable i_callbackGasLimit;
uint256 private immutable i_mintFee;
uint16 private constant REQUEST_CONFIRMATIONS = 3;
uint32 private constant NUM_WORDS = 1;
mapping(uint256 => address) public s_requestIdToSender;
uint256 public s_tokenCounter;
uint256 internal constant MAX_CHANCE_VALUE = 100;
string[] internal s_dogTokenURIs;
event NftRequested(uint256 indexed requestId, address requester);
event NftMinted(Breed dogBreed, address minter);
constructor(
address vrfCoordinatorV2,
uint64 subscriptionId,
bytes32 gasLane, // keyHash
uint32 callbackGasLimit,
string[3] memory dogTokenUris,
uint256 mintFee
) VRFConsumerBaseV2(vrfCoordinatorV2) ERC721("Random IPFS NFT", "RIN") {
i_vrfCoordinator = VRFCoordinatorV2Interface(vrfCoordinatorV2);
i_gasLane = gasLane;
i_subscriptionId = subscriptionId;
i_callbackGasLimit = callbackGasLimit;
s_dogTokenURIs = dogTokenUris;
i_mintFee = mintFee;
}
function requestNft() public payable returns (uint256 requestId) {
if (msg.value < i_mintFee) revert RandomIpfsNft__NeedMoreEthSent();
requestId = i_vrfCoordinator.requestRandomWords(
i_gasLane,
i_subscriptionId,
REQUEST_CONFIRMATIONS,
i_callbackGasLimit,
NUM_WORDS
);
s_requestIdToSender[requestId] = msg.sender;
emit NftRequested(requestId, msg.sender);
}
function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords)
internal
virtual
override
{
address dogOwner = s_requestIdToSender[requestId];
uint256 newTokenId = s_tokenCounter;
uint256 moddedRNG = randomWords[0] % MAX_CHANCE_VALUE;
Breed dogBreed = getBreedFromModdedRng(moddedRNG);
_safeMint(dogOwner, newTokenId);
_setTokenURI(newTokenId, s_dogTokenURIs[uint256(dogBreed)]);
emit NftMinted(dogBreed, dogOwner);
}
function withdraw() public onlyOwner {
uint256 amount = address(this).balance;
(bool success, ) = payable(msg.sender).call{value: amount}("");
if (!success) revert RandomIpfsNft__TransferFailed();
}
function getBreedFromModdedRng(uint256 moddedRng) public pure returns (Breed) {
uint256 cumulativeSum = 0;
uint256[3] memory chanceArray = getChanceArray();
for (uint256 i = 0; i < chanceArray.length; i++) {
if (moddedRng >= cumulativeSum && moddedRng < cumulativeSum + chanceArray[i])
return Breed(i);
cumulativeSum += chanceArray[i];
}
revert RandomIpfsNft__RangeOutOfBounds();
}
function getChanceArray() public pure returns (uint256[3] memory) {
return [10, 30, MAX_CHANCE_VALUE];
}
function getDogTokenUris(uint256 index) public view returns (string memory) {
return s_dogTokenURIs[index];
}
function getMintFee() public view returns (uint256) {
return i_mintFee;
}
function getTokenCounter() public view returns (uint256) {
return s_tokenCounter;
}
}
|
Beta Was this translation helpful? Give feedback.
Answered by
krakxn
Sep 21, 2022
Replies: 2 comments 1 reply
-
Push to GitHub please |
Beta Was this translation helpful? Give feedback.
1 reply
Answer selected by
alymurtazamemon
-
@dwhaynes : Yes, you can mark this as answered! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Push to GitHub please