Понимание белого списка токенов
Что такое белый список?
Белый список ограничивает взаимодействие токенов или протоколов явно утвержденными адресами, требуя предварительной авторизации для участия.
Основная концепция:
Черный список: разрешены все, КРОМЕ запрещенных адресов.
Белый список: НИКТО не разрешен, КРОМЕ утвержденных адресов. Состояния по умолчанию:
Черный список: открытый (разрешительный)
Белый список: Закрытый (ограничительный)
Почему важен белый список
1. Продажа токенов и усиление; ICO:
- • Проверка аккредитованного инвестора
- • Соответствие KYC/AML
- • Географические ограничения
- • Защита от ботов
- • Механизм честного запуска
2. Монетные дворы NFT:
- • Ранние награды для сторонников
- • Приоритет участника сообщества
- • Предотвращение перехвата данных ботами
- • Многоуровневый доступ
- • Гарантированное распределение
3. Соответствие нормативным требованиям:
- • Соблюдение законодательства о ценных бумагах
- • Требования аккредитованного инвестора
- • Географические ограничения
- • Проверка профессионального инвестора
4. Протоколы DeFi:
- • Доступ к бета-тестированию
- • Управление рисками
- • Постепенное внедрение
- • Премиум-функции
- • Институциональные услуги
5. Безопасность:
- • Ограничить поверхность атаки
- • Контроль качества участников
- • Снижение риска мошенничества
- • Включить механизмы восстановления
Техническая реализация
1. Метод хранения в цепочке
Самый простой подход: сопоставление хранилища
Преимущества:Простая проверка в реальном времени, легкие обновления, прозрачность в цепочке
Недостатки:Высокие затраты на газ, масштаб затрат на хранение, дорого для больших списков
Подходит для:Небольшие белые списки (<100 адресов), часто меняющиеся списки
Базовая реализация белого списка:
// Базовая реализация белого списка
контракт WhitelistToken {
сопоставление (адрес => bool) общедоступный белый список;
адрес публичного администратора;
модификатор onlyWhitelisted() {
require(whitelisted[msg.sender], "Не в белом списке");
_;
}
модификатор onlyAdmin() {
require(msg.sender == admin, «Не администратор»);
_;
}
конструктор() {администратор = msg.sender;
}
// Добавляем один адрес
функция addToWhitelist (адрес учетной записи) external onlyAdmin {
в белом списке [учетная запись] = true;
испустить AddedToWhitelist (учетная запись);
}
// Добавляем несколько адресов (пакетно)
функция addMultipleToWhitelist (адрес [] учетных записей данных вызова)
внешний
толькоадмин
{
for (uint i = 0; i <accounts.length; i++) {
в белом списке[аккаунты[i]] = true;
испустить AddedToWhitelist(accounts[i]);
}
}
// Пример функции из белого списка
функция mintTokens(сумма uint256) external onlyWhitelisted {
_mint(msg.sender, сумма);
}
}
2. Метод дерева Меркла
Газоэффективность для больших списков
Преимущества:Чрезвычайно экономичный, масштабируется до миллионов, хранилище с одним корнем
Недостатки:Сложная реализация, вычисления вне цепочки, сложность UX
Подходит для:Большие белые списки (более 1000 адресов), нечастые обновления
Реализация дерева Меркла:
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";contract MerkleWhitelist {
байты32 общественного merkleRoot;
отображение (адрес => bool) public hasClaimed;
адрес публичного администратора;
конструктор (bytes32 _merkleRoot) {
merkleRoot = _merkleRoot;
администратор = msg.sender;
}
// Обновляем корень Меркла (новый белый список)
функция updateMerkleRoot (bytes32 _merkleRoot) внешний {
require(msg.sender == admin, «Не администратор»);
merkleRoot = _merkleRoot;
}
// Проверка членства в белом списке
функция проверки белого списка(
bytes32[] подтверждение данных вызова,
адрес аккаунта
) публичный просмотр возвращает (bool) {
лист bytes32 = keccak256(abi.encodePacked(учетная запись));
return MerkleProof.verify(доказательство, merkleRoot, лист);
}
// Mint с проверкой белого списка
function whitelistMint(bytes32[] доказательство данных вызова) external {
require(!hasClaimed[msg.sender], «Уже заявлено»);
требуется(
verifyWhitelist(доказательство, msg.sender),
«Неверное доказательство Меркла»
);
hasClaimed[msg.sender] = правда;
_mint(msg.sender, 1);
}
}
Генерация дерева Меркла (вне блокчейна):
const {MerkleTree } = require('merkletreejs');
const keccak256 = require('keccak256');// Белый список адресов
константный белый список = [
'0x1234...',
'0x5678...',
'0x9abc...',
// ... еще тысячи
];// Создаём листовые узлы
const LeafNodes = whitelist.map(addr =>
keccak256(адрес)
);// Создаем дерево Меркла
const merkleTree = новый MerkleTree(leafNodes, keccak256, {
сортировкаПары: правда
});// Получаем root (сохраняем в контракте)
const rootHash = merkleTree.getRoot();// Генерируем подтверждение для конкретного адреса
функция getProof(адрес) {
const лист = keccak256 (адрес);
const доказательство = merkleTree.getHexProof(лист);
подтверждение возврата;
}
3. Метод цифровой подписи
Авторизация вне сети
Преимущества:Нет хранилища в цепочке, динамическое одобрение, гибкая логика, сохранение конфиденциальности
Недостатки:Централизованная подписывающая сторона, требуется серверная часть, риск компрометации подписи
Подходит для:Динамические белые списки, сложная проверка, требования конфиденциальности
Реализация проверки подписи:
контракт SignatureWhitelist {
адрес публичного подписывающего лица;
отображение (адрес => bool) public hasMinted;
конструктор (адрес _signer) {
подписывающий = _подписывающий;
}
// Проверяем подпись уполномоченного подписывающего лица
функция проверкиподписи(
адрес аккаунта,
сигнатура памяти в байтах
) публичный просмотр возвращает (bool) {
bytes32 messageHash = keccak256(abi.encodePacked(аккаунт));
bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
return RecoverySigner (ethSignedMessageHash, подпись) == подписывающее лицо;
}
функция getEthSignedMessageHash(bytes32 messageHash)
внутренний
чистый
возвращает (байты32)
{
вернуть keccak256(
abi.encodePacked("\x19Сообщение, подписанное Ethereum:\n32", messageHash)
);
}
функция RecoverySigner(
байты32 ethSignedMessageHash,
сигнатура памяти в байтах
) внутренние чистые доходы (адрес) {
(bytes32 r, bytes32 s, uint8 v) = SplitSignature (подпись);
return ecrecover(ethSignedMessageHash, v, r, s);
}
функция SplitSignature (подпись памяти в байтах)
внутренний
чистый
возвращает (bytes32 r, bytes32 s, uint8 v)
{
require(sig.length == 65, "Неверная длина подписи");
сборка {
г := mload(добавить(подпись, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}
}
// Mint с проверкой подписи
function подписьMint (подпись памяти байтов) внешний {
require(!hasMinted[msg.sender], "Уже создано");
требуется(
verifySignature(msg.sender, подпись),
«Неверная подпись»
);
hasMinted[msg.sender] = правда;
_mint(msg.sender, 1);
}
}
4. Блокировка NFT/токена
Белый список на основе владения
Преимущества:Автоматическая проверка, создание сообщества, вторичная рыночная стоимость
Недостатки:Передаваемый доступ, манипулирование рынком, внешняя зависимость
Подходит для:Награды сообщества, доступ к DAO, многоуровневые преимущества
Реализация NFT-шлюза:
интерфейс IERC721 {
функция BalanceOf(владелец адреса) возвращает внешнее представление (uint256);
}контракт NFTGatedWhitelist {
IERC721 общедоступный обязательный NFT;
конструктор (адрес _nftAddress) {
требуетсяNFT = IERC721(_nftAddress);
}
только модификаторNFTHolder() {
требуется(
требуетсяNFT.balanceOf(msg.sender) > 0,
«Необходимо иметь требуемый NFT»
);
_;
}
// Доступ ограничен владельцами NFT
функция привилегированногоMint() external onlyNFTHolder {
_mint(msg.sender, 1);
}
}
Реальные примеры использования
Белый список ICO/IDO
Ход процесса:
Этап подачи заявки (1–2 недели): заявка пользователя, проверка KYC/AML, проверка аккредитованного инвестора, географический отбор
___ТОКЕН_389_PLHЕсли результат > 1, существует арбитражная возможность.Выполнять одновременные сделки Отправьте три лимитных или рыночных ордера одновременно, чтобы зафиксировать расхождение цен до его исчезновения.
Счет для комиссий и проскальзывания
Учитывайте торговые комиссии, сетевые расходы и потенциальное проскальзывание. Убедитесь, что чистая прибыль остается положительной после всех вычетов.
ШагДействие
Пример (BTC-ETH-USDT)
1
Начните с USDT1000 USDT
2
USDT → BTC
Купить BTC по цене 50 000 USDT/BTC
3
BTC → ETHОбменяйте BTC на ETH по цене 20 ETH/BTC
4
ETH → USDT
Продать ETH по цене 2500 USDT/ETH5
Завершается USDT
1005 USDT (после уплаты комиссий)
Математические расчеты для треугольного арбитража
Суть треугольного арбитража заключается в сравнении подразумеваемых обменных курсов с фактическими рыночными курсами. Эффективность арбитража можно рассчитать по следующей формуле:
Эффективность арбитража = (Ставка₁ × Ставка₂ × Ставка₃) × (1 – Комиссия₁) × (1 – Комиссия₂) × (1 – Комиссия₃) Где Курс₁, Курс₂, Курс₃ — это обменные курсы для каждой стороны треугольника, а Fee₁, Fee₂, Fee₃ — это торговые комиссии за каждую транзакцию. ___ТОКЕН_335_PLH___
Пример расчета Использование треугольника BTC/USDT, ETH/BTC, ETH/USDT:
BTC/USDT: 1 BTC = 50 000 USDT
ETH/BTC: 1 ETH = 0,05 BTCETH/USDT: 1 ETH = 2500 USDT
Торговая комиссия: 0,1% за сделкуЭффективность = (1/50000 × 1/0,05 × 2500) × (0,999)³ ≈ 1,00125
Прибыль: 0,125% за поездку туда и обратно
Ключевые моменты
Всегда используйте цены спроса/предложения, а не цены последней сделкиСчет для проскальзывания в условиях низкой ликвидностиУчитывайте лимиты на снятие средств и время переводаМониторинг треугольного арбитража на нескольких биржах
Автоматизация и усиление; торговые боты для треугольного арбитража
В 2025 году ручной треугольный арбитраж устареет.ТОКЕН_503_PLH___
Варианты использования:Постепенное внедрение, ограничение рисков, программы поиска ошибок, премиальные функции, институциональные услуги
Лучшие практики
Для проектов
1. Четкая связь:
Основная информация: критерии белого списка, процесс подачи заявки, метод отбора, сроки, пределы выделения, технические требования
2. Честный выбор:
Прозрачные критерии, меры против Сивиллы, подход, ориентированный на сообщество, лотерея для избыточного спроса, процесс апелляции
3. Безопасность:
Аудит контрактов, защита ключей администратора, тестирование в тестовой сети, проверка деревьев Меркла, ограничение скорости, предварительная защита
4. Пользовательский опыт:
Простой процесс проверки, четкие инструкции, каналы поддержки, инструменты генерации доказательств, интерфейс проверки статуса
5. Соответствие законодательству:
KYC/AML при необходимости, соблюдение законодательства о ценных бумагах, географические ограничения, условия обслуживания, юридическая проверка
Для пользователей
Советы по проверке:
- • Следуйте только официальным каналам
- • Честно пройдите KYC
- • Соблюдение сроков
- • Предоставьте точную информацию
- • Сохраните подтверждение заявки
- • Проверьте адреса контракта
Безопасность:
- • Никогда не передавайте секретные ключи
- • Проверка URL-адресов веб-сайтов
- • Проверьте адреса контракта
- • Остерегайтесь фишинга
- • Используйте аппаратные кошельки
- • Тест небольшими суммами
Распространенные ошибки:
- • ❌ Срок подачи заявок истек
- • ❌ Неполный KYC
- • ❌ Неправильный адрес кошелька
- • ❌ Не соответствует критериям
- • ❌ На удочку мошенников
- • ❌ Использование адресов обмена
Сравнение: методы
| Метод | Стоимость газа | Масштабируемость | Гибкость | Безопасность | Лучше всего подходит для |
|---|---|---|---|---|---|
| Сопоставление | Высокий | Плохо | Отлично | Хорошо | Маленькие списки |
| Дерево Меркла | Низкий | Отлично | Плохо | Хорошо | Большие списки |
| Подпись | Низкий | Отлично | Отлично | Средний | Динамические списки |
| NFT/токен | Низкий | Отлично | Хорошо | Хорошо | Вход в сообщество |
Будущие тенденции
1. Децентрализованная интеграция идентификационных данных
Самостоятельный белый список с переносными учетными данными, проверка с сохранением конфиденциальности, кроссплатформенные белые списки
2. Выбор с помощью искусственного интеллекта
Автоматическое курирование с анализом поведения, оценкой вклада, обнаружением сивиллы, справедливым распределением
3. Белые списки между протоколами
Совместимый доступ с одним белым списком для многократного использования, переносимость репутации, экосистемное партнерство
4. Технология регулирования
Автоматизация соблюдения требований с проверкой юрисдикции в режиме реального времени, динамический белый список, нормативная отчетность
Заключение
Белый список токенов обеспечивает необходимый контроль доступа для криптовалютных проектов, обеспечивая соблюдение нормативных требований, справедливое распределение, создание сообщества и безопасность. От простого хранилища карт до сложных деревьев Меркла и проверки сигнатур — выбор реализации зависит от масштаба, требований к гибкости и требований к газу.
Основные выводы:
- • Выберите правильный метод: сопоставление для небольших/динамических списков, Merkle для больших/статических, подписи для гибкости
- • Баланс доступа и справедливости: четкие критерии, прозрачный отбор, подход, ориентированный на сообщество
- • Приоритизация безопасности: аудит контрактов, защита ключей администратора, защита пользовательских данных
- • Оптимизация пользовательского опыта: простые процессы, четкие инструкции, полезные инструменты
- • Соблюдайте требования: соблюдайте правила, при необходимости применяйте KYC, документируйте все
По мере развития криптовалюты белые списки станут более сложными, автоматизированными и сохраняющими конфиденциальность. Проекты, которые тщательно внедряют белые списки – балансируя контроль доступа со справедливостью, безопасностью с удобством использования и соблюдением децентрализации – создадут более сильные сообщества и более успешные запуски токенов.
Часто задаваемые вопросы
Вопрос: Почему в проектах используются белые списки вместо открытых продаж? ___ТОКЕН_903_PLH___
A: Белые списки обеспечивают: (1) соответствие нормативным требованиям (аккредитованные инвесторы, географические ограничения), (2) предотвращение ботов, (3) справедливое распространение среди сообщества, (4) контролируемое развертывание в целях безопасности. ___ТОКЕН_907_PLH___
Вопрос: Как мне попасть в белый список для монетного двора NFT? ___ТОКЕН_911_PLH___
___ТОКЕН_913_PLH___ A: Обычно: (1) Присоединяйтесь к проекту Discord/социальным сетям, (2) Взаимодействуйте с сообществом, (3) Следуйте инструкциям по подаче заявки, (4) Завершите проверку (KYC, если требуется), (5) Отправьте адрес кошелька, (6) Дождитесь подтверждения. Каждый проект отличается. ___ТОКЕН_915_PLH___
Вопрос: Можно ли изменить белые списки после развертывания? ___ТОКЕН_919_PLH___
A: Зависит от реализации. Хранилище карт: да (если включены административные элементы управления). Дерево Меркла: требует обновления корневого хеша. Подпись: да (контролируется серверной частью). NFT-шлюз: автоматический в зависимости от владельца. ___ТОКЕН_923_PLH___
Вопрос: Можно ли передавать места из белого списка? ___ТОКЕН_927_PLH___
A: Обычно нет для белых списков на основе адресов (привязанных к конкретному кошельку). Исключение: доступ NFT/токена можно передавать вместе с владением NFT/токеном.
Вопрос: Какова разница в стоимости газа между методами белого списка?
A: Сопоставление: более 20 000 газа за добавление адреса. Меркл: ~3000-5000 газа для проверки (постоянно, независимо от размера белого списка). Подпись: ~3000-5000 газ для проверки. Экономия газа резко возрастает с увеличением размера списка. ___ТОКЕН_939_PLH___