Интеграция с Layer3 (quest-платформа)
Layer3 — одна из ведущих quest-платформ Web3, позволяющая проектам настраивать on-chain и off-chain задания для пользователей с верификацией выполнения и наградами в токенах или NFT. Интеграция нужна проектам, которые хотят размещать квесты на Layer3 и верифицировать их выполнение через собственный API или смарт-контракт.
Модели верификации квестов
Layer3 поддерживает два механизма верификации:
On-chain верификация: Layer3 смотрит на состояние блокчейна — выполнил ли пользователь транзакцию с заданными параметрами (swap на конкретном DEX, mint NFT, добавление ликвидности). Настраивается через интерфейс Layer3 без API с вашей стороны. Подходит для стандартных on-chain действий.
API верификация: Layer3 отправляет POST-запрос на ваш эндпоинт с адресом кошелька пользователя. Ваш сервер проверяет, выполнил ли этот адрес нужное действие, и возвращает { "result": true/false }. Нужна для off-chain активностей: подписка на Discord, выполнение действия внутри вашего dApp, ввод промокода.
Реализация API верификации
Endpoint должен быть доступен по HTTPS. Layer3 передаёт адрес пользователя в теле запроса:
// POST /api/layer3/verify-quest
import { Request, Response } from "express"
import crypto from "crypto"
interface Layer3VerifyRequest {
address: string
questId?: string
}
export async function verifyLayer3Quest(req: Request, res: Response) {
// Верификация webhook signature (если Layer3 предоставляет секрет)
const signature = req.headers["x-layer3-signature"] as string
const isValid = verifySignature(req.body, signature, process.env.LAYER3_WEBHOOK_SECRET!)
if (!isValid) {
return res.status(401).json({ error: "Invalid signature" })
}
const { address } = req.body as Layer3VerifyRequest
// Ваша бизнес-логика верификации
const completed = await checkUserCompletedTask(address)
return res.json({ result: completed })
}
function verifySignature(body: object, signature: string, secret: string): boolean {
const hmac = crypto.createHmac("sha256", secret)
hmac.update(JSON.stringify(body))
const expected = hmac.digest("hex")
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))
}
Endpoint должен отвечать быстро — Layer3 имеет timeout около 10 секунд. Тяжёлые проверки (on-chain запросы) кешировать в Redis.
Настройка квеста в Layer3 Dashboard
После деплоя API:
- Создаём квест в Layer3 Dashboard → Add Task → API Verification
- Указываем URL вашего endpoint
- Опционально: секрет для HMAC подписи
- Задаём награду: XP, токены (ERC-20 через вашу казну), NFT
Для токенных наград Layer3 предоставляет смарт-контракт, который управляет дистрибуцией. Проект пополняет казну, Layer3 автоматически клеймит награды завершившим квест.
On-chain квесты без API
Для стандартных on-chain действий Layer3 отслеживает события самостоятельно:
-
Transferevent с заданным контрактом — mint NFT или получение токена - Вызов конкретной функции контракта (по selector)
- Баланс токена выше порога
- Snapshot голосование
Настройка через UI Layer3: указываем адрес контракта, event signature или function selector, условие. Проверка происходит на стороне Layer3 через их indexer — ничего дополнительно реализовывать не нужно.
Сроки
Настройка Layer3 квеста с on-chain верификацией без кастомного API — несколько часов. Разработка и деплой API верификации для off-chain квестов — 1 рабочий день включая тестирование webhook.







