[SOLVED] Cloud Functions Running Twice

After updating my functions they suddenly started running twice. I have 3 afterSave cloud functions that should should all add their entry to a single class AllNFTPools.

Moralis.Cloud.afterSave("bscNFTPools", (request) => {
  const NewPool = Moralis.Object.extend("AllNFTPools");
  const newPool = new NewPool();
  newPool.set("network", 97);
  newPool.set("block_hash", request.object.get("block_hash"));
  newPool.set("block_timestamp", request.object.get("block_timestamp"));
  newPool.set("transaction_hash", request.object.get("transaction_hash"));
  newPool.set("fee", request.object.get("fee"));
  newPool.set("uri", request.object.get("uri"));
  newPool.set("creationTime", request.object.get("creationTime"));
  newPool.set("uid", request.object.get("uid"));
  newPool.set("stakingPrice", request.object.get("stakingPrice"));
  newPool.set("totalSupply", request.object.get("totalSupply"));
  newPool.set("address", request.object.get("address"));
  newPool.set("remaining", request.object.get("remaining"));
  newPool.set("block_number", request.object.get("block_number"));
  newPool.set("createdAt", request.object.get("createdAt"));
  newPool.save();
});

Moralis.Cloud.afterSave("activeNFTPools", (request) => {
  const NewPool = Moralis.Object.extend("AllNFTPools");
  const newPool = new NewPool();
  newPool.set("network", 3);
  newPool.set("block_hash", request.object.get("block_hash"));
  newPool.set("block_timestamp", request.object.get("block_timestamp"));
  newPool.set("transaction_hash", request.object.get("transaction_hash"));
  newPool.set("fee", request.object.get("fee"));
  newPool.set("uri", request.object.get("uri"));
  newPool.set("creationTime", request.object.get("creationTime"));
  newPool.set("uid", request.object.get("uid"));
  newPool.set("stakingPrice", request.object.get("stakingPrice"));
  newPool.set("totalSupply", request.object.get("totalSupply"));
  newPool.set("address", request.object.get("address"));
  newPool.set("remaining", request.object.get("remaining"));
  newPool.set("block_number", request.object.get("block_number"));
  newPool.set("createdAt", request.object.get("createdAt"));
  newPool.save();
});

Moralis.Cloud.afterSave("polygonNFTPools", (request) => {
  const NewPool = Moralis.Object.extend("AllNFTPools");
  const newPool = new NewPool();
  newPool.set("network", 80001);
  newPool.set("block_hash", request.object.get("block_hash"));
  newPool.set("block_timestamp", request.object.get("block_timestamp"));
  newPool.set("transaction_hash", request.object.get("transaction_hash"));
  newPool.set("fee", request.object.get("fee"));
  newPool.set("uri", request.object.get("uri"));
  newPool.set("creationTime", request.object.get("creationTime"));
  newPool.set("uid", request.object.get("uid"));
  newPool.set("stakingPrice", request.object.get("stakingPrice"));
  newPool.set("totalSupply", request.object.get("totalSupply"));
  newPool.set("address", request.object.get("address"));
  newPool.set("remaining", request.object.get("remaining"));
  newPool.set("block_number", request.object.get("block_number"));
  newPool.set("createdAt", request.object.get("createdAt"));
  newPool.save();
});

This was working correctly but when I tried to update, this behavior started.Screenshot 2021-06-08 144851

serverURL: https://e5uu22ilhkuo.moralis.io:2053/server

[SOLUTION]

Cloud function was triggered twice, once when transaction was first submitted, and another time when the transaction was confirmed. Watch out for the confirmed field when using triggers with Watch Events.

What probably happened is the transaction was in an “unconfirmed state”… then it later got confirmed. This can result in multiple entries if you’re not careful in your triggers. You can avoid this by checking the value of the confirmed property or by defining a beforeConsume trigger and returning false if confirmed is false to skip saving that event.

https://docs.moralis.io/moralis-server/real-time-transactions#beforeconsume-trigger

1 Like

Ah that must be the case. I will do some testing and see if that is what happened. Thanks!