Блок біткоіни — це елемент ланцюга блокчейн, набір записів про виконані трансакції в кріптовалютной мережі. Блок являє собою частину або повну інформацію про операції, які поки не відображені в попередніх елементах ланцюга. Кожен новий блок додається в кінець ланцюжка без можливості внесення правок, а в його структурі містяться дані про минулі блоках, які були створені до нього.
Як формується блок Bitcoin?
У структуру блоку входить запис про операції і минулому елементі ланцюга. Особливість наступного блоку — наявність персонального рішення, яке відбивається в заголовку. Досягнення мети займає багато часу, а процес лягає на плечі Майнер — учасників мережі, які отримують премію за новий блок.
Для попадання блоку в blockchain потрібно знайти параметр хешу заголовка, показник якого нижче заданої межі. Мета Майнера — підібрати правильні вхідні дані шляхом перебору варіантів. Для вирішення завдання застосовується потужне обладнання — відеокарти, ASIC-чіпи.
Якщо учасник знайшов підходящий варіант, він інформує інші вузли про отримання блоку, який перевіряється іншими елементами ланцюга і включається в ланцюг blockchain. Кількість варіантів для заголовка визначає складність обчислень. Чим вище цей параметр, тим більші потужності потрібні для пошуку рішення і видобутку блоку. Зміна складності відбувається з періодичністю в 2016 блоків, тобто раз на два тижні. На видобуток одного блоку йде в середньому десять хвилин.
З ростом потужності мережі підвищується складність видобутку і навпаки. Це означає, що показники складності і потужності знаходяться в співвідношенні, яке залишається незмінним. Чи не змінюється і часовий проміжок, необхідний для створення нового блоку.
У процесі видобутку буває, що Майнер отримали кілька рішень для одного блоку. Як результат, має місце розгалуження ланцюга. Надалі справжньої визнається та гілка, яка має велику довжину, а інша припиняє існування. Якщо транзакція виявилася в короткій гілки, вона виключається з ланцюга і повертається до числа не підтверджених операцій. Через час вона включається в наступний блоковий елемент.
Структура блоку біткоіни — заголовок
Як зазначалося, блок складається з заголовка і переліку операцій. Властивості заголовка:
Hash — хеш (алгоритм SHA-256). Цей hash носить випадковий характер, тому час його визначення легко передбачити. Варто відзначити, що хешування підлягає тільки заголовок, а до операцій в кріптовалютной ланцюга це не відноситься. Кількість транзакцій не робить значного впливу на розрахунок хешу.
Prev_block — властивість хешу минулого блоку в ланцюзі блокчейн. Наявність такої характеристики підвищує надійність мережі і ускладнює її підробку. Якщо внести правки в один блок, доведеться переробляти інші.
Version — версія блокової схеми (сьогодні вона одна — 1).
Time — uint32_t — властивість, що характеризує період, за який створюється черговий блок. За задумом творця Bitcoin, останній елемент ланцюга буде здобутий в 2106 році.
Mrkl_root — перелік хешів операцій. Суть в тому, що хеш блоку знаходиться в прямому взаємозв’язку з операціями в мережі. Мета — захист ланцюга від підробки. Безпосереднє обчислення при великому числі операцій займає багато часу. Ось чому спочатку хешіруются операції в ланцюзі, а далі хеші застосовуються для розрахунку хешів блоку. Необхідність таких дій пояснюється наступною різницею — оновлення хешу транзакції відбувається після додавання до елементу ланцюга нової операції. Обчислення хешу заголовка відбувається частіше — до 3-5 тисяч в секунду.
Bits — головний параметр блоку, скорочений варіант значення хешу. Наступний елемент визнається мережею і додається до ланцюга в тому випадку, якщо його хеш не перевищує параметр bits. Від цього параметра залежить складність видобутку нового блоку. Оновлення числа здійснюється з періодичністю раз на 14 днів.
Принцип розрахунку простий. Спочатку обчислюється обсяг створених блоків за 14 днів, після чого отримане число порівнюється з еталонним значенням. Як зазначалося, на створення блоку йде 10 хвилин. З ростом блоків складність зростає і навпаки. В результаті система підлаштовується під кількість учасників і загальну потужність підключеного обладнання.
N_tx — число операцій в переліку.
Nonce — параметр, який підбирається до моменту, поки значення хешу не буде нижчою bits. Для того, щоб новий хеш мав значення відрізняються від попереднього, має відрізнятися хоч один з параметрів. Версія незмінна, хеш минулого блоку оновлюється з появою нового елемента ланцюга, список хешів змінюється при включенні в нього нової транзакції, час оновлюється кожну пару секунд, а цільовий параметр — раз в 14 днів. Щоб не чекати оновлення будь-якого з перерахованих властивостей, існує параметр nonce.
Size — величина блоку (вимірюється в байтах).
Структура блоку біткоіни — транзакції
Наступний елемент блоку — операції, які здійснюються в кріптовалютной мережі. Вони мають вигляд переліку, який формує блок і стає складовою ланцюга. Кожен пункт списку (транзакція) показує джерело і одержувача переказу.
Інформація по адресату вказується за допомогою публічного ключа. Для застосування зарахованих коштів одержувач створює нову операцію, в якій беруться гроші з минулого транзакції і направляються іншому адресату. Для підтвердження права на які перераховуються кошти потрібен цифровий підпис, що дозволяє перевірити справжність кожної операції в мережі.
Список транзакцій в блоці реалізується за допомогою таких властивостей:
Hash — параметр, який вказує на хеш операції. Це означає, що хешування транзакції відбувається два рази — при розрахунку хешу операції, а після при розрахунку хешу блоку. У ланцюзі блокчейн працює принцип взаємозв’язку елементів ланцюга. Це означає, що хеш нового блоку посилається на хеш йде перед ним елемента ланцюга. За аналогічним алгоритмом побудована і система транзакцій. Якщо замінити проведену операцію і зберегти при цьому хеш, зруйнуються інші хеші, а сама ланцюг буде відхилена користувачами мережі.
Vout_sz — число адрес, куди перераховуються кошти (може коливатися від одного і більше).
Vin_sz — число минулих операцій, в яких кошти перераховуються новим одержувачам (від 1 і більше).
Ver — версія (поки незмінна — 1).
Size — обсяг операції (одиниця виміру — Байти). Формат — JSON.
Loch_time — властивість, яке поки не застосовується і дорівнює нулю. Суть задуму в тому, щоб виконувати операції з відстрочкою за часом. В результаті вони підключаються не до йде в даний момент блоку, а до майбутнього або через один елемент. У властивості Loch_time показується число елементів ланцюга, які потрібно ігнорувати перед включенням транзакції. Потенційно опція може застосовуватися в ситуації, коли вимагається скасування операції і її переподпісь.
In — властивість, до складу якого входить перелік входів транзакції. Тут застосовуються виходи минулих операцій, про які згадувалося раніше (prev_out). Всі виходи мають індивідуальні властивості, а саме — Hash (хеш минулого операції), n (порядковий номер операції) і scriptSig. Відправник зобов’язаний довести, що переводить особисті кошти. Це відбувається шляхом вказівки загальнодоступного ключа минулого операції, а також включення приватного ключа (підписи ECDSA). Цього достатньо, щоб довести акт застосування власних грошей.
Out — перелік виходів. Як і раніше, тут є певні властивості — Value і ScriptPubKey. Перше включає в себе обсяг коштів, що спрямовуються адресату. Інформація береться з минулих операцій, тому загальне число не може бути більше підсумкової суми вже виконаних транзакцій. Властивість Valuo прописується з наномонетах (це робиться, щоб виключити появу дробів). Друге властивість являє собою певний сценарій. Він складається з хешу загальнодоступного ключа і оператора мови. Суть — вивчення транзакції і підтвердження її валідності.
Загальний обсяг коштів на вході операції з криптовалюта ідентичний з числом монет на виході. Раз в 4 роки відбувається зниження винагороди вдвічі, що стабілізує число криптовалюта в обороті. Якщо раптом з’явиться шахрай, який підставить блок і присвоїть 100 монет, то новий не приживеться в ланцюзі через відторгнення чесними учасниками мережі. Ось чому чим більше користувачів, тим надійніше система.
Приклад блоку біткоіни
З урахуванням наведеної вище інформації можна навести приклад блоку біткоіни:
Hash (хеш): 00000000000008c21dbf4715d5da1a288061faa21e930dd8df6ae25c8b56d868.
Previous block (минулий блок): 000000000000056a7dcf273f627c2a17c55ffe1937a6ef2bc467d9c524312da2.
Difficulty (складність) 1 690 895.803053. Bits — 1a09ec04.
Transactions (транзакції): 185.
Total BTC (загальне число біткоіни): 4251.63216934.
Size (розмір): 58.914 kilobytes.
Merkle root (список хешів): 98c5d975bf556f0344770eee7ab31688a2c108223c14sea908ff99b0ab8fe947.
Nonce: 3723463451.
Характеристики блоку біткоіни
Головні характеристики блоку Bitcoin:
Видобуток блоку відбувається з періодичністю раз в 10 хвилин.
Кожен блок здатний зберігати не більше одного мегабайта інформації. Цей ліміт прописаний в коді криптовалюта, але пропускна здатність залишається високою. Після оптимізації планується збільшити обсяг даних до 2 Мб. Для прикладу Bitcoin Cash має обсяг, рівний 8 Мб.
В один блок, який має розмір 1 мегабайт вміщається до 3-5 тисяч операцій, в яких беруть участь два гаманця з обмеженим числом виходів і входів. На поточний момент пропускна здатність мережі — сім операцій за 1 секунду. З ростом числа користувачів дефіцит цього показника все більш помітний, що і призвело до появи Bitcoin Cash.
Число операцій, які входять в один блок, знижується з кількох причин — проведення транзакції з великим числом адрес (актуально для пулів), а також застосування компаніями ланцюга clockchain для відправки інформації або змісту реєстру.
Премія за блок біткоіни
В процесі розробки Bitcoin Сатоши Накамото обмежив емісію криптовалюта 21 мільйоном BTC. Крім того, передбачено зниження премії за кожен новий блок в 2 рази з періодичністю раз в 4 роки (кожні 210 тисяч блоків). Виходить, що при створенні першого блоку і протягом наступних років (до 2012-го) Майнер отримували 50 монет. У період з 2012 по 2016 винагороди було в два рази менше — 25 монет. З 2016 по 2020 рік розмір премії буде триматися на рівні 12,5 біткоіни і так далі. Причина ступеневої зменшення винагороди — бажання знизити ризик інфляції Bitcoin і не допустити знецінення криптовалюта при активній видобутку нових блоків.