-
Listing,Buying and Cancelling Items gets updated in the database but the updateListing function doesn't change anything in database,not even listedItem class gets updated.updateActiveItem.jsMoralis.Cloud.afterSave("ItemListed", async (request) => {
const confirmed = request.object.get("confirmed");
const logger = Moralis.Cloud.getLogger();
logger.info("Looking for confirmed tx");
if (confirmed) {
logger.info("Found Item");
const ActiveItem = Moralis.Object.extend("ActiveItem");
const query = new Moralis.Query(ActiveItem);
query.equalTo("marketplaceAddress", request.object.get("address"));
query.equalTo("nftAddress", request.object.get("nftAddress"));
query.equalTo("tokenId", request.object.get("tokenId"));
query.equalTo("seller", request.object.get("seller"));
logger.info(`Marketplace | Query: ${query}`);
const alreadyListedItem = await query.first();
console.log(`alreadyListedItem ${JSON.stringify(alreadyListedItem)}`);
if (alreadyListedItem) {
logger.info(`Deleting already listed ${request.object.get("objectId")}`);
await alreadyListedItem.destroy();
logger.info(
`Deleted item with tokenId ${request.object.get(
"tokenId"
)} at address ${request.object.get(
"address"
)} since the listing is being updated. `
);
}
const activeItem = new ActiveItem();
activeItem.set("marketplaceAddress", request.object.get("address"));
activeItem.set("nftAddress", request.object.get("nftAddress"));
activeItem.set("price", request.object.get("price"));
activeItem.set("tokenId", request.object.get("tokenId"));
activeItem.set("seller", request.object.get("seller"));
logger.info(
`Adding Address ${request.object.get(
"address"
)}, TokenID: ${request.object.get("tokenId")}`
);
logger.info("Saving......");
await activeItem.save();
}
});
Moralis.Cloud.afterSave("ItemListingCancelled", async (request) => {
const confirmed = request.object.get("confirmed");
const logger = Moralis.Cloud.getLogger();
logger.info(`Marketplace | Object: ${request.object}`);
if (confirmed) {
const ActiveItem = Moralis.Object.extend("ActiveItem");
const query = new Moralis.Query(ActiveItem);
query.equalTo("marketplaceAddress", request.object.get("address"));
query.equalTo("nftAddress", request.object.get("nftAddress"));
query.equalTo("tokenId", request.object.get("tokenId"));
logger.info(`Marketplace | Query: ${query}`);
const cancelledItem = await query.first();
logger.info(
`Marketplace | CancelledItem: ${JSON.stringify(cancelledItem)}`
);
if (cancelledItem) {
logger.info(`Deleting ${cancelledItem.id}`);
logger.info(
`Deleted item with tokenId ${request.object.get(
"tokenId"
)} at address ${request.object.get("address")} since it was cancelled. `
);
await cancelledItem.destroy();
} else {
logger.info(
`No item cancelled with address: ${request.object.get(
"address"
)} and tokenId: ${request.object.get("tokenId")} found.`
);
}
}
});
Moralis.Cloud.afterSave("ItemBought", async (request) => {
const confirmed = request.object.get("confirmed");
logger.info(`Marketplace | Object: ${request.object}`);
if (confirmed) {
const logger = Moralis.Cloud.getLogger();
const ActiveItem = Moralis.Object.extend("ActiveItem");
const query = new Moralis.Query(ActiveItem);
query.equalTo("marketplaceAddress", request.object.get("address"));
query.equalTo("nftAddress", request.object.get("nftAddress"));
query.equalTo("tokenId", request.object.get("tokenId"));
logger.info(`Marketplace | Query: ${query}`);
const boughtItem = await query.first();
logger.info(`Marketplace | boughtItem: ${JSON.stringify(boughtItem)}`);
if (boughtItem) {
logger.info(`Deleting ${boughtItem.id}`);
logger.info(
`Deleted item with tokenId ${request.object.get(
"tokenId"
)} at address ${request.object.get("address")} since it was Bought. `
);
await boughtItem.destroy();
} else {
logger.info(
`No item found with address: ${request.object.get(
"address"
)} and tokenId: ${request.object.get("tokenId")} found.`
);
}
}
}); addEvent.jsconst Moralis = require("moralis/node");
require("dotenv").config();
const contractAddresses = require("./constants/networkMapping.json");
let chainId = process.env.chainId || 31337;
let moralisChainId = chainId == "31337" ? "1337" : chainId;
const contractAddress = contractAddresses[chainId]["NftMarketplace"][0];
const appId = process.env.NEXT_PUBLIC_APP_ID;
const serverUrl = process.env.NEXT_PUBLIC_SERVER_URL;
const masterKey = process.env.masterKey;
async function main() {
await Moralis.start({ serverUrl, appId, masterKey });
console.log(`Working with contract address ${contractAddress}`);
let itemListedOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemListed(address,address,uint256,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "price",
type: "uint256",
},
],
name: "ItemListed",
type: "event",
},
tableName: "ItemListed",
};
let itemBoughtOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemBought(address,address,uint256,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "buyer",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "price",
type: "uint256",
},
],
name: "ItemBought",
type: "event",
},
tableName: "ItemBought",
};
let itemCancelledOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemListingCancelled(address,address,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
],
name: "ItemListingCancelled",
type: "event",
},
tableName: "ItemListingCancelled",
};
const listedResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemListedOptions,
{
useMasterKey: true,
}
);
const boughtResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemBoughtOptions,
{
useMasterKey: true,
}
);
const cancelledResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemCancelledOptions,
{
useMasterKey: true,
}
);
if (
listedResponse.success &&
cancelledResponse.success &&
boughtResponse.success
) {
console.log("Success! Database Updated with watching events");
} else {
console.log("Something went wrong...");
}
}
main()
.then(() => process.exit(0))
.catch((e) => {
console.log(e);
process.exit(1);
}); Even created a separate script just to update event,still no effect on database.const { ethers, network } = require("hardhat");
const { moveBlocks } = require("../utils/move-blocks");
const TOKEN_ID = 3;
async function updateItem() {
const nftMarketplace = await ethers.getContract("NftMarketplace");
const basicNft = await ethers.getContract("BasicNFT");
const price = ethers.utils.parseEther("1");
const tx = await nftMarketplace.updateListing(
basicNft.address,
TOKEN_ID,
price
);
await tx.wait(1);
console.log("Item Updated");
if ((network.config.chainId = "31337")) {
await moveBlocks(2, (sleepAmount = 1000));
}
}
updateItem()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
}); Mined extra 5 blocks after updating as well using mine.js. |
Beta Was this translation helpful? Give feedback.
Answered by
Abhisek0x
Jul 6, 2022
Replies: 1 comment
-
Solved it...If anyone is facing such issues then try changing these things and it will work. I don't know why it is showing error but update these things. addEvent.jsJust add one more sync event, i.e update Listing ABI const Moralis = require("moralis/node");
require("dotenv").config();
const contractAddresses = require("./constants/networkMapping.json");
let chainId = process.env.chainId || 31337;
let moralisChainId = chainId == "31337" ? "1337" : chainId;
const contractAddress = contractAddresses[chainId]["NftMarketplace"][0];
const appId = process.env.NEXT_PUBLIC_APP_ID;
const serverUrl = process.env.NEXT_PUBLIC_SERVER_URL;
const masterKey = process.env.masterKey;
async function main() {
await Moralis.start({ serverUrl, appId, masterKey });
console.log(`Working with contract address ${contractAddress}`);
let itemListedOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemListed(address,address,uint256,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "price",
type: "uint256",
},
],
name: "ItemListed",
type: "event",
},
tableName: "ItemListed",
};
let itemUpdatedOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemListingUpdated(address,address,uint256,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newprice",
type: "uint256",
},
],
name: "ItemListingUpdated",
type: "event",
},
tableName: "ItemListingUpdated",
};
let itemBoughtOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemBought(address,address,uint256,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "buyer",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "price",
type: "uint256",
},
],
name: "ItemBought",
type: "event",
},
tableName: "ItemBought",
};
let itemCancelledOptions = {
chainId: moralisChainId,
address: contractAddress,
sync_historical: true,
topic: "ItemListingCancelled(address,address,uint256)",
abi: {
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "nftAddress",
type: "address",
},
{
indexed: true,
internalType: "uint256",
name: "tokenId",
type: "uint256",
},
],
name: "ItemListingCancelled",
type: "event",
},
tableName: "ItemListingCancelled",
};
const listedResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemListedOptions,
{
useMasterKey: true,
}
);
const boughtResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemBoughtOptions,
{
useMasterKey: true,
}
);
const cancelledResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemCancelledOptions,
{
useMasterKey: true,
}
);
const updatedResponse = await Moralis.Cloud.run(
"watchContractEvent",
itemUpdatedOptions,
{
useMasterKey: true,
}
);
if (
listedResponse.success &&
cancelledResponse.success &&
boughtResponse.success &&
updatedResponse.success
) {
console.log("Success! Database Updated with watching events");
} else {
console.log("Something went wrong...");
}
}
main()
.then(() => process.exit(0))
.catch((e) => {
console.log(e);
process.exit(1);
}); UpdateActiveItem.jsMoralis.Cloud.afterSave("ItemListed", async (request) => {
const confirmed = request.object.get("confirmed");
const logger = Moralis.Cloud.getLogger();
logger.info("Looking for confirmed tx");
if (confirmed) {
logger.info("Found Item");
const ActiveItem = Moralis.Object.extend("ActiveItem");
const activeItem = new ActiveItem();
activeItem.set("marketplaceAddress", request.object.get("address"));
activeItem.set("nftAddress", request.object.get("nftAddress"));
activeItem.set("price", request.object.get("price"));
activeItem.set("tokenId", request.object.get("tokenId"));
activeItem.set("seller", request.object.get("seller"));
logger.info(
`Adding Address ${request.object.get(
"address"
)}, TokenID: ${request.object.get("tokenId")}`
);
logger.info("Saving......");
await activeItem.save();
}
});
Moralis.Cloud.afterSave("ItemListingUpdated", async (request) => {
const confirmed = request.object.get("confirmed");
const logger = Moralis.Cloud.getLogger();
logger.info("Looking for confirmed tx");
if (confirmed) {
logger.info("Found Item");
const ActiveItem = Moralis.Object.extend("ActiveItem");
const query = new Moralis.Query(ActiveItem);
query.equalTo("nftAddress", request.object.get("nftAddress"));
query.equalTo("tokenId", request.object.get("tokenId"));
query.equalTo("marketplaceAddress", request.object.get("address"));
query.equalTo("seller", request.object.get("seller"));
logger.info(`Marketplace | Query: ${query}`);
const alreadyListedItem = await query.first();
console.log(`alreadyListedItem ${JSON.stringify(alreadyListedItem)}`);
if (alreadyListedItem) {
logger.info(`Deleting already listed ${request.object.get("objectId")}`);
await alreadyListedItem.destroy();
logger.info(
`Deleted item with tokenId ${request.object.get(
"tokenId"
)} at address ${request.object.get(
"address"
)} since the listing is being updated. `
);
}
const activeItem = new ActiveItem();
activeItem.set("marketplaceAddress", request.object.get("address"));
activeItem.set("nftAddress", request.object.get("nftAddress"));
activeItem.set("price", request.object.get("newprice"));
activeItem.set("tokenId", request.object.get("tokenId"));
activeItem.set("seller", request.object.get("seller"));
logger.info(
`Adding Address ${request.object.get(
"address"
)}, TokenID: ${request.object.get("tokenId")}`
);
logger.info("Saving......");
await activeItem.save();
}
});
Moralis.Cloud.afterSave("ItemListingCancelled", async (request) => {
const confirmed = request.object.get("confirmed");
const logger = Moralis.Cloud.getLogger();
logger.info(`Marketplace | Object: ${request.object}`);
if (confirmed) {
const ActiveItem = Moralis.Object.extend("ActiveItem");
const query = new Moralis.Query(ActiveItem);
query.equalTo("marketplaceAddress", request.object.get("address"));
query.equalTo("nftAddress", request.object.get("nftAddress"));
query.equalTo("tokenId", request.object.get("tokenId"));
logger.info(`Marketplace | Query: ${query}`);
const cancelledItem = await query.first();
logger.info(
`Marketplace | CancelledItem: ${JSON.stringify(cancelledItem)}`
);
if (cancelledItem) {
logger.info(`Deleting ${cancelledItem.id}`);
logger.info(
`Deleted item with tokenId ${request.object.get(
"tokenId"
)} at address ${request.object.get("address")} since it was cancelled. `
);
await cancelledItem.destroy();
} else {
logger.info(
`No item cancelled with address: ${request.object.get(
"address"
)} and tokenId: ${request.object.get("tokenId")} found.`
);
}
}
});
Moralis.Cloud.afterSave("ItemBought", async (request) => {
const confirmed = request.object.get("confirmed");
logger.info(`Marketplace | Object: ${request.object}`);
if (confirmed) {
const logger = Moralis.Cloud.getLogger();
const ActiveItem = Moralis.Object.extend("ActiveItem");
const query = new Moralis.Query(ActiveItem);
query.equalTo("marketplaceAddress", request.object.get("address"));
query.equalTo("nftAddress", request.object.get("nftAddress"));
query.equalTo("tokenId", request.object.get("tokenId"));
logger.info(`Marketplace | Query: ${query}`);
const boughtItem = await query.first();
logger.info(`Marketplace | boughtItem: ${JSON.stringify(boughtItem)}`);
if (boughtItem) {
logger.info(`Deleting ${boughtItem.id}`);
logger.info(
`Deleted item with tokenId ${request.object.get(
"tokenId"
)} at address ${request.object.get("address")} since it was Bought. `
);
await boughtItem.destroy();
} else {
logger.info(
`No item found with address: ${request.object.get(
"address"
)} and tokenId: ${request.object.get("tokenId")} found.`
);
}
}
}); Delete all the added Classes from Moralis Dashboard and also from Moralis sync event currently syncing dashboard and try
|
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Abhisek0x
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Solved it...If anyone is facing such issues then try changing these things and it will work. I don't know why it is showing error but update these things.
addEvent.js
Just add one more sync event, i.e update Listing ABI