Цей документ описує технічну архітектуру блокчейну 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) |