NotarizedScreenshot / external-adapter

External adapter for chainlink node aka backend
4 stars 0 forks source link

Optimize media file loading in IPFS #29

Closed anastasiabusygina closed 1 year ago

anastasiabusygina commented 1 year ago
anastasiabusygina commented 1 year ago
poludnev commented 1 year ago

Сейчас при получении от фронтенда реквеста POST /send c tweet id, puppeteer загружает страницу, делает скриншот и сохраняет в папку /data, данные твита и метаданные запроса обрабатываются таким же образом и сохраняются в папку /data. После подтверждения пользователем транзакции, из Chainlink узла в адаптер приходит реквест POST /adaper_response.json. Контроллер этого запроса

  1. читает из папки /data по tweet id сохраненные в результате выполнения запроса /send файлы скриншота, данных твита и метаданных запроса.
  2. формирует скриншот с вотермарком
  3. из данных твита получает ссылки на медиафайлы: изображения, видео
  4. сохраняет в nft-storage: скриншот, скриншот с вотермарком, медиафайлы.
  5. получив cid загруженных файлов, формирует матадату для nft.
  6. сохраняет в nft-storage метадату
  7. получив cid метадаты формирует респонс в виде JSON:
    {
    "data": {
        "url": "<tweet id>",
        "sha256sum": "<хэшсумма строкового представления метадаты в BigInt>",
        "cid": "bafkreiey2x3hdvzdhd22nnltcpriax7gabqxo6eiivenjfbuvujtqcdkwi",
        "metadataCid": "bafkreihd3wyfzst55c3izqm5p5fboc3rnciradbr3h4ghg2inzo53zxvy4"
    }
    }

Проблема:

  1. Дефолт-таймаут Chainlink узла составляет 15с. Да, его можно увеличить.
  2. Но: если в медиафайлах твита есть большие изображения или видео, то их загрузка в ipfs может продлиться 2-3 минуты даже при условии, что мы сохраняем видеофайл в минимальном битрейте.
  3. Нам так же необходимо хранить временные файлы в папке /data, а значит нужно контролировать их накопление и своевременное удаление.

Можем: Вариант 1. Сохранять все указанные файлы на стадии превью, по время обработки /send запроса:

Преимущества:

Недостаток:

Вариант 2: продолжаем сохранять скриншот, мету и данные твита в /data, cid медиафайлов получаем в контроллере /adapter_response.json, их загрузку в ipfs делаем фоновой. В таком случае, их доступность не будет гарантированной при просмотре пользователем результатов сминтенного nft.

Elizavetta commented 1 year ago

Let's select the first variant, so that we can sepearte loading of big number of files

utgarda commented 1 year ago

https://github.com/OptimalBits/bull/issues/1411