Поток Moralis — это служба, которая отправляет веб-перехватчик POST на ваш сервер с отфильтрованным событием из вашего контракта.

У них есть некоторые предустановки, такие как erc20/nfts, но нас интересуют пользовательские события.

ПРЕЖДЕ ЧЕМ НАЧАТЬ

Имейте в виду, что в настоящее время их бесплатный план предлагает распределение 300 потоков ежедневно, с оговоркой, что для каждого события отправляется два запроса — один обозначает непроверенную транзакцию, а другой указывает проверенный один. Хотя допуск 300 подходит для целей разработки, его может оказаться недостаточно для ориентированных на производство проектов.

Кроме того, обеспечение безопасности поставщика, совместимого с WebSocket, способного облегчить мониторинг событий, является сложной задачей, поскольку Alchemy не дала положительных результатов во время моей предыдущей попытки. Возможно, Quicknode будет более жизнеспособной альтернативой. Стоит отметить, что при просмотре кода не нужно учитывать адрес контракта или проблемы, связанные с поставщиками RPC.

Настроить поток

Если вы не делаете проект, чувствительный к безопасности, просто укажите в URL-адресе веб-хука несколько случайных символов «your_api/webhook_jk3roi2j32k89ygfduioj3284yu923ujF».

Настроить поток

Все говорит само за себя.

Их документация по потокам отсутствует в других SDK, таких как Python, поэтому я пробую JavaScript.

const express = require("express");

const app = express();
const port = 5000;
app.use(cors());
app.use(express.json());

const hexToNumber = (hex) => {
  return parseInt(hex, 16);
};

app.post("/webhook_RANDOM_HERE_1231fdaslfkjads", async (req, res) => {
  try {
    const payload = req.body;

    console.log(
      "Received webhook event at",
      new Date(Number(payload.block.timestamp) * 1000).toLocaleDateString(
        "en-US"
      )
    );

    // Log the parsed JSON payload to the console
    console.log(payload);

    if (payload.logs.length === 0) {
      console.log("test request, returning ok!");
      res.status(200).json({ message: "ok" });
      return;
    }

    //if (payload.confirmed === false) ....return ok, but not needed for this use-case

    let log = payload.logs[0];
    // Extract the values from the data field
    const tokenID = hexToNumber(log.data.slice(2, 66));
    const tokenA = hexToNumber(log.data.slice(66, 130));
    const tokenB = hexToNumber(log.data.slice(130));

    await core(tokenID, tokenA, tokenB);

    console.log("NewMint event:", tokenID, tokenA, tokenB);

вы можете либо интегрировать его с ethers.js для анализа журналов, либо использовать chatgpt для создания индексов слайсов для ваших событий.