Разработка системы управления кошельками для airdrop-фарминга
Airdrop-фарминг — это профессиональная деятельность, требующая управления сотнями кошельков, систематических on-chain транзакций и одновременной работы с десятками протоколов. Ручное управление сотнями кошельков требует сотен часов в месяц и неизбежно ведёт к ошибкам: забытые транзакции, неоптимальный gas, корреляция паттернов, которая приводит к sybil-банам. По статистике, при ручном управлении около 30% фармеров сталкиваются с sybil-детектом хотя бы раз. Автоматизация решает эти проблемы, позволяя сосредоточиться на стратегии, а не на кликах. Наш опыт в этой сфере позволяет избежать типичных ошибок, которые ведут к потере airdrop-квалификации. Система автоматизации — обязательный инструмент для серьёзного фармера. Свяжитесь с нами, чтобы обсудить ваши задачи и получить индивидуальный проект автоматизации.
Что такое профессиональный airdrop-фарминг
Анализ крупных airdrop-кампаний (Arbitrum, Optimism, ZkSync, LayerZero, EigenLayer) показывает паттерны, которые награждались: регулярная активность в течение многих месяцев, разнообразие протоколов, нативные транзакции (не только bridging), держание токенов, участие в governance. Система должна автоматизировать именно эти паттерны, сохраняя органичность активности.
Архитектура системы
Иерархия кошельков
Профессиональный фармер работает с несколькими уровнями ключей:
Master wallet — холодный кошелёк (Ledger/Trezor или air-gapped machine). Хранит основной капитал. Никогда не используется напрямую в протоколах.
Fund wallets (2-5 штук) — промежуточные кошельки для распределения средств. Получают ETH/USDC от master, распределяют по farming wallets.
Farming wallets (50-500 штук) — рабочие кошельки, которые непосредственно взаимодействуют с протоколами. Каждый генерируется как отдельный HD-путь от одной или нескольких seed фраз.
Master Wallet
↓ (manual transfers)
Fund Wallets [1-5]
↓ (automated distribution)
Farming Wallets [50-500]
↓ (automated interactions)
DeFi Protocols
Важно: farming wallets не должны иметь прямых on-chain связей с master wallet. Цепочка fund wallet → farming wallet с разными временными интервалами снижает корреляцию.
Генерация и хранение ключей
Все farming wallets генерируются детерминированно из seed фраз по спецификации BIP44:
import { HDNodeWallet, Mnemonic } from "ethers";
function generateFarmingWallets(
mnemonic: string,
count: number,
startIndex: number = 0
): WalletInfo[] {
const masterNode = HDNodeWallet.fromMnemonic(
Mnemonic.fromPhrase(mnemonic)
).derivePath("m/44'/60'/0'/0");
return Array.from({ length: count }, (_, i) => {
const wallet = masterNode.deriveChild(startIndex + i);
return {
index: startIndex + i,
address: wallet.address,
privateKey: wallet.privateKey,
derivationPath: `m/44'/60'/0'/0/${startIndex + i}`,
};
});
}
Хранение ключей: никогда не храним private keys в открытом виде. Варианты — шифрование через AES-256-GCM с паролем (KDF: Argon2id), хранение только seed phrase + on-demand derivation или HashiCorp Vault для командного использования.
База данных кошельков и активности
CREATE TABLE wallets (
id SERIAL PRIMARY KEY,
address VARCHAR(42) UNIQUE NOT NULL,
derivation_path VARCHAR(64),
wallet_group VARCHAR(64),
created_at TIMESTAMPTZ DEFAULT NOW(),
last_active_at TIMESTAMPTZ,
total_gas_spent NUMERIC(30, 18) DEFAULT 0,
notes TEXT,
tags TEXT[]
);
CREATE TABLE protocol_interactions (
id BIGSERIAL PRIMARY KEY,
wallet_id INTEGER REFERENCES wallets(id),
protocol VARCHAR(128) NOT NULL,
chain_id INTEGER NOT NULL,
tx_hash VARCHAR(66),
action_type VARCHAR(64),
amount NUMERIC(30, 18),
gas_used NUMERIC(30, 18),
executed_at TIMESTAMPTZ DEFAULT NOW(),
status VARCHAR(16) DEFAULT 'pending',
metadata JSONB
);
CREATE TABLE farming_tasks (
id BIGSERIAL PRIMARY KEY,
wallet_id INTEGER REFERENCES wallets(id),
task_type VARCHAR(128) NOT NULL,
protocol VARCHAR(128) NOT NULL,
chain_id INTEGER NOT NULL,
parameters JSONB NOT NULL,
scheduled_at TIMESTAMPTZ,
executed_at TIMESTAMPTZ,
status VARCHAR(16) DEFAULT 'pending',
retry_count INTEGER DEFAULT 0,
error_message TEXT
);
Как мы автоматизируем взаимодействия?
Task Runner
Система выполнения задач имитирует человеческое поведение: случайные задержки между транзакциями, вариативное время суток, разные gas prices.
class FarmingTaskRunner {
async executeTask(task: FarmingTask): Promise<TxReceipt> {
const wallet = await this.walletManager.getWallet(task.walletId);
const provider = this.getProvider(task.chainId);
// Случайная задержка 30с - 5 мин перед транзакцией
const delay = randomBetween(30_000, 300_000);
await sleep(delay);
// Случайное изменение gas price в пределах ±10%
const gasPrice = await this.getGasWithVariance(provider, 0.1);
const handler = this.handlers.get(task.taskType);
if (!handler) throw new Error(`Unknown task type: ${task.taskType}`);
return handler.execute(wallet, task.parameters, { gasPrice });
}
private async getGasWithVariance(provider: Provider, variance: number) {
const feeData = await provider.getFeeData();
const base = feeData.maxFeePerGas!;
const multiplier = 1 + (Math.random() * 2 - 1) * variance;
return base * BigInt(Math.round(multiplier * 100)) / 100n;
}
}
Protocol Handlers
Для каждого протокола — отдельный handler. Пример для Uniswap V3:
class UniswapV3SwapHandler implements ProtocolHandler {
async execute(
wallet: Wallet,
params: SwapParams,
options: ExecutionOptions
): Promise<TxReceipt> {
const router = new Contract(UNISWAP_V3_ROUTER, ROUTER_ABI, wallet);
const deadline = Math.floor(Date.now() / 1000) + 1800; // 30 мин
const tx = await router.exactInputSingle({
tokenIn: params.tokenIn,
tokenOut: params.tokenOut,
fee: params.fee,
recipient: wallet.address,
deadline,
amountIn: params.amountIn,
amountOutMinimum: params.minAmountOut,
sqrtPriceLimitX96: 0,
}, {
maxFeePerGas: options.gasPrice,
maxPriorityFeePerGas: options.maxPriorityFeePerGas,
});
return tx.wait();
}
}
Аналогичные handlers создаются для Curve, AAVE, GMX, Stargate, Wormhole/LayerZero bridge, Pendle и других протоколов.
Как защититься от sybil-детекта?
Современные airdrop-системы активно борются с sybil-атаками. Мы учитываем несколько факторов:
- Уникальность активности. Не копируем паттерны между кошельками: разные суммы, разные протоколы, разные временные паттерны.
- IP rotation. Каждый кошелёк работает через отдельный proxy/VPN. Общий IP — сильный sybil-сигнал.
- Source of funds. Цепочка финансирования не должна прослеживаться к одному источнику. CEX withdrawals на разные кошельки — хорошо, прямой перевод — плохо.
- Age of wallet. Старые кошельки ценятся больше. Система создаёт кошельки заблаговременно и даёт им «историю» до целевого дедлайна.
Согласно аналитике Nansen, корреляция IP-адресов является одним из главных факторов sybil-детекта в крупных airdrop-кампаниях.
Мониторинг и аналитика
Для каждого кошелька система показывает: on-chain активность по протоколам (с датами), потраченный gas (в USD), текущие позиции, score по известным метрикам (объём, количество транзакций, уникальные протоколы, дни активности) и текущий баланс по цепям. Система автоматически рассчитывает estimated airdrop score для каждого отслеживаемого проекта и даёт рекомендации.
Пример расчёта airdrop score
Score может включать взвешенные метрики: объём (35%), количество транзакций (25%), уникальные протоколы (20%), дни активности (20%). Веса настраиваются под конкретный проект.Почему газовая оптимизация критична?
При работе с 200 кошельками, 3-5 транзакциями в день на кошелёк важна газовая оптимизация. Транзакции на L2 (Arbitrum, Base, Optimism) в 10-50 раз дешевле mainnet: средняя стоимость газа на L2 составляет $0.02–0.05 за транзакцию против $2–5 на L1. Мы используем batching, где поддерживается multicall, мониторинг gas price для выбора низких периодов и автоматический расчёт минимального баланса ETH на каждом кошельке.
| Параметр | Ethereum L1 | Arbitrum L2 | Optimism L2 | Base L2 |
|---|---|---|---|---|
| Средняя стоимость транзакции | $2–5 | $0.02–0.05 | $0.01–0.03 | $0.02–0.04 |
| Кол-во транзакций на 1 ETH | 200–500 | 10 000–25 000 | 15 000–30 000 | 12 000–20 000 |
Процесс разработки
- Аналитика — разбираем требования: количество кошельков, протоколы, бюджеты, RPC.
- Проектирование — архитектура, схема базы данных, выбор стека.
- Реализация — генерация кошельков, разработка handlers, планировщика, дашборда.
- Тестирование — симуляция на тестнете, проверка anti-sybil метрик.
- Деплой и запуск — развертывание, настройка мониторинга, документирование.
Получите консультацию по вашему проекту — мы подберём оптимальную архитектуру и стек.
Что входит в работу
- Полный набор документации (архитектура, инструкция по эксплуатации).
- Доступ к исходному коду с лицензией на использование.
- Обучение операторов.
- Поддержка на этапе запуска (до 2 недель).
- Гарантия отсутствия backdoors в коде (аудит ключевых частей).
Стек
Наши инженеры имеют многолетний опыт в DeFi и автоматизации. Система построена на production-ready стеке с отказоустойчивостью и мониторингом.
| Компонент | Технология |
|---|---|
| Backend | Node.js + TypeScript, Fastify |
| Task queue | Bull + Redis |
| Database | PostgreSQL + TimescaleDB |
| Blockchain | ethers.js v6, viem |
| RPC | Alchemy, Infura (с failover) |
| Proxy | SOCKS5 rotation (Bright Data, Oxylabs) |
| Frontend | React + TanStack Query |
| Monitoring | Grafana + Prometheus |
Если вам нужна автоматизация airdrop-фарминга — свяжитесь с нами для консультации и оценки вашего проекта.







