pragma solidity ^0.8.0;
import "../node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "../node_modules/@openzeppelin/contracts/utils/Counters.sol";
contract NftiumToken is ERC721 {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() ERC721("NftiumToken","NFTM"){}
struct Item {
uint256 id;
address creator;
string uri;
}
mapping(uint256 => Item) public Items;
function createItem(string memory uri) public returns (uint256){
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_safeMint(msg.sender, newItemId);
Items[newItemId] = Item(newItemId, msg.sender, uri);
return newItemId;
}
function tokenURI(uint256 tokenId) public view override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
return Items[tokenId].uri;
}
}
const createItemForm = document.getElementById(âcreateItemâ);
const createItemNameField = document.getElementById(âtxtCreateItemNameâ);
const createItemDiscriptionField = document.getElementById(âtxtCreateItemDiscriptionâ);
const numberCreateItemPriceField = document.getElementById(ânumberCreateItemPriceâ);
const createItemStatusField = document.getElementById(âselectCreateItemStatusâ);
const selectCreateItemStatusField = document.getElementById(âselectCreateItemStatusâ);
const fileCreateItemFile = document.getElementById(âfileCreateItemFileâ);
const openCreateItemButton = document.getElementById(âbtnOpenCreateItemâ);
openCreateItemButton.onclick = () => showElement(createItemForm);
document.getElementById(âbtnCloseCreateItemâ).onclick = () => hideElement(createItemForm);
document.getElementById(âbtnCreateItemâ).onclick = createItem;
createItem = async ()=>{
if(fileCreateItemFile.files.length == 0){
alert("Please Select a File!");
return;
}else if(createItemNameField.value.length ==0){
alert("Please Enter Name!");
return;
}
const nftFile = new Moralis.File("nftFile.jpg", fileCreateItemFile.files[0]);
await nftFile.saveIPFS();
console.log(nftFile.url());
console.log(nftFile.hash());
const nftFilePath = nftFile.url();
const nftFileHash = nftFile.hash();
const metadata ={
name : createItemNameField.value,
description : createItemDiscriptionField.value,
image : nftFilePath,
};
const nftFileMetadataFile = new Moralis.File("metadata.json", {base64 : btoa(JSON.stringify(metadata))});
await nftFileMetadataFile.saveIPFS();
const nftFileMetadataFilePath = nftFileMetadataFile.url();
const nftFileMetadataFileHash = nftFileMetadataFile.hash();
const nftId = await mintNft(nftFileMetadataFilePath);
mintNft = async (metadataUrl)=>{
const receipt = await tokenContract.methods.createItem(metadataUrl).send({from: ethereum.selectedAddress});
console.log(receipt);
return receipt.events[0].id;
}
sharing function contract codes because after my contract get executed on polygon testnet it showing on block explorer but does not show as an erc721 token. another thing is not saving in moralis table as token owner saving in item only. and sometimes itâs even not saving on the table. Using truffle and using youtube playlist.
can anyone help?