Разработка Runes-токена (Bitcoin): от идеи до релиза

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка Runes-токена (Bitcoin): от идеи до релиза
Средний
~3-5 дней
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1361
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1189
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    930

Разработка Runes-токена (Bitcoin)

До Runes была путаница: BRC-20 работал поверх Ordinals, создавал inscription для каждого transfer, засорял mempool junk-транзакциями. Casey Rodarmor, создатель Ordinals, разработал Runes как clean-room решение для fungible токенов на Bitcoin — без лишних данных, с использованием существующих биткоин-примитивов. Runes решают проблему масштабирования токенов: каждый BRC-20 transaction создаёт ненужные inscription, увеличивая размер блокчейна. Runes используют UTXO и OP_RETURN, что в 10 раз компактнее. В этой статье разберём архитектуру, etching, передачу и индексирование Runes, а также покажем реальные примеры кода. Вы узнаете, как избежать типичных ошибок, таких как потеря токенов из-за pointer logic, и как правильно настроить индексер. Наш опыт — 5+ лет в блокчейн-разработке, 15+ проектов на Bitcoin и EVM. Гарантируем соответствие протоколу и отсутствие потерь из-за pointer logic. Свяжитесь для консультации — оценим сложность и сроки за 1 день.

Как работает протокол Runes?

Runes не требует изменений в Bitcoin консенсусе. Протокол живёт в OP_RETURN — данные не хранятся в UTXO set, блокчейн не засоряется (в отличие от BRC-20, хранящего состояние в satoshi).

Ключевые концепции:

  • Runestone — сообщение протокола в OP_RETURN. Содержит etching, mint, transfer, edict.
  • UTXO как носитель баланса — балансы Runes хранятся не в глобальном маппинге (как ERC-20), а в конкретных UTXO. Если вы держите 1000 RUNE, значит у вас есть UTXO с attached balance.
  • Rune ID — {block_height}:{tx_index} etching-транзакции. Например, первый Rune имеет ID 840000:3.
  • Spacers — визуальные разделители в имени (точки), например UNCOMMON•GOODS.

Как создать Rune (Etching)?

Etching — это транзакция с Runestone в OP_RETURN, объявляющая новый Rune.

Параметры etching: divisibility (0–38, аналог decimals в ERC-20), symbol (Unicode символ для отображения), premine (количество токенов для etcher'а сразу), terms (условия open mint, если разрешён) — amount, cap, height, offset, turbo (флаг совместимости с будущими версиями).

Структура данных Runestone кодируется через varint encoding (LEB128) — компактное представление чисел переменной длины.

Практическая реализация через ord CLI

# Установка ord (официальный клиент)
cargo install ord

# Синхронизация с Bitcoin нодой (или через RPC к внешней)
ord --bitcoin-rpc-url http://user:pass@localhost:8332 index

# Создание wallet
ord wallet create

# Etching нового Rune
ord wallet etch \
  --rune "MYTOKEN•NAME" \
  --divisibility 8 \
  --symbol "M" \
  --supply 21000000 \
  --premine 21000000 \
  --fee-rate 20

# Mint (если включён open mint)
ord wallet mint \
  --rune "MYTOKEN•NAME" \
  --fee-rate 20

Через библиотеку (JavaScript/TypeScript)

Для интеграции в приложение используется runestone npm пакет или прямая работа с bitcoinjs-lib:

import { Runestone, Etching, Terms, RuneId } from "runestone-lib";
import * as bitcoin from "bitcoinjs-lib";

function buildEtchingTransaction(
  utxo: UTXO,
  runeName: string,
  divisibility: number,
  supply: bigint,
  feeRate: number
): bitcoin.Transaction {
  const runestone = new Runestone({
    etching: new Etching({
      rune: Rune.fromString(runeName),
      divisibility,
      symbol: "T",
      premine: supply,
      turbo: true,
    }),
    edicts: [{
      id: new RuneId(0n, 0n),  // 0:0 = самого себя при etching
      amount: supply,
      output: 1n,              // output index для получения premine
    }],
  });

  const psbt = new bitcoin.Psbt({ network: bitcoin.networks.bitcoin });
  
  // Input: funded UTXO для оплаты fee
  psbt.addInput({
    hash: utxo.txid,
    index: utxo.vout,
    witnessUtxo: { script: utxo.scriptPubKey, value: utxo.value },
  });
  
  // Output 0: OP_RETURN с Runestone
  psbt.addOutput({
    script: bitcoin.script.compile([
      bitcoin.opcodes.OP_RETURN,
      Buffer.from("52554e45", "hex"),  // RUNE magic bytes
      runestone.encipher(),
    ]),
    value: 0,
  });
  
  // Output 1: получатель premine (должен быть не dust)
  psbt.addOutput({
    address: recipientAddress,
    value: 546,  // dust limit для P2WPKH
  });
  
  // Output 2: сдача
  psbt.addOutput({ address: changeAddress, value: changeAmount });
  
  return psbt;
}
Технические детали Runestone Runestone — это бинарный формат, который может содержать etching, mint, transfer и edicts. Поле etching определяет атрибуты нового токена: имя (до 26 символов с разделителями), делимость (0-38), символ (один Unicode), премайн и условия open mint. Edicts — это инструкции передачи, каждая содержит id Rune, количество и номер output'а. Стоимость etching в mainnet составляет примерно $2–5 за транзакцию при текущих комиссиях.

Передача Runes (edicts)

Передача Runes — транзакция с Runestone, содержащим edicts. Каждый edict задаёт: какой Rune, сколько, в какой output.

Важное правило протокола: если Rune balance входного UTXO не полностью покрыт edicts — остаток автоматически идёт в первый non-OP_RETURN output (pointer). Нет явного указания = первый output. Это отличие от EVM, где неуказанные средства остаются у отправителя.

Пример: у вас UTXO с 1000 RUNE. Транзакция с edict: send 300 RUNE → output 2. Автоматически: 700 RUNE → output 1 (default pointer). Если output 1 = burn address — вы нечаянно сожгли 700 RUNE. Это основная причина потери токенов — непонимание pointer logic. При разработке кошелька для Runes нужно явно конфигурировать pointer output на change адрес пользователя.

Индексирование Runes: варианты и практика

Runes не имеют стандартного RPC API в Bitcoin Core — нужен отдельный индексер. Сравним варианты:

Индексер Тип Преимущества Недостатки
ord Self-hosted Полный контроль, открытый исходный код Требует Bitcoin ноду + ~100 ГБ SSD
Hiro Ordinals API Hosted Не требует своей ноды, простой REST Платный, риск недоступности
Unisat API Hosted Поддержка Runes, бесплатный лимит Rate limit для высоких нагрузок

Для production мы используем собственный ord индексер с репликацией — это даёт гарантию доступности и скорость. Экономия до 40% по сравнению с hosted-решениями.

Какие отличия Runes от BRC-20?

Характеристика Runes BRC-20
Модель данных UTXO с attached balance inscription с JSON-стейтом
Размер транзакции ~100–200 байт ~400–1000 байт
Требования к ноде Полная Bitcoin нода + ord Полная Bitcoin нода + Ordinals
Гибкость Только transfer/burn Только transfer/burn
Зрелость Активная разработка, май 2024 Стабильный, но багливый

Что входит в нашу разработку Runes-токена?

  • Анализ токеномики и протокольных параметров
  • Etching, mint, transfer логика
  • Интеграция с кошельками (список поддерживающих Runes)
  • Разработка индексного API (ord + кастомные эндпоинты)
  • UI для mint/transfer (опционально)
  • Тестирование в testnet и mainnet
  • Документация и обучение команды
  • Техническая поддержка 1 месяц после запуска

Ограничения Runes (что нужно знать заранее)

Runes — не смарт-контракты. Никаких conditional transfers, стейкинга или DEX без отдельного решения. Вся логика, привычная в Solidity, здесь невозможна on-chain. Доступны только: создание, transfer, burn.

Для DeFi поверх Runes нужен offchain matching (централизованный orderbook) или отдельный L2 с проверкой через Bitcoin SPV. Сравнение с ERC-20: EVM токены выигрывают в гибкости, но Runes дают native Bitcoin-безопасность и аудиторию.

Срок разработки: etching и базовый кошелёк — 1–2 недели. Полноценная интеграция с индексером и marketplace — 6–10 недель. Стоимость рассчитывается индивидуально после аудита требований. Получите консультацию по вашему проекту — мы оценим сложность и предложим оптимальное решение.

Наш опыт: 5+ лет в блокчейн-разработке, 15+ проектов на Bitcoin и EVM. Гарантируем соответствие протоколу и отсутствие потерь из-за pointer logic.

Разработка токенов: ERC-20, токеномика, вестинг

«ERC-20 — это просто» — фраза, после которой начинаются проблемы. Базовый transfer написать несложно. Но токен, у которого через шесть месяцев не происходит инфляционный коллапс, governance работает как задумано, а вестинг нельзя обойти через хитрую схему с делегированием — это уже проектирование.

ERC-20: что под капотом

Стандарт ERC-20 — девять функций. Сложность начинается с расширений:

ERC-20Permit (EIP-2612) — gasless approve через подпись. Пользователь подписывает permit(owner, spender, value, deadline, v, r, s) off-chain, spender вызывает permit() + transferFrom() в одной транзакции. Это убирает отдельный approve step. Но: подпись можно перехватить и использовать — нужен deadline и проверка nonce.

ERC-20Votes (EIP-5805) — snapshot балансов для governance. Checkpoint-система хранит историю балансов по номеру блока. getPastVotes(address, blockNumber) — баланс на момент создания proposal, а не текущий. Это предотвращает flash loan governance attack: нельзя занять токены и проголосовать ими в одной транзакции.

Rebasing токены (stETH, Ampleforth) — balanceOf меняется автоматически через изменение internal shares ratio. Высокая сложность интеграции: большинство DeFi протоколов не работают корректно с rebasing без wrapping в non-rebasing версию.

Fee-on-transfer токены — при каждом transfer снимается процент. Ломают AMM расчёты: пул получает меньше, чем ожидал. Uniswap v2/v3 не поддерживают fee-on-transfer нативно — нужны специальные pair/router.

Tokenomics: где математика превращается в экономику

Токеномика — это не таблица в Excel с суммой 100%. Это модель инцентивов, которая либо работает в долгосрочной перспективе, либо создаёт давление продаж которое убьёт проект.

Emission schedule и инфляция

Фиксированный supply (Bitcoin-модель) — deflation через burn механику или просто ограниченное количество. Подходит для store-of-value или utility токенов с ограниченным спросом на новые токены.

Инфляционная модель (Ethereum post-Merge, Curve) — новые токены выпускаются для стимулирования участников. Нужен баланс: emission должен быть ниже или равен value capture протоколом. Если протокол зарабатывает $100k/месяц, а эмиссия в рыночной стоимости $500k/месяц — постоянное давление продаж неизбежно.

Halving schedules (Bitcoin-style) — уменьшение emission со временем. Создаёт предсказуемость, но требует что утилити токена росла чтобы компенсировать падающие rewards для stakers/validators.

Supply distribution

Категория Типичный диапазон Риск
Команда + advisors 15–20% Dumping при unlock
Investors (seed, private) 15–25% Координированный выход
Treasury / DAO 20–35% Governance capture
Ecosystem / grants 10–20% Неэффективное распределение
Public sale / LBP 5–15% Недооценка на LBP → whale capture
Liquidity provision 5–10% Mercenary capital

Нет универсальной формулы. Есть принцип: никакой одной сущности не должно принадлежать >33% voting power при запуске. Иначе governance — фикция.

Vesting контракты: детали имеют значение

Linear vesting с cliff — стандарт для команды и инвесторов. cliff — период после TGE, в течение которого ничего не доступно. После cliff: линейный unlock до duration.

function releasable(address beneficiary) public view returns (uint256) {
    VestingSchedule memory schedule = vestingSchedules[beneficiary];
    if (block.timestamp < schedule.cliff) return 0;

    uint256 elapsed = block.timestamp - schedule.cliff;
    uint256 vestingDuration = schedule.duration - (schedule.cliff - schedule.start);
    uint256 vested = schedule.totalAmount * elapsed / vestingDuration;

    return vested - schedule.released;
}

Типичные ошибки при реализации:

Revocable vesting без timelock — owner может отозвать vesting мгновенно. Если owner key скомпрометирован или команда недобросовестна — все unvested токены могут быть отозваны. Решение: revocation через multisig + governance vote.

Cliff не блокирует governance права — если используется ERC-20Votes, recipient может делегировать voting power с первого дня, даже если токены ещё не unlocked. Нужно явно разделить voting power и claim logic.

Отсутствие emergency pause — если обнаружена уязвимость в vesting контракте, нужна возможность приостановить claim. Pausable + timelock на unpause.

Liquidity Bootstrapping

Запуск ликвидности — критический момент. Три основных подхода:

Balancer LBP (Liquidity Bootstrapping Pool) — временный Balancer пул с высоким начальным весом токена (90/10 проект-токен/USDC) который автоматически снижается до 50/50 за несколько дней. Создаёт нисходящее ценовое давление, препятствуя ботам скупить всё по одной цене. После LBP ликвидность переносится в постоянный пул.

Fjord Foundry — специализированная платформа для LBP и fair launches. Меньше операционного overhead чем прямая интеграция с Balancer.

Uniswap v3 с ограниченным range — добавить ликвидность в узкий диапазон вокруг начальной цены. Высокая capital efficiency, но требует активного управления range.

TWAMM (Time-Weighted AMM) — механика для постепенной продажи/покупки больших объёмов без slippage. Paradigm предложил, реализован в FraxSwap.

Governance токены и voting механики

OpenZeppelin Governor — стандартная реализация on-chain governance. Модульная архитектура: GovernorVotes для counting, GovernorTimelockControl для timelock execution, GovernorSettings для изменяемых параметров.

Quorum — минимальный процент supply для валидности голосования. Слишком высокий quorum = apathy failure (не набирается голосов). Слишком низкий = whale capture. Compound установил quorum 400k COMP (4% supply) — на практике достигается редко без координации крупных holders.

Flash loan governance attack — атакующий занимает токены через flash loan, делегирует их себе, создаёт proposal или голосует, возвращает токены. ERC-20Votes с snapshot по номеру блока полностью блокирует это: нужно иметь токены на момент создания snapshot, который берётся в момент создания proposal.

Delegation — пользователи с малыми балансами часто не голосуют. Liquid delegation (как в Optimism) позволяет делегировать voting power конкретным addresses (delegates) без передачи ownership токенов.

Стек для токен-разработки

Контракты: Solidity 0.8.x, OpenZeppelin Contracts 5.x (ERC20, ERC20Permit, ERC20Votes, Governor, TimelockController, TokenVesting)

Аудит токеномики: Python модели с симуляцией emission/demand, cadCAD для complex systems modeling

Деплой и управление: Foundry scripts, Gnosis Safe для treasury, OpenZeppelin Defender для автоматизации

Аналитика: Dune Analytics для on-chain метрик, Token Terminal для protocol revenue

Процесс

Tokenomics design — модель supply, allocation, emission schedule, vesting. Стресс-тестирование сценариев (bear market, whale exit, governance capture attempt).

Контракт разработка — ERC-20 + extensions, vesting, governance. Foundry fuzz тесты на vesting calculations, governance thresholds.

Аудит — особое внимание на governance attack vectors, vesting bypass, permit replay attacks.

LBP / launch — выбор механики, настройка параметров, мониторинг первых 24 часов.

Post-launch — мониторинг supply distribution через Dune, governance participation metrics, treasury management.

Сроки

  • ERC-20 с permit и basic governance: 2–3 недели
  • Vesting контракт с revocation и cliff: 2–4 недели
  • Полный governance (Governor + Timelock + Token): 4–7 недель
  • Токен + LBP + governance + vesting: 8–14 недель