В этом документе описана техническая архитектура блокчейна TALER: механизм консенсуса, экономическая модель, сетевой протокол и внутреннее устройство хранения данных. Все сведения получены из исходного кода Taler.
Обзор
TALER — блокчейн на основе Bitcoin Core с гибридным механизмом консенсуса Proof-of-Work / Proof-of-Stake. Блоки обоих типов сосуществуют в одной цепи, каждый со своими независимыми целевыми показателями сложности и интервалами между блоками.
- Дата запуска: 13 сентября 2017 года
- Кодовая база: Bitcoin Core (модель UTXO, система скриптов, одноранговый протокол)
- Типы блоков: PoW- и PoS-блоки чередуются в одной цепи
Механизм консенсуса
Цепь принимает как PoW-блоки (добытые майнингом), так и PoS-блоки (созданные стейкингом). Каждый тип блока имеет собственную шкалу сложности, целевой интервал и график вознаграждений. Блок считается валидным, если он удовлетворяет любому из двух наборов правил — цепь не требует чередования или фиксированного соотношения между типами.
| Параметр | PoW | PoS |
|---|---|---|
| Целевой интервал между блоками | 60 секунд | 140 секунд |
| Корректировка сложности | Dark Gravity Wave | Независимая цель PoS |
| Активация | Генезис (блок 0) | Блок 130 000 |
Цепь ведёт два счётчика высоты:
nHeight— общее количество блоков (PoW + PoS)nPowHeight— только PoW-блоки (используется для халвингов и расчёта сложности PoW)
Proof-of-Work
Алгоритм майнинга
- Блоки 0–9 999: Scrypt (исходный алгоритм при запуске)
- Блоки 10 000+: Lyra2Z — алгоритм хэширования с высокими требованиями к памяти, устойчивый к ASIC
Корректировка сложности: Dark Gravity Wave
Сложность PoW корректируется алгоритмом Dark Gravity Wave (DGW), который пересчитывает её на основе скользящего окна из последних PoW-блоков:
| Версия | Диапазон блоков | Размер окна |
|---|---|---|
| DGW v1 | 10 000–249 999 | 24 PoW-блока |
| DGW v2 | 250 000+ | 120 PoW-блоков |
Ключевые свойства:
- Корректировка ограничена трёхкратным пределом — сложность не может вырасти более чем втрое или упасть ниже трети за один пересчёт
- После TLRHeight (блок 130 000) сложность PoW пересчитывается каждые 10 PoW-блоков
- В расчёте DGW учитываются только PoW-блоки (PoS-блоки исключены)
Proof-of-Stake
PoS был активирован на блоке 130 000 (форк TLRHeight). Стейкинг позволяет держателям монет создавать новые блоки без майнингового оборудования.
Вес стейкинга
Вероятность создания PoS-блока пропорциональна весу стейкинга монеты:
weight = min(возраст_в_днях, 99) × min(сумма_в_TLR, 9999)
- Минимальный возраст для стейкинга: 2 дня (монеты должны быть нетронуты не менее 2 дней)
- Максимальный возраст для веса: 90 дней (вклад возраста ограничен 90 днями, жёсткий предел в формуле — 99 дней)
- Максимальная сумма для расчёта: 9 999 TLR на один UTXO
Модификатор стейкинга
Модификатор стейкинга обеспечивает случайность при выборе PoS-блока, предотвращая предсказуемый стейкинг:
- Вычисляется на основе псевдослучайной выборки из 64 блоков предыдущих хэшей
- Пересчитывается каждые 6 часов (интервал модификатора)
- Смешивает энтропию как PoW-, так и PoS-блоков
Проверка PoS-ядра
PoS-блок считается валидным, если хэш ядра (полученный из модификатора стейкинга, свойств монеты и метки времени) оказывается ниже целевой сложности PoS — по сути аналогично PoW-майнингу, но вместо вычислительной работы используются свойства владения монетами.
Требования к PoS-блоку
Валидный PoS-блок должен содержать:
- Транзакцию coinstake на позиции 1 (позиция 0 всегда занята пустой coinbase-транзакцией)
- Подпись блока, подтверждающую владение создателя стейкнутыми монетами
Структура блока
Формат заголовка
Каждый блок использует стандартный 84-байтный заголовок:
| Поле | Размер | Описание |
|---|---|---|
nVersion | 4 байта | Версия блока и флаги функций |
hashPrevBlock | 32 байта | Хэш предыдущего блока |
hashMerkleRoot | 32 байта | Корень дерева Меркла всех транзакций |
nTime | 4 байта | Временная метка блока (Unix epoch) |
nBits | 4 байта | Компактное представление целевой сложности |
nNonce | 4 байта | Нонс для майнинга (PoW) или 0 (PoS) |
Флаги PoS-блока
PoS-блоки несут дополнительные флаги метаданных:
BLOCK_PROOF_OF_STAKE— определяет блок как PoSBLOCK_STAKE_ENTROPY— указывает на вклад энтропии в модификатор стейкингаBLOCK_STAKE_MODIFIER— указывает на генерацию нового модификатора стейкинга
Подпись блока
PoS-блоки содержат криптографическую подпись, добавленную после данных транзакций, доказывающую, что создатель блока владеет закрытым ключом стейкнутых монет. Для сериализации после форка используется флаг нового формата, позволяющий отличить расширенный формат блока.
Экономическая модель
Параметры эмиссии
| Параметр | Значение |
|---|---|
| Максимальная эмиссия | 23 333 333 TLR |
| Минимальная единица | 1 сатоши = 0,00000001 TLR (10⁻⁸) |
| Премайн в генезис-блоке | 2 333 283 TLR |
| Интервал халвинга | Каждые 1 050 000 PoW-блоков (~2,5 года) |
Вознаграждение за блок
| Период | PoW-вознаграждение | PoS-вознаграждение | Примечание |
|---|---|---|---|
| До PoS (блоки 0–129 999) | 10 TLR | — | Только PoW, исходное вознаграждение |
| После активации PoS | 7 TLR | 3 TLR | PoW снижен до 70%, PoS получает 30% |
| После 1-го халвинга | 3,5 TLR | 1,5 TLR | |
| После 2-го халвинга | 1,75 TLR | 0,75 TLR | |
| После 3-го халвинга | 0,875 TLR | 0,375 TLR | |
| После 4-го халвинга (текущий) | 0,4375 TLR | 0,1875 TLR | По состоянию на март 2026 |
| После 5-го халвинга | 0,21875 TLR | 0,09375 TLR | Ожидается в декабре 2027 |
Вознаграждение PoS всегда рассчитывается по формуле: PoS_reward = PoW_reward × 30 / 70
Текущее состояние (март 2026)
- Завершённых халвингов: 4
- Текущее вознаграждение PoW: 0,4375 TLR
- Текущее вознаграждение PoS: 0,1875 TLR
- Монет в обращении: ~19 491 107 TLR
Модель транзакций
TALER использует модель UTXO (Unspent Transaction Output), унаследованную от Bitcoin:
- Поддержка SegWit: активирована на высоте 32 256 (BIP141/143/144)
- Максимальный вес блока: 4 000 000 единиц веса
- Созревание coinbase: 20 блоков (новые монеты нельзя потратить в течение 20 блоков)
- Формат транзакций: стандартная структура Bitcoin с данными свидетеля (witness)
Типы адресов
| Тип | Формат | Идентификатор |
|---|---|---|
| P2PKH | Base58Check | Префикс-байт 65 (адреса начинаются с T) |
| P2SH | Base58Check | Префикс-байт 50 |
| P2WPKH / P2WSH | Bech32 | HRP: tlr (например, tlr1q...) |
| Расширенные публичные ключи | Base58 (BIP32) | Стандартная HD-деривация ключей |
Сетевой протокол
| Параметр | Значение |
|---|---|
| Версия протокола | 70020 |
| Порт P2P по умолчанию | 23153 |
| Стартовые байты сообщения | 0x64 0xb1 0x73 0xd8 |
| DNS seed-узлы | 6 |
Флаги сервисов
Узлы сообщают о своих возможностях через флаги сервисов:
NODE_NETWORK— доступна полная история блоковNODE_WITNESS— поддержка SegWitNODE_BLOOM— поддержка bloom-фильтров (BIP37)
Компактная ретрансляция блоков
TALER поддерживает компактную ретрансляцию блоков по BIP152 для эффективной передачи блоков, снижая нагрузку на канал за счёт передачи коротких идентификаторов транзакций вместо полных данных.
История форков
| Высота | Форк | Изменение |
|---|---|---|
| 0 | Генезис | Scrypt PoW, вознаграждение 50 TLR |
| 10 000 | Форк 1 | Алгоритм Lyra2Z, Dark Gravity Wave v1 (окно 24 блока) |
| 32 256 | — | BIP65, BIP66, CSV, активация SegWit |
| 130 000 | Форк 2 (TLRHeight) | Активация PoS, вознаграждение PoW снижено до 7 TLR, целевой интервал 60 с |
| 250 000 | Форк 3 | DGW v2 (окно 120 блоков), независимое отслеживание сложности PoW/PoS |
Уровень хранения
TALER использует LevelDB для постоянного хранения данных:
| База данных | Назначение |
|---|---|
| Индекс блоков | Соответствие хэшей блоков их расположению на диске |
| Chainstate (набор UTXO) | Текущий набор неизрасходованных выходов транзакций |
| Индекс адресов (опционально) | Соответствие адресов транзакциям (для обозревателя блоков) |
Файлы данных блоков
blk?????.dat— необработанные данные блоков, до 128 МБ на файлrev?????.dat— данные отмены для отключения блоков при реорганизации
Поддержка BIP
TALER реализует следующие предложения по улучшению Bitcoin:
| BIP | Описание |
|---|---|
| BIP34 | Высота блока в coinbase |
| BIP65 | OP_CHECKLOCKTIMEVERIFY |
| BIP66 | Строгое DER-кодирование подписей |
| BIP68 | Относительная блокировка по времени через sequence-номера |
| BIP112 | OP_CHECKSEQUENCEVERIFY |
| BIP113 | Медианное прошедшее время для расчёта блокировок |
| BIP141 | Segregated Witness (уровень консенсуса) |
| BIP143 | Верификация подписей транзакций для SegWit |
| BIP144 | Segregated Witness (одноранговые сервисы) |
| BIP147 | Устранение податливости фиктивного элемента стека |
| BIP152 | Компактная ретрансляция блоков |
| BIP173 | Кодирование адресов Bech32 |
Краткая справка по параметрам монеты
| Характеристика | Значение |
|---|---|
| Название | TALER (TLR) |
| Тип | Гибридный PoW/PoS |
| Алгоритм | Lyra2Z (с высокими требованиями к памяти) |
| Дата запуска | 13 сентября 2017 |
| Максимальная эмиссия | 23 333 333 TLR |
| Премайн | 2 333 283 TLR |
| Текущее вознаграждение PoW | 0,4375 TLR |
| Текущее вознаграждение PoS | 0,1875 TLR |
| Целевой интервал PoW | 60 секунд |
| Целевой интервал PoS | 140 секунд |
| Интервал халвинга | 1 050 000 PoW-блоков |
| Созревание coinbase | 20 блоков |
| Мин. возраст для стейкинга | 2 дня |
| Макс. вес блока | 4 000 000 |
| Порт по умолчанию | 23153 |
| Префикс адреса | T (Base58), tlr (Bech32) |
| SegWit | Активен (с высоты 32 256) |