Транзакції Bitcoin

В звичайному світі, транзакція – це передача грошей від A до B.

Як бачите, між A і B немає посередника (“і” не враховується).

Транзакція в грошових системах (в банківських системах) – це передача грошей від A до B через C. C – це банк, організатор грошової системи. A передає гроші C, а C передає гроші B. Як організатор грошової системи C контролює гроші на певному етапі здійснення транзакції, що створює ризики. Як ми сьогодні знаємо, ризики C виправдав на 100%. Банки і грошові системи, отримавши від вас ваші гроші, повністю їх контролюють і створюють для вас умови, правила, яких ви повинні дотримуватися. Тобто передаючи гроші посереднику, ви втрачаєте право власності на гроші.

Транзакції в системі Біткоїн влаштовані по іншому.

Транзакція в системі Біткоїн – це передача права власності на монети біткоїн від A до B (без посередника C).

Інформація, по те, що A передав певну суму грошей B зберігається в децентралізованій базі даних, побудованій за методом названим Blockchain.

Blockchain системи Біткоїн зберігає всі транзакції, які були в системі.

Децентралізована база даних Blockchain має дві важливі властивості:

  1. Інформацію в Blockchain системи біткоїн неможливо змінити;
  2. Blockchain системи Біткоїн децентралізований, тому його неможливо знищити.

Як саме побудований Blockchain системи Біткоїн і чим забезпечено наведені властивості ми розглянемо у відповідній главі.

Наведені властивості блокчейну системи Біткоїн гарантують з недвеликою часткою вірогідності, що дані про перекази грошей вам, або від вас незмінні і незнищенні.

Сукупність транзакцій які передають на ваш біткоїн рахунок гроші, і транзакцій, якими ви передаєте ваші гроші на інші біткоїн рахунки, формують ваш поточний баланс.

Транзакція в системі Біткоїн це цифровий підпис організований особливим чином.

Перед тим, як отримувати гроші в системі Біткоїн, вам необхідно згенерувати біткоїн-рахунок (біткоїн-адресу). Щоб згенерувати буткоїн-адресу, вам потрібно випадкове число (наприклад, достатньо підкинути монетку 256 разів і записати результат дії у вигляді “0” і “1”). Далі, використовуючи спеціальний метод асиметричного шифрування (public key cryptography, asymmetrical cryptography), послідовно генерується пов’язана пара рядків:

  • приватний ключ (або інші назви особистий ключ, секретний ключ), який є багатозначним числом в інтервалі від 1 до 2256;
  • публічний ключ, який генерується на основі приватного ключа і є парою до нього. Біткоїн-адреса представляє собою закодований публічний ключ. Публічний ключ це довгий рядок з цифр та літер (зазвичай більше 60 цифр та літер), який після кодування перетворюється у більш зручну форму – в рядок цифр та літер меншої довжини (32-36 цифр та літер).

Важливо розуміти те, що для генерації біткоїн-адреси вам не потрібен інтернет.

Властивості асиметричного шифрування:

  • З приватного ключа генерується публічний ключ, але з публічного ключа неможливо отримати приватний ключ;
  • Повідомлення зашифровані одним з пари ключів можна розкодувати іншим;
  • Маючи публічний ключ, можна однозначно стверджувати, що існує приватний ключ.

Біткоїн-гаманець може генерувати безліч пар приватний/публічний ключ.

Як працюють транзакції в системі Біткоїн?

Транзакція в системі біткоїн представляє собою текстову інформацію про передачу права власності від публічного ключа A до публічного ключа B, яка підписується приватним ключем, що є парою до публічного ключа A.

Текстова інформація транзакції в системі Біткоїн містить наступні основні сектори:

  • value – параметр містить суму біткоїнів яка передається;
  • address_pay – біткоїн-адреса (публічний ключ B) на який передають права володіння біткоїнами;
  • address_payer – біткоїн-адреса, публічний ключ A (або кілька публічних ключів A) з яких формується сума для переказу;
  • hash_previous – хеш попередньої транзакції або кілька хешів різних транзакцій, який підтверджує, що саме публічні ключі A містять біткоїни, які будуть передні транзакцією на публічний ключ B;
  • hash – хеш даної транзакції зі всіма параметрами;
  • signature – цифровий підпис параметра hash вашим приватним ключем.

Цифровий підпис це кодування хешу за допомогою приватного ключа (або кількох приватних ключів), які є парою до публічного ключа A, з якого передаються біткоїни. В результаті здійснення алгоритму цифрового підпису отримуємо унікальний рядок з цифр та літер. Цифровий підпис закодовується публічним ключем A.

Сформований таким чином текст і є біткоїн транзакцією.

Текст транзакції відправляється через інтернет в мережу Біткоїн вузлам мережі (комп’ютери з встановленою програмою Bitcoin), і розповсюджуються по мережі від одного вузла до іншого.

Виходить, що кожна транзакція в системі біткоїн, має ланцюг попередніх транзакцій, якими передавалися біткоїни з однієї біткоїн-адреси на іншу:

Після одержання і перевірки транзакції, транзакція записується в чергу під назвою mempool (це файл на комп’ютері в межах програми Bitcoin, який містить непідтверджені транзакції в файловій системі програми-вузла Bitcoin). З мемпулу транзакція потрапить до блоку з транзакціями, який формують майнери.

Баланс біткоїнів.

Коли права на володіння біткоїнами передають вам, такі транзакції називаються вхідними (або просто ВХОДИ). Коли ви передаєте комусь права на володіння біткоїнами, тобто відправляєте біткоїни, така транзакція називається вихідною (ВИХОДИ). Баланс ваших біткоїнів це різниця між ВХОДАМИ та ВИХОДАМИ за вирахуванням комісії.

Наприклад, двоє людей відправили вам біткойни 0,1 btc і 0,06 btc – це дві вхідні транзакції (два входи), які в сумі дають баланс 0,16 btc. Потім, ви відправили комусь 0,11 btc і у вас залишається 0,05 btc. В системі біткоїн це виглядає так:

Правило: Один вхід можна ділити на декілька виходів. Один вихід може бути тільки одним входом.

Якщо ви передаєте суму більшу (в нашому випадку це 0,11 btc), ніж є на першому вході (0,1 btc), додається другий вхід (0,06 btc) і з них формуються два виходи, перший вихід передає необхідну суму (0,11 btc) на адресу одержувача, а другий вихід повертає залишок, здачу (0,05 btc) на адресу яка належить вам (або ту з якої був вихід або на нову, згенеровану біткоїн-адресу).

Цей приклад стосується транзакцій з нульовою комісією для спрощення. Якщо ж ви встановлюєте деяку комісію, то сума у другому ВИХОДі, який повертає вам здачу, буде меншою на суму комісійних.

Підтвердження транзакцій в системі Bitcoin

Коли транзакція сформована, вона відправляється в мережу Біткоїн і потрапляє в чергу (mempool) на додавання в блок і підтвердження. Оскільки мемпули кожної програми-вузла Bitcoin синхронізуються, кожен мемпул має однакові транзакції в черзі (розбіжність все ж таки є, але вона досинхонізовується).

Майнери формують новий блок і обирають з mempool найбільш пріоритетні та вигідні їм транзакції. Від пріоритету транзакції залежить, як швидко вона потрапить в блок і згодом в блокчейн системи Біткоїн. Певна кількість місця в блоці зарезервовано для найпріоритетніших транзакцій, навіть якщо вони мають нульові комісії. Основне місце заповнюють найбільш вигідні для майнера транзакції з найбільшою комісією.

Пріоритет транзакції залежить від суми переказу, кількості блоків після блоку з транзакцією яка передала вам біткойни і обсягу пам’яті, який займає сформована транзакція:

Пріоритет транзакції = N btc * N blocks / N byte

Наприклад, ви відправляєте 0,1 btc, які раніше отримали транзакцією в блоці #445961. Сформована транзакція займає обсяг пам’яті 225 byte. Поточний блок #481715. Пріоритет такої транзакції дорівнює:

Пріоритет транзакції = 0.1 * (481715 – 445961) / 225 = 15.89

Пріоритети транзакцій є відносними величинами. Якщо ви відправили вашу транзакцію з мінімальною комісією, то з плином часу, збільшується кількість блоків (параметр N blocks), а отже і пріоритет транзакції. Виходить, що транзакція з більшим пріоритетом але меншою комісією, може підтвердитися швидше за транзакцію з меншим пріоритетом але більшою комісією.

Об’єм пам’яті, який займає транзакція, залежить від кількості входів і виходів, які формують суму транзакції. Якщо у вас багато дрібних входів по 0,01 btc і ви передаєте 1 btc, то об’єм пам’яті такої транзакції буде більшим, ніж у випадку коли ви маєте лише один вхід 0,1 btc і передаєте 0,1 btc.

Підтвердження транзакцій це процес додавання нових блоків в блокчейн після блоку в якому знаходиться ваша транзакція. Якщо підтвердження одне, це означає, що блок з вашою транзакцією доданий до ланцюга блоків в блокчейні біткоїн. 6 підтверджень – 5 нових блоків після блоку з вашою транзакцією додано до ланцюгу блоків в блокчейн біткоїна.

Навіщо потрібні підтвердження? Технічно можливо створити дві і більше транзакцій, які відправляють біткоїни з одного і того ж входу. Наприклад, перша транзакція буде відправляти біткоїни на адресу одержувача як оплату за товар, а друга транзакція з того ж входу але з більшою комісією, буде відправляти біткоїни на адресу шахрая (так він хоче повернути собі біткоїни). Виходить подвійна витрата одних і тих самих біткоїнів. Ці обидві транзакції потрапляють в чергу (mempool). Гаманець одержувача бачить транзакцію яка знаходиться в черзі як непідтверджену. І може прийняти рішення віддати товар за який нібито сплачено. Але насправді, з великою ймовірністю, першою в блок потрапить транзакція яка має більшу комісію, і ця транзакція повертає біткоїни на адресу шахрая. Тому продавцю необхідно чекати хоча б одного підтвердження транзакції. В сучасних версіях біткоїн гаманців, транзакції з подвійною витратою позначаються попередженням.

Зверніть увагу! До моменту, коли транзакція, яка відправляє вам оплату потрапить в перший блок, шахрай може створити і відправити в мережу Біткоїн скільки завгодно конкуруючих транзакцій. Але після того, як ця транзакція отримає перше підтвердження, всі шахрайські конкуруючі транзакції будуть відкинуті мережею, і ризик не отримати оплату буде пов’язаний вже з іншим фактором. Цей інший фактор ризику не отримати біткоїни полягає в створенні зловмисником конкуруючого ланцюга в блокчейні, який буде довшим за ланцюг який створюють чесні учасники. У другому випадку, ймовірність наздогнати та обігнати чесний ланцюг блоків експоненціально зменшується зі збільшенням числа підтверджень. Наприклад вже на третьому підтвердженні, ймовірність зловмисника підставити інший ланцюг з метою повернути собі біткоїни складає 1%, а на шостому підтвердження вже 0,09%. Витрати на створення та роботу обчислювальних потужностей, які здатні створити конкуруючий ланцюг космічні.

Варіант шахрайства шляхом створення конкуруючих транзакцій малоймовірний для невеликих сум, тому що вимагає певної кваліфікації, знань та умінь. Крім того, при появі в мережі конкуруючих транзакцій, ви побачите попередження про те, що дана транзакція має подвійну витрату (більшість мобільних та десктопних гаманців показують відповідний сигнал з мережі Біткоїн). Для великих сум, необхідно буде дочекатися 3-х підтверджень і тільки після цього, віддати товар покупцеві.

В мережі Біткоїн можуть виникати затримки з транзакціями та суттєве збільшення середньо-системної комісії за транзакції.

Зверніть увагу, що саме ви маєте можливість встановлювати зручну вам комісію за транзакції.

Ці затримки пов’язані з навантаженням на систему Біткоїн, яке створюють спам-транзакції різноманітних зловмисників, мета яких скомпрометувати систему Біткоїн, заблокувати її роботу, зробити її не зручною. Але вільна спільнота розробників постійно вдосконалює систему Біткоїн та виправляє недоліки.

Підтвердження транзакції відбувається в середньому кожні 10 хвилин.

Якщо транзакція яку ви відправляєте не потребує швидкого підтвердження, ви встановлюєте найнижчу комісію. В цьому випадку транзакція може підтверджуватися кілька годин.

Якщо вам потрібно швидке підтвердження транзакції, протягом 10-30 хвилин, варто встановлювати більш високу комісію.

Комісія за транзакції в системі Bitcoin

Комісія в системі Біткоїн вимірюється в біткоїнах за 1 байт. Кожна транзакція займає певний об’єм пам’яті в байтах, оскільки транзакція представляє собою текстову форму. Наприклад, стандартна біткоїн транзакція старого формату займає об’єм 225 byte. Транзакції в форматі SegWit займає об’єм 116 byte.

Найнижча комісія за транзакцію складає 0,00000001 btc за 1 byte, тобто для транзакції старого формату комісія буде 0,00000225 btc (0,43 грн.), для транзакцій SegWit формату комісія буде 0,00000116 (0,22 грн.) btc.

Проте об’єм пам’яті, який може займати транзакція різниться в залежності від кількості входів і виходів.

На даний момент максимальна комісія за транзакцію, яку пропоную біткоїн-гаманець Mycelium складає 0,00000015 btc/byte (3,40-6,60 грн. за стандартну транзакцію).

Сума комісії за транзакцію формується з попиту та пропозиції транзакцій в мемпулі. Якщо транзакцій багато, їх обробка займатиме більше часу, тому ті хто формує транзакцію обирають більшу комісію, і середня сума комісії зростає і навпаки.

Зазвичай біткоїн гаманець пропонує вам за замовчуванням середню вартість транзакції, але ви можете обрати як мінімальну комісію, так і встановити максимальну комісію, в залежності від того, як швидко вам треба підтвердження транзакції.

Максимальна теоретична транзакційна потужність мережі біткоїн становить 27 транзакцій на секунду.

Незручністю є те, що потрібно чекати підтвердження транзакції. В такому разі, може здаватися, що біткоїн не можна використовувати по всьому світу, бо пропускна здатність мережі для світового використання повинна бути до 25000 транзакцій на секунду.

Насправді рішення цього недоліку шукать, систему Біткоїн вдосконалюють. Вже працює надбудова системи Біткоїн Lightning Network, яка надає змогу здійснювати транзакції в біткоїнах поза межами системи Біткоїн. Теоретична пропускна здатність Lightning Network близько 500000 транзакцій на секунду. Lightning Network реалізовано, наприклад, в біткоїн-гаманці Eclair Wallet.