Гэты дакумент апісвае тэхнічную архітэктуру блокчэйна 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) |