Транзакції в системі Біткоїн

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

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

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

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

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

Різниця між банківською системо та системою Біткоїн полягає в наступному:

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

Зверніть увагу, система Біткоїн не потребує ваших особистих даних, на відміну від банківської системи!

Що відбувається коли ви запускаєте біткоїн-гаманець?

Програма, використовуючи метод асиметричного шифрування (public key cryptography, asymmetrical cryptography), генерує пов’язану пару рядків:

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

УВАГА! Приватний ключ надає вам право розпоряджатись, передавати біткоїни на інші біткоїн-адреси. Пари приватний/публічний ключі необхідно записувати в паперовий блокнот вологостійкими чорнилами та зберігати його від негативних впливів середовища і доступу будь-який інших осіб окрім вас (навіть родичів).

ЗАПАМ’ЯТАЙТЕ! Якщо ви втратите ваші приватні ключі, ви назавжди втратите доступ до управління біткоїнами. Відновити доступ до ваших біткоїнів буде неможливо!

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

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

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

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

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

Коли учасник 1 створює транзакцію, в певні текстові сектори записуються дані:

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

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

Нижче показано ланцюг з таких транзакцій:

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

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

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

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

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

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

Підтвердження транзакцій.

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

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

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

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

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

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

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

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

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

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

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

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

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

Транзакції в системі Біткоїн обновлено: 8 Вересня, 2018 автором: SchBit