1. Біткойн фон

Біткойн приймає готівкову модель транзакцій (готівкову систему), а його метод оплати базується на моделі під назвою UTXO, яка відрізняється від традиційної моделі, заснованої на балансі рахунку. Наприклад: у процесі модельного обліку банківського рахунку, коли А переказує 100 юанів до Б, банк фіксує три кроки, які становлять процес транзакції. Першим кроком є ​​відрахування 100 юанів з рахунку A. Ідентифікатор запису цього кроку – tid1. Другим кроком є ​​внесення 100 юанів на рахунок B. Ідентифікатор запису цього кроку – tid2. Третій крок полягає в записі запису переказу, який пов’язує tid1 і tid2, вказуючи, що рахунок A зменшується на 100 юанів, а рахунок B збільшується на 100 юанів. Таким чином зв’язок передачі між А та В записується, і його можна запитувати та відстежувати в майбутньому. Тепер ми пояснимо спосіб оплати біткойнами через впровадження UTXO та платіжної моделі.

UTXO

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

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

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

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

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

const std::vector<CTxIn> vin;const std::vector<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;

Ми можемо випадковим чином вибрати запис транзакції на blockchain.com для аналізу. Він містить один вхід і два виходи.

Використовуючи команди bitcoin-cli getrawtransaction і decoderawtransaction, ми можемо переглянути базову структуру наведеної вище транзакції:

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sequence": 4294967295 }],"vout": [{"value": 0.01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"value": 0.084500 00,"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

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

Давайте подивимося на інформацію в «vin» у наведеному вище коді. Це вказує на те, що UTXO, витрачений цією транзакцією, надходить з 0-го виходу (вихід транзакції може бути множинним, індекс починається з 0), ми можемо знайти. сума цього UTXO з історичних транзакцій (наприклад, 0,1), тому в цій транзакції користувач витратив 0,1 BTC, і значення 0,1 не потрібно вказувати явно в транзакції, але через пошук можна отримати інформацію UTXO. "Vout" цієї транзакції має два виходи. Ці два виходи є двома новими UTXO, що відповідають новому балансу та власнику, доки інша транзакція не використає їх як вхідні дані.

Модель оплати

Щоб краще зрозуміти платіжну модель мережі Bitcoin, ми використовуємо приклад, щоб представити платіжний процес, у якому A платить B суму в n Bitcoin. На малюнку нижче показано, як користувач A надсилає 3 біткойни користувачеві B.

  1. Для користувача A, перш за все, необхідно визначити набір усіх UTXO, якими він володіє, тобто всі біткойни, якими користувач A може керувати;

  2. A вибирає один або кілька UTXO з цього набору як вхідні дані для транзакції. Сума цих введених даних дорівнює m (2+0,8+0,5=3,3 BTC), що перевищує суму, яку потрібно сплатити n (3 BTC). );

  3. Користувач A встановлює два виходи для транзакції, один вихід виплачується на адресу B, сума n (3 BTC), а інший вихід виплачується на власну адресу зміни A, сума m-n-fee (3,3-3-0,001 = 0,299 BTC). Гаманець користувача зазвичай складається з кількох адрес. Як правило, кожна адреса використовується лише один раз, а зміна повертається на нову адресу за замовчуванням.

  4. Після того, як майнер запакує транзакцію та завантажить її в ланцюг для підтвердження, B може отримати інформацію про транзакцію. Оскільки розмір блоку має верхню межу (приблизно 1 МБ), майнери віддадуть пріоритет транзакціям із високими ставками транзакцій (fee_rate=fee/size), щоб отримати найвищий прибуток. Ми можемо бачити ситуацію з комісіями за майнінгові операції в Мемпулі в реальному часі. Якщо ми хочемо отримати найшвидше підтвердження під час процесу передачі, ми можемо вибрати Високий пріоритет або налаштувати відповідну швидкість транзакції;

2. Нумерація та відстеження Cong

Загальна кількість біткойнів становить 21 мільйон, і кожен біткойн містить 10^8 сатоші (Satoshi, Sat). Таким чином, у мережі Bitcoin загалом 21 мільйон*10^8 сатоші. Протокол Ordinals розрізняє ці сатоші та надає кожному сатоші унікальний номер. У цьому розділі буде описано, як цей протокол унікально нумерує кожен сатоші та як він відстежує обліковий запис, якому він належить. Крім того, також буде введена класифікація рідкості Сатоши.

Номер Сатоші

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

Є багато способів вираження Сатоші:

  • Цілий символ: наприклад, 2099994106992659, який представляє серійний номер, призначений сатоші відповідно до порядку майнінгу.

  • Десяткове число: наприклад, 3891094.16797, перше число вказує на висоту блоку, де були видобуті сатоші, а друге число вказує на кількість сатоші в блоці.

  • Символ ступеня: наприклад, 3°111094′214″16797‴, перше число – період, пронумерований починаючи з 0, друге число – індекс блоку епохи роздвоєння, а третє число – індекс блоку під час складності період налаштування, останнє число є індексом sat у блоці.

  • Символ відсотка: наприклад, 99,99971949060254% вказує на позицію сатоші в пропозиції біткойнів, виражену у відсотках.

  • Ім'я: наприклад Satoshi. Ім’я, яке кодує порядковий номер за допомогою символів від a до z.

Ми використаємо приклад, щоб пояснити, як нумерувати нещодавно видобуті біткойни. Дивлячись на блок 795952 блокчейну Bitcoin, ми бачимо, що перша транзакція Tx 3a1f...b177 записує винагороду майнера (транзакція coinbase). Ця транзакція включає нещодавно видобуті біткойни, які використовуються як винагорода для майнерів, а також комісії за обробку, які сплачує майнерам ініціатор транзакції. Подивившись на вхідні дані на малюнку нижче, ми можемо виявити, що його ідентифікатор UTXO складається з рядка 0 і висоти блоку. Вихідна адреса — це адреса гаманця майнера, а сума — це сума вищезазначених винагород і комісій за обробку.

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

Ми можемо перевірити номер Sat 1941220000000000. Його номер блоку - 795952, а десяткова система запису (decimal) - 795952.0, що означає, що висота блоку майнінгу цього Сатоші дорівнює 795952, кількість Сатоші в цьому блоці - 0, а наступна позначка рідкості (рідкісності) є незвичайною. Ми це буде докладно пояснено в наступному розділі.

Тираж конг

Оскільки кожен BTC генерується за рахунок винагороди за майнінг, усі вони відстежуються. Облікові записи Bitcoin використовують модель UTXO. Припустимо, що користувач A отримує 100-110 сатоші за допомогою майнінгу (10 сатоші зберігаються як ціле в одному UTXO з ідентифікатором adc123). Коли користувач A хоче заплатити 5 сатоші користувачеві B, він вирішує використовувати ідентифікатор abc123 як вхідні дані транзакції, з яких 5 сатоші надаються користувачеві B, а 5 сатоші повертаються користувачеві A як здача. Ці дві копії 5 сатоші є одним цілим і зберігаються в двох UTXO з ідентифікаторами abc456 і abc789 відповідно. Наведений вище ідентифікатор UTXO та кількість сатоші наведені лише як приклади. У реальних ситуаціях мінімальна кількість надісланих сатоші обмежена 546, а ідентифікатор UTXO не вказується в цій формі.

У наведеній вище транзакції шлях обігу 10 сатоші користувача А є таким:

  1. Майнінг дає 10 сатоші, пронумеровані [100, 110). Це означає, що сатоші зі 100 по 109 зберігаються в UTXO з id abc123, а його власником є ​​користувач A.

  2. Коли А переказує гроші, 10 сатоші діляться на дві частини, кожна по 5 сатоші. Тут використовується принцип «першим прийшов, першим вийшов», тобто порядок номерів сатоші визначається відповідно до їх індексу у виведенні транзакції. Припустимо, що порядок виведення: спочатку користувач A, потім користувач B, потім порядковий номер решти 5 сатоші користувача A [100, 105), що зберігається в UTXO з ID abc456, а порядковий номер 5 сатоші користувача B дорівнює [105, 110), що зберігається в UTXO з ідентифікатором abc789.

Рідкість (рідкісні сатоші)

Як побічний продукт протоколу Ordinals, рідкість сатоші можна визначити на основі порядку їх видобутку. Це призведе до появи деяких особливих сатоші з різною рідкістю. Ось рівні рідкості різних сатоші:

  • загальний: будь-який сатоші, крім першого сатоші в блоці (загальна пропозиція становить 2100 трильйонів)

  • незвичайні: перші сатоші в кожному блоці (загальний запас становить 6 929 999)

  • рідко: перші сатоші кожного періоду налаштування складності (загальний запас 3437)

  • epic: перші сатоші після кожного халвінгу (загальний запас становить 32)

  • легендарний: перші сатоші кожного циклу (загальний запас становить 5)

  • міфічний: перші сатоші в блоці генезису (загальний запас становить 1)

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

3. Спосіб напису

Ординали суттєво відрізняються від NFT в інших ланцюгах, які не є біткойнами. Основна відмінність полягає в тому, що метадані Ordinals не зберігаються в певному місці. Натомість ці метадані вбудовані в дані свідка транзакції (дані свідка, поле свідка), тому ми називаємо це «написом», оскільки ці дані «вигравірувані» в біткойн, як напис на певній частині транзакції, дані прикріплюються до конкретного Сатоші. Цей процес запису реалізується через Segregated Witness (SegWit) і Pay-to-Taproot (P2TR), який включає два етапи: фіксація та розкриття, які можуть будь-яку форму вмісту (наприклад, текст, зображення чи відео) вписувати в призначений Сатоші. Нижче ми представимо інший більш прямий метод зберігання OP_RETURN і пояснимо, чому він не використовується як засіб напису. Водночас ми розповімо, що таке Segregated Witness і Pay-to-Taproot, і які ролі вони відіграють у Inscription. Нарешті ми представимо метод напису.

OP_RETURE

У клієнті Bitcoin Core версії 0.9 компромісу було нарешті досягнуто завдяки застосуванню оператора RETURN. **ПОВЕРНЕННЯ дозволяє розробникам додавати 80 байт даних про несплату до вихідних даних транзакції. **На відміну від псевдоплатежів, RETURN створює неспоживаний результат, який можна явно перевірити, який не потрібно зберігати в наборі UTXO. Виходи RETURN записуються в ланцюжок блоків. Вони займають дисковий простір і збільшують розмір ланцюжка блоків, однак вони не зберігаються в наборі UTXO, тому вони не розширять пул пам’яті UTXO і не збільшать кількість повних вузлів. Висока вартість пам'яті.

Хоча OP_RETURN є дуже простим засобом зберігання інформації в блокчейні біткойн, це також потенційний метод запису. Але обмеження OP_RETURN змушують його стикатися з деякими проблемами під час роботи зі зберіганням метаданих. По-перше, OP_RETURN може зберігати лише 80 байт даних. Для ситуацій, коли потрібно зберігати більші обсяги даних, це обмеження, очевидно, є незадовільним. По-друге, дані OP_RETURN зберігаються у вихідній частині транзакції. Хоча ці дані не зберігаються в наборі UTXO, вони займають простір для зберігання блокчейну, що призводить до збільшення розміру блокчейну. Нарешті, використання OP_RETURN призводить до вищих комісій за транзакції, оскільки для публікації цих транзакцій потрібно платити більше.

Сегрегований свідок

Навпаки, новий метод, наданий SegWit, може подолати вищевказані проблеми. SegWit — це важливе оновлення протоколу для біткойнів. Його запропонував розробник ядра біткойна Пітер Вуїлле в 2015 році, а в 2017 році він був офіційно прийнятий у версії 0.16.0. Сегрегований у Segregated Witness означає відокремлення та ізоляцію. Тому SegWit відокремлює певні дані підпису транзакції (дані свідків) від транзакції.

Головною перевагою відокремлення підписів від даних, пов’язаних з транзакціями, є зменшення розміру даних, що зберігаються в блоці Bitcoin. Це має додаткову ємність на блок для зберігання більшої кількості транзакцій, що також означає, що мережа може обробляти більше транзакцій, а відправники сплачують менші комісії. Технічно кажучи, це означає вилучення інформації про підпис сценарію (scriptSig) із базової структури (базового блоку) і розміщення її в новій структурі даних. Вузли та майнери, які виконують роботу з перевірки, також перевірять підпис сценарію в цій новій структурі даних, щоб переконатися, що транзакція дійсна. Оновлення Segwit представляє нове поле-свідок у вихідних даних транзакцій для забезпечення конфіденційності та продуктивності. Хоча дані свідків не призначені для зберігання даних, вони насправді дають нам можливість зберігати такі речі, як метадані написів. Ми використовуємо наступний малюнок, щоб краще зрозуміти сегрегований свідок:

Стрижневий корінь

P2TR — це тип виведення транзакцій біткойна, який було представлено в оновленні Taproot у 2021 році, що дозволяє більш конфіденційно зберігати різні умови транзакцій у блокчейні. У написі ординалів P2TR відіграє важливу роль. Inscription по суті вбудовує певний вміст даних у транзакції Bitcoin, а оновлення Taproot, особливо P2TR, роблять таке вбудовування даних більш гнучким і економічним.

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

Такий підхід значно скорочує споживання ресурсів. Якщо P2TR не використовується, інформація про свідка буде збережена у вихідних даних транзакції. Таким чином, до тих пір, поки цей вихід не буде використано, інформація про свідків завжди зберігатиметься в наборі UTXO. Навпаки, якщо використовується P2TR, інформація про свідка не з’явиться в транзакції, згенерованій під час фази фіксації, тому вона не буде записана в набір UTXO. Лише коли цей UTXO використано, інформація про свідка з’явиться у вхідних даних транзакції під час фази розкриття. P2TR дозволяє записувати метадані в блокчейн Bitcoin, але ніколи не з’являється в наборі UTXO. Оскільки підтримка/модифікація набору UTXO вимагає більше ресурсів, цей підхід може заощадити багато ресурсів.

напис

Протокол Ordinals використовує переваги SegWit, щоб зменшити обмеження на розмір вмісту, записаного в мережу Bitcoin, зберігаючи вміст напису в даних-свідках. Дозволяє зберігати до 4 МБ метаданих. Taproot спрощує зберігання довільних свідкових даних у транзакціях біткойн, дозволяючи розробнику Ordinals Кейсі Родармору перепрофілювати старі коди операцій (OP_FALSE, OP_IF, OP_PUSH) у те, що він описує як «конверти» для того, що він називає «написом» для зберігання довільних даних.

Процес відливання написів складається з наступних двох етапів:

  1. По-перше, вам потрібно створити транзакцію фіксації для вихідних даних Taproot сценарію, що містить вміст напису. Формат зберігання — Taproot, тобто вихідні дані попередньої транзакції — P2TR (Pay-To-Taproot), а вхідні дані наступної транзакції вбудовано в певний формат у сценарії Taproot; спочатку — рядок ord висунуто на стек, щоб усунути двозначність того, що напис мав інше використання. OP_PUSH 1 вказує, що наступне надсилання містить тип вмісту, а OP_PUSH 0 вказує, що наступні надсилання даних містять сам вміст. Великі написи повинні використовувати багаторазові надсилання даних, оскільки одне з небагатьох обмежень Taproot полягає в тому, що розмір одного надсилання даних не може перевищувати 520 байт. Наразі дані напису було зіставлено з UTXO виводу транзакції, але не було оприлюднено.

  2. По-друге, вихідні дані, створені транзакцією фіксації, повинні бути використані в транзакції розкриття. На цьому етапі транзакція ініціюється за допомогою UTXO, що відповідає цьому напису, як вхід. У цей час відповідний зміст напису оприлюднили весь Інтернет.

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

Ми детально пояснимо цей процес на прикладі гравіювання невеликого зображення BTC NFT. Цей процес в основному включає два етапи фіксації та розкриття, згадані раніше. По-перше, ми бачимо, що ідентифікатор хешу першої транзакції 2ddf9...f585c. Можна зазначити, що вихідні дані цієї транзакції не містять даних свідків, а на веб-сторінці немає відповідної інформації про написи.

Далі перевіряємо запис другого етапу, хеш-ідентифікатор якого e7454...7c0e1. Тут ми можемо побачити інформацію ординального напису, яка є змістом напису свідчення. Вхідна адреса цієї транзакції є вихідною адресою попередньої транзакції, а вихідна сума 0,00000546 BTC (546 сатоші) призначена для надсилання цього NFT на вашу власну адресу. У той же час ми також можемо знайти сатоші, де знаходиться цей напис в Sat 1893640468329373.

У біткойн-гаманці ми можемо побачити цей актив. Якщо ми хочемо торгувати цим NFT, ми можемо надіслати його безпосередньо на адреси інших людей, тобто надіслати цей UTXO, таким чином завершивши передачу напису.

4. Біткойн гаманець

Після того, як ми зрозуміємо, що таке порядкова екологія, циркуляція сатоші та відповідні знання про написи, наразі існує багато сценаріїв застосування, будь то поява BRC-20, ORC-20, BRC-721, GBRC-721 та інші пов’язані похідні протоколи, які вимагають, щоб у нас були відповідні гаманці для підтримки та відображення інформації про токени або маленьких зображень NFT. У цьому розділі ми познайомимося з поняттями та характеристиками різних адрес гаманців Bitcoin.

Адреси Bitcoin починаються з 1, 3 або bc1. Як і адреси електронної пошти, ними можна ділитися з іншими користувачами біткойнів, які можуть використовувати їх для надсилання біткойнів безпосередньо на власні гаманці. З точки зору безпеки, біткойн-адреси не містять нічого конфіденційного. Його можна опублікувати будь-де без шкоди для безпеки вашого облікового запису. На відміну від адрес електронної пошти, нові адреси можна створювати в будь-який час за потреби, і всі вони надсилатимуть кошти безпосередньо у ваш гаманець. Насправді багато сучасних гаманців автоматично створюють нову адресу для кожної транзакції, щоб забезпечити максимальну конфіденційність. Гаманець — це просто набір адрес і ключів, які відкривають кошти в ньому. Спочатку нам потрібно знати, як генерується адреса біткоін-гаманця.

Приватний і відкритий ключі Bitcoin

Біткойн використовує еліптичну криву Secp256k1. Це випадкове число від 1 до n-1 (256 біт).

Цей діапазон надзвичайно великий, і нам майже неможливо вгадати особисті ключі інших людей. Цей випадковий цілочисельний закритий ключ може бути представлений 256 бітами, і існує кілька методів кодування. Якщо приватний ключ у WIF або WIF-стиснутій формі не зашифровано, оригінальне «випадкове ціле число» можна отримати шляхом його декодування. Інший спосіб - це BIP38, який пропонує використовувати алгоритм AES для шифрування приватного ключа, отриманого цим методом, який починається з символу 6P, перш ніж його можна буде імпортувати в різні біткойн-гаманці. Це те, що ми зазвичай робимо.

Потім ми використаємо формулу еліптичної кривої K = kG, щоб згенерувати відкритий ключ біткойна K із приватного ключа k, який є базовою точкою, яка є параметром secp256k1. Можна отримати дві координати K, які є двома виразами відкритого ключа, а саме «Нестиснутий формат» і «Стиснутий формат».

  • Нестиснена форма — це пряме з’єднання двох координат x і y разом, а потім додавання префікса 0x04 спереду;

  • Стиснута форма означає, що коли y — парне число, кодування — 02 x, а коли y — непарне число, кодування — 03 x;

Bitcoin-адреса

Різні типи біткойн-адрес показані на малюнку нижче. Існує чотири методи представлення:

Довідка: https://en.bitcoin.it/wiki/Invoice_address

1. Застарілий (P2PKH) формат

Приклад: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Адреси, що починаються з «1», є оригінальним форматом адреси біткойнів і використовуються досі. Він обчислюється з відкритого ключа через хеш, також відомий як P2PKH, що є абревіатурою Pay To PubKey Hash (оплата за хеш відкритого ключа).

2. Вкладений формат SegWit (P2SH).

Приклад: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

Адреса починається з «3», а P2SH — це абревіатура Pay To Script Hash, яка підтримує складніші функції, ніж застарілі адреси. Вкладений P2SH приймає наявну адресу P2SH (починається з «3») та інкапсулює її з адресою SegWit.

3. Власний формат SegWit (Bech32).

Приклад: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Адреси, що починаються з bc1, запропоновані в BIP0173, це рідні адреси SegWit. Адреса в кодуванні Bech32 — це формат адреси, спеціально розроблений для SegWit. Bech32 було визначено в BIP173 наприкінці 2017 року. Однією з головних особливостей цього формату є те, що він нечутливий до регістру (адреса містить лише 0-9, a-z), тому він може ефективно уникнути плутанини під час введення та є більш читабельним . Оскільки в адресі потрібно менше символів, адреса використовує кодування Base32 замість традиційного Base58, що робить обчислення більш зручними та ефективними. Дані можна надійніше зберігати в QR-кодах. Bech32 забезпечує більшу безпеку, краще оптимізований код виявлення помилок контрольної суми та мінімізує ймовірність недійсних адрес.

Самі адреси Bech32 сумісні з SegWit. Для розміщення адреси SegWit в адресі P2SH не потрібен додатковий простір, тому плата за обробку буде нижчою за використання адреси у форматі Bech32. Адреси Bech32 мають кілька переваг перед старішими кодуваннями Base58 (для кодування масивів біткойнів у кодовані людиною) адреси менші, більш безпечні; великі та малі літери не розрізняються; , тому його легше читати, друкувати та розуміти.

4. Кореневий формат (P2TR)

У Bech32 є недолік: якщо останнім символом адреси є p, то вставка або видалення будь-якої кількості символів q безпосередньо перед p не призведе до втрати контрольної суми.

Щоб усунути вищезазначені недоліки Bech32, у BIP0350 була запропонована адреса Bech32m:

  • Для власних адрес SegWit версії 0 використовуйте попередній Bech32;

  • Для власних адрес SegWit версії 1 (або вище) використовується новий Bech32m.

Для адрес Bech32m, коли версія 1, вони завжди починаються з bc1p (тобто адреси Taproot). Зокрема, як і рідний SegWit, гаманець може складатися з вихідної фрази та парольної фрази. Вони використовуються для створення розширених відкритих і приватних ключів, які використовуються для отримання адрес для довільних шляхів в ієрархічному детермінованому гаманці. В основному він зберігає BRC-20 і BTC NFT тощо.