Интеграция с Collab.Land (token-gated доступ)
Collab.Land — это бот для Discord и Telegram, который проверяет владение токенами/NFT и автоматически выдаёт роли. Интеграция занимает несколько часов, но требует понимания как работает система токен-верификации и какие типы условий поддерживаются.
Как работает token-gating через Collab.Land
Схема проста: пользователь заходит в Discord → нажимает "Verify" → подписывает сообщение через кошелёк (без транзакции, бесплатно) → Collab.Land проверяет баланс on-chain → выдаёт роль.
Поддерживаемые типы активов:
- ERC-20: минимальный баланс токена
- ERC-721: владение NFT из коллекции, конкретный tokenId или trait-based
- ERC-1155: владение конкретным token ID
- Мультичейн: Ethereum, Polygon, Base, Arbitrum, Optimism, BSC и другие
Настройка через Collab.Land Command Center
Collab.Land имеет веб-интерфейс на cc.collab.land для управления Token Access Rules (TAR):
Шаг 1: Пригласить бота в Discord сервер. Дать права на управление ролями.
Шаг 2: В Command Center создать новое правило:
- Тип: ERC-20 / ERC-721 / ERC-1155
- Chain: выбрать сеть
- Contract address: адрес вашего токена/NFT
- Minimum balance: минимальное количество для получения роли
- Discord role: какую роль выдавать
Шаг 3: Пользователи идут в #collabland-join и нажимают "Let's Go".
Для ERC-721 с trait-based условиями (например, NFT с атрибутом "Gold member") — нужно использовать Collab.Land API или SYNTHETIC токен правила.
Кастомная интеграция через API
Для нестандартных условий (балансы на нескольких кошельках, staked токены, LP positions) используется Collab.Land Miniapp или собственный API.
// Пример webhook для кастомной верификации
// Collab.Land вызывает ваш endpoint для получения eligible ролей
interface CollabLandWebhook {
action: "CHECK_ROLES";
payload: {
address: string; // кошелёк пользователя
discordId: string;
guildId: string;
};
}
interface RolesResponse {
roles: string[]; // Discord role IDs для выдачи
}
// Express endpoint
app.post("/collab-land/check-roles", async (req, res) => {
const { payload } = req.body as CollabLandWebhook;
// Кастомная логика: проверяем staked баланс, LP позиции и т.д.
const stakedBalance = await getStakedBalance(payload.address);
const lpBalance = await getLPBalance(payload.address);
const roles: string[] = [];
if (stakedBalance >= 1000e18) roles.push(DISCORD_ROLE_STAKER);
if (lpBalance >= 100e18) roles.push(DISCORD_ROLE_LP_PROVIDER);
res.json({ roles });
});
Поддержка staked и locked токенов
Стандартная проблема: пользователь застейкал токены и потерял роль, потому что ERC-20 баланс на его адресе стал 0. Решения:
Вариант 1 — Staking receipt token: при стейкинге выдаётся receipt ERC-20 (stTOKEN). Collab.Land проверяет баланс receipt токена — пользователь с активным стейком сохраняет роль.
Вариант 2 — Кастомный Miniapp: Collab.Land Miniapp позволяет написать TypeScript функцию, которая самостоятельно проверяет любое on-chain состояние — баланс в staking контракте, позиции в Uniswap V3 NFT и прочее.
// Collab.Land Miniapp — кастомная проверка
import { TokenBalanceRule } from "@collabland/discord";
export async function checkBalance(
address: string,
chainId: number
): Promise<bigint> {
// Сумма нативного + staked баланса
const stakingContract = getContract(STAKING_ADDRESS, chainId);
const [walletBalance, stakedBalance] = await Promise.all([
token.balanceOf(address),
stakingContract.stakedBalanceOf(address)
]);
return walletBalance + stakedBalance;
}
Collab.Land — зрелый инструмент с поддержкой большинства сценариев token-gating без написания собственной инфраструктуры. Кастомный API имеет смысл только для специфической логики вроде multi-wallet aggregation или сложных DeFi позиций.







