З народженням Протоколу Ординалів він надав Біткойну функцію нумерації та напису, тим самим розширюючи асортимент продуктів екосистеми Біткойн та приносячи нову живість екосистемі Біткойн. У цій статті ми розглянемо деталі Протоколу Ординалів, включаючи те, як кожен Біткойн нумерується та відстежується, а також взаємозв'язок між написами та номерами. Проте, перш ніж ми заглибимось у цю тему, нам потрібно спочатку зрозуміти деякі основи Біткойну, щоб допомогти нам краще зрозуміти те, що наступить.
Після прочитання цієї статті ви оволодієте механізмом транзакцій та моделлю платежів Bitcoin, дізнаєтеся, як Ординали можуть нумерувати та відстежувати кожен Сатоші, а також як створюються та торгуються написи. Також ви дізнаєтеся про відмінності між різними типами гаманців.
Біткойн використовує модель транзакцій, схожу на готівку (грошова система), а його спосіб оплати заснований на моделі під назвою UTXO, яка відрізняється від традиційної моделі, заснованої на залишках на рахунках. Наприклад, у процесі бухгалтерського обліку банку, коли А переводить 100 юанів до Б, банк записує три кроки. Ці три кроки формують процес транзакції. Насамперед потрібно списати 100 юанів з рахунку А. Ідентифікатор запису для цього кроку – tid1. Другим кроком є внесення 100 юанів на рахунок Б. Ідентифікатор запису для цього кроку – tid2. Третім кроком є запис про передачу. Цей запис пов'язує tid1 і tid2, що вказує на зменшення на 100 юанів для рахунку A і збільшення на 100 юанів для рахунку B. Таким чином, зв'язок передачі між А і В реєструється і може бути запитаний і відстежений в майбутньому. Тепер ми пояснимо способи оплати Bitcoin через вступ до UTXO та моделей оплати.
У блокчейні Bitcoin всі залишки зберігаються у списку, який називається «Невикористаними вихідними транзакціями (UTXO)» (Невикористані вихідні транзакції). Кожен UTXO містить певну кількість біткоїнів, разом із інформацією про власників цих біткоїнів, та вказує, чи вони доступні. Уявіть його як грошовий чек із ім'ям власника на ньому. Поки власник підписує його, ви можете передати право використання його іншій особі. Для конкретної адреси всі суми її UTXO складаються з балансу гаманця цієї адреси. Пройшовши всі UTXO, ми можемо отримати поточний баланс для кожної адреси. Сума всіх сум у UTXO - це загальна кількість біткоїнів, які зараз перебувають в обігу.
У структурі транзакцій Bitcoin кожна транзакція включає кілька входів і виходів. Кожен вхід є посиланням на існуючий UTXO, і кожен вихід вказує нову адресу надходження коштів і відповідну суму. Після ініціювання транзакції UTXO, на який посилається розділ введення, тимчасово блокується, щоб запобігти повторному використанню, доки транзакція не буде завершена. Тільки коли транзакція буде успішно упакована майнером у блок (Block) і підтверджена мережею, відповідний статус UTXO зміниться. Зокрема, UTXO, які використовуються для введення транзакцій, будуть видалені зі списку UTXO, що вказує на те, що вони були використані, а вихідні дані транзакції згенерують новий UTXO та додадуться до списку UTXO. Можна зрозуміти, що старий грошовий чек був використаний, а потім став недійсним, створивши новий грошовий чек, який належав новому власнику.
Варто підкреслити, що кожен UTXO може бути використаний лише один раз у одній транзакції. Як тільки він використаний як вхід, він назавжди видаляється зі списку UTXO. Тим часом, новостворений вихідний сигнал додається до списку як новий UTXO. Список UTXO постійно змінюється, і при створенні кожного нового блоку він відповідно оновлюється. Також, аналізуючи історію транзакцій в блокчейні, ми можемо відновити стан списку UTXO в будь-який момент часу.
Також загальна сума введення угоди зазвичай трохи перевищує загальну суму виведення. Ця різниця, яку називають комісією за угоду (комісія за угоду) або мережевою комісією (мережева комісія), надається як стимул для майнерів, відповідальних за упакування угод в блоки. Розмір мережевої комісії пропорційний складності угоди, тому угода з більшою кількістю введень та виведень зазвичай потребує вищої мережевої комісії.
Тепер, щоб краще зрозуміти структуру транзакцій Bitcoin, ми проведемо глибинний аналіз на конкретному прикладі. Структура транзакцій Bitcoin виглядає наступним чином. Два змінні vin та vout представляють "вхід" та "вихід" транзакції Bitcoin відповідно. Транзакції Bitcoin не схожі на традиційні моделі облікового балансу, які реєструють зміни даних облікових записів, а вони виражені через вхід та вихід.
Ми можемо випадково вибрати запис операції на blockchain.com для аналізу. На рисунку нижче показано, що Ідентифікатор хешу - це транзакція 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5f5fbd8a57286c345c2f2. Вона містить один вхід і два виходи.
За допомогою команд bitcoin-cli getrawtransaction та decoderawtransaction ми можемо переглянути базову структуру вищезазначеної транзакції:
У мережі Bitcoin вихід операції містить два важливі елементи інформації: адресу (хеш публічного ключа) та суму (в біткоїнах). Якщо вихід однієї операції не використовується в вході іншої операції, то цей вихід операції називається не витраченим вихідом операції (UTXO). Хто має приватний ключ, який відповідає публічному ключу в UTXO, має право використовувати (тобто витрачати) цей UTXO.
Давайте подивимося інформацію в "vin" вищезазначеному коді, яка вказує на те, що UTXO, витрачений на цій біржі, походить з іншої транзакції (її ідентифікатор - 7957a35fe64f80d234d76d83a2a8a0d8a0d149a41d81de548f0a65a8a999f6f18). Ми можемо знайти суму цього UTXO з історичних транзакцій (наприклад, 0,1). Таким чином, у цій транзакції користувач витратив 0,1 BTC. Значення 0,1 не потрібно явно записувати в транзакцію, але воно отримується шляхом пошуку інформації про UTXO. "vout" цієї транзакції має два виходи. Ці два виходи - два нові UTXO, що відповідають новому балансу та власнику до того часу, поки інша транзакція їх не використає як вхід.
Загальна кількість біткоїнів становить 21 мільйон, а кожен біткоїн містить 10^8 Сатоші (Сатоші, Сат). В результаті на мережі Біткоїн є 21 мільйон*10^8 сатоші. Протокол Ordinals розрізняє ці Сатоші та унікально нумерує кожний Сатоші. У цьому розділі пояснюється, як ця угода унікально нумерує кожний Сатоші та відстежує рахунок, в якому він знаходиться. Додатково буде представлена класифікація рідкісності для Сатоші.
Згідно з Угодою про порядкові числа, Сатоші нумеруються в порядку, в якому вони були добувані. На рисунку нижче показано, як 0-й Сатоші представлений 0-м блоком.
Є багато способів виразити Сатоші:
Ми скористаємося прикладом, щоб пояснити, як нумерувати нові добуті біткоїни. Подивившись на 795952-й блок ланцюжка блоків Біткоїн, ми бачимо, що перша транзакція Tx 3a1f… b177 зафіксувала винагороду майнера (транзакція Coinbase). У транзакцію включені нові добуті біткоїни, які є упакованими винагородами для майнерів, а також комісії, виплачені майнерам ініціатором транзакції. Подивившись на вхід на зображенні нижче, ми бачимо, що його ID UTxO складається з рядка нулів та висоти блоку. Адреса виводу - це адреса гаманця майнера, а сума - це сума вищезгаданих винагород і комісій.
Якщо ми придивимося до розділу виводу для майнерів, ми побачимо адресу, суму та розподіл включеного Сатоші. Як вже зазначалося, серед них знаходяться винагороди за видобуток та комісії. Серед них інформація з числом зелених Сатоші 1941220000000000-1941220625000000 - це нові Сатоші, згенеровані винагородами за видобуток, а решта 712 записів Сатоші відповідають всім комісійним винагородам у цьому блоку.
Ми можемо перевірити номер Сат 1941220000000000. Його номер блоку - 795952, а десятковий символ (десятковий) - 795952,0, що означає, що висота блоку для видобутку цього Сатоші - 795952, номер у цьому блоку - 0, і рідкість (рідкість), яка йде внаслідок, позначена як незвичайна, про що ми розглянемо докладніше в подальших розділах.
Оскільки кожен BTC генерується за рахунок винагороди за майнінг, усі вони можна відстежити. Біткойн-рахунки використовують модель UTXO. Припустимо, користувач A отримав від 100-го до 110-го Satoshi шляхом майнінгу (10 Satoshi зберігаються в цілому в UTXO з тим же ідентифікатором adc123). Коли користувач А хоче заплатити користувачеві B 5 Satoshi, він вирішує використовувати ідентифікатор abc123 як вхідні дані для транзакції. З них 5 Сатоші віддаються користувачеві Б, а 5 Сатоші повертаються користувачеві А у вигляді нулів. Ці дві копії 5 Сатоші є цілим, що зберігається в двох UTXO з ідентифікаторами abc456 і abc789 відповідно. Кількість ідентифікаторів UTXO та Satoshi, згаданих вище, показана лише як приклад. За фактичних обставин мінімальна кількість надісланих Сатоші обмежена 546, і ідентифікатори UTXO не виражаються в цій формі.
У вищезазначеній транзакції шляхи переказу 10 Сатоші користувача A:
Як похідний від Протоколу порядків, рідкість Сатоші може бути визначена на основі порядку, в якому вони добуваються. Це призведе до того, що деякі особливі Сатоші матимуть різні рівні рідкості. Ось наскільки рідкісними є різні типи слухання:
Ця рідкісна та розумна концепція може додати більше задоволення та цінності до екосистеми Біткойну. Сатоші різної рідкості можуть мати різні значення на ринку, привертаючи колекціонерів та інвесторів.
Ordinals значно відрізняється від інших ончейн-NFT, які не належать до Bitcoin. Серед них основна відмінність полягає в тому, що метадані Ordinals не зберігаються в певному місці. Замість цього ці метадані вбудовуються в дані свідка транзакції (поле свідка), тому ми називаємо їх « напис (напис) », тому що ці дані «вигравірувані» як напис на певній частині транзакції Біткойн, і ці дані Він прикріплений до конкретного Сатоши. Цей процес напису досягається за допомогою сегрегованого свідка (SegWit) і «pay-to-taproot (P2TR)» (pay-to-taproot (P2TR)). Він включає два етапи: подання (фіксація) та розкриття (розкриття), і може гравірувати будь-яку форму контенту (наприклад, текст, зображення чи відео) на спеціальній смарт-дошці. Нижче ми представимо інший, більш прямий спосіб зберігання, OP_RETURN і пояснимо, чому він не використовувався як засіб написів. У той же час ми розповімо, що таке сегрегований свідок і платний корінь, і яку роль вони відіграють у написі. В кінці ми познайомимо з тим, як робляться написи.
У версії 0.9 клієнта Bitcoin Core було досягнуто компроміс, використовуючи оператор RETURN. **RETURN дозволяє розробникам додавати 80 байтів неплатіжних даних до виведення транзакції. **У відміну від фіктивних платежів, RETURN створює недвозначно перевірене неспоживче виведення; такі дані не потрібно зберігати в наборі UTXO. Виведення RETURN записуються в ланцюжок блоків. Вони споживають місце на диску та також призводять до збільшення розміру ланцюжка блоків, але оскільки вони не зберігаються в концентрації UTXO, вони не розширюють пам'ять пулу пам'яті UTXO, не кажучи вже про збільшення вартості пам'яті для всього вузла.
Хоча OP_RETURN є дуже прямим засобом зберігання інформації на блокчейні Bitcoin, він також є потенційним методом напису. Однак обмеження OP_RETURN призводять до труднощів у справі зберігання метаданих. По-перше, OP_RETURN може зберігати лише 80 байтів даних, і в ситуаціях, де потрібно зберігати більше даних, це обмеження очевидно неможливо виконати. По-друге, дані OP_RETURN зберігаються в розділі виводу транзакції. Хоча ці дані не централізовано зберігаються в UTXO, вони займають місце на блокчейні, що призводить до збільшення розміру блокчейну. Нарешті, використання OP_RETURN призводить до збільшення комісій за транзакції, оскільки для їх публікації потрібно платити більше.
Навпаки, SegWit надає новий підхід, який може подолати ці проблеми. SegWit є важливим протокольним оновленням для Біткойну. Воно було запропоновано розробником ядра Біткойну Пітером Вуілле в 2015 році і офіційно прийнято у версії 0.16.0 в 2017 році. Розділення в розділеному свідку означає розділення або ізоляцію, а свідок - це підпис, що стосується транзакції. Таким чином, SegWit відокремлює певні дані транзакційного підпису (дані свідків) від транзакцій.
Основною перевагою відокремлення підписів від даних, пов'язаних із транзакціями, є зменшення розміру даних, що зберігаються в блоці Bitcoin. Таким чином, кожен блок має додаткову ємність для зберігання більшої кількості транзакцій, що також означає, що мережа може обробляти більше транзакцій, а відправник сплачує нижчу комісію за обробку. З технічної точки зору, інформація про сигнатуру скрипта (scriptSig) береться з базової структури (базового блоку) і поміщається в нову структуру даних. Вузли та майнери, які виконують роботу з верифікації, також перевірятимуть підписи скриптів у цій новій структурі даних, щоб переконатися, що транзакції дійсні. Оновлення Segwit представило нове поле свідка у виводі транзакцій для забезпечення конфіденційності та продуктивності. Хоча дані свідків не призначені для зберігання даних, вони фактично дають нам можливість зберігати такі речі, як метадані написів. Давайте скористаємося наступним зображенням, щоб краще зрозуміти свідка карантину:
P2TR - це тип виводу транзакції для Біткойну. Він був представлений у оновленні Taproot у 2021 році. Це дозволяє зберігати різні умови транзакції більш приватно на блокчейні. У написі Ordinals P2TR відіграє критичну роль. По суті, напис вбудовує конкретний вміст даних у транзакції Біткойн, а оновлення Taproot, зокрема P2TR, зробили ці вбудовані дані більш гнучкими та економічними.
Спочатку, через метод зберігання скриптів Taproot, ми можемо зберігати вміст напису в шляху витрат скриптів Taproot. Ці скрипти майже не мають обмежень на вміст, і водночас також можуть отримувати знижки на дані свідків, що робить зберігання вмісту напису відносно економічним. Оскільки витрата скрипту Taproot може бути здійснена лише з виводу Taproot, що вже існує, напис використовує двоетапний процес подання/розкриття. Спочатку, при поданні транзакції, було створено вивід Taproot, який обіцяв скрипт, що містить вміст напису. Потім, у транзакції розкриття, вивід, створений поданням транзакції, був витрачений, тим самим розкриваючи вміст напису в ланцюгу.
Цей підхід значно зменшив споживання ресурсів. Якщо P2TR не використовується, інформація свідка зберігається в виході транзакції. Таким чином, доки цей вихід не буде використаний, інформація свідка завжди буде зберігатися в пулі UTXO. Навпаки, якщо використовується P2TR, інформація свідка не з'являтиметься в транзакціях, згенерованих під час етапу подання, тому вона не буде записана в набір UTXO. Лише коли цей UTXO витрачається, інформація свідка з'являється в вході транзакції під час фази розкриття. P2TR дозволяє записувати метадані на блокчейн Bitcoin, але вони ніколи не з'являються в UTXO. Оскільки підтримка/зміна наборів UTXO потребує більше ресурсів, цей підхід може заощадити значні ресурси.
Протокол Ordinals використовував SegWit для послаблення обмежень на розмір контенту, записаного в мережу Bitcoin, зберігаючи вміст напису в дані свідка. Це дозволяє зберігати до 4 МБ метаданих. Taproot упрощує зберігання довільних даних свідків у транзакціях Bitcoin, дозволяючи розробнику Ordinals Кейсі Родамору використовувати старі опкоди (OP_FALSE, OP_IF, OP_PUSH) для зберігання довільних даних в тому, що він описав як «конверт», що називається «напис».
Процес відливання напису складається з наступних двох кроків:
Спочатку потрібно створити обіцянку в операції надсилання до виводу Taproot скрипта, що містить вміст напису. Формат зберігання - Taproot, тобто вивід попередньої операції є P2TR (Pay-To-Taproot), а вхід наступної операції вбудовує вміст у конкретному форматі в побаченому Taproot скрипті; рядок ord спочатку накладається, щоб усунути неоднозначність, що напис має інші використання. OP_PUSH 1 вказує, що наступне натискання містить тип вмісту, а OP_PUSH 0 вказує, що наступні дані містять сам вміст. Великі написи повинні використовувати кілька натискань даних, оскільки одним з небагатьох обмежень taproot є те, що одне натискання даних не може бути більшим за 520 байтів. На цьому етапі дані напису були застосовані до виводу UTXO операції, але вони не були розкриті.
По-друге, необхідно розкрити вихід, створений транзакцією подання покупки в транзакції. На цьому етапі транзакцію ініціюється за допомогою використання UTXO, що відповідає цьому напису як вхід. На цей момент вміст відповідного напису був зроблений загальнодоступним для всієї мережі.
Через вищезазначені два кроки вміст напису було пов'язано з вибитим UTXO. Також, згідно з позиціонуванням Сатоші, описаним вище, напис виконується на першому Сатоші, що відповідає введенню UTXO, і вміст напису включений у введення, що показує транзакцію. Згідно з вступом до обігу та відстеження Сатоші, описаним вище, цей Сатоші, який вибитий з особливим вмістом, може бути переданий, куплений, проданий, втрачений та відновлений. Зверніть увагу, що написи не можуть бути повторені, інакше наступні написи будуть недійсними.
Ми детально пояснимо цей процес, розписавши приклад невеликого зображення BTC NFT. Цей процес в основному включає два етапи подання (зобов'язання) та розкриття (виявлення), згадані раніше. По-перше, ми бачимо, що хеш-ідентифікатор для першої транзакції - 2ddf9... f585c. Можна зауважити, що вихід цієї транзакції не містив даних свідків, і на сторінці не було відповідної написи.
Далі давайте подивимося на запис другого етапу. Ідентифікатор хешу - e7454 ... 7c0e1. Тут ми можемо побачити інформацію про написи упорядкованих, тобто вміст свідчення. Вхідна адреса для цієї операції - це вихідна адреса попередньої операції, а вихід 0.00000546 BTC (546 Сатоші) відправляє цей NFT на свою власну адресу. Тим часом ми також можемо використовувати Sat Find Satoshi, де знаходиться цей напис за номером 1893640468329373.
У гаманці Bitcoin ми бачимо цей актив. Якщо ми хочемо торгувати цим NFT, ми можемо відправити його безпосередньо на адресу іншої особи, тобто відправити цей UTXO, і це завершує обіг напису.
Після того, як ми ознайомилися з екосистемою Ординалів, циркуляцією Сатоші та пов'язаними знаннями про написи, наразі існує багато сценаріїв застосування. Чи то це поява відповідних похідних угод, таких як BRC-20, ORC-20, BRC-721, GBRC-721 тощо, нам потрібен відповідний гаманець для підтримки та відображення інформації токенів або невеликих зображень NFT. У цьому розділі ми розглянемо концепції та характеристики різних адрес гаманців Bitcoin.
Адреси Bitcoin починаються з 1, 3 або bc1. Точно так само, як адреси електронної пошти, їх можна обмінювати з іншими користувачами Bitcoin, які можуть використовувати їх для надсилання біткойнів безпосередньо на свої гаманці. З точки зору безпеки, адреси Bitcoin не містять ніякого чутливого вмісту. Їх можна публікувати де завгодно, не ризикуючи безпекою облікового запису. На відміну від адрес електронної пошти, ми можемо створювати нові адреси в будь-який час, всі з яких будуть безпосередньо зараховані на ваш гаманець. Насправді, багато сучасних гаманців автоматично створюють нову адресу для кожної транзакції для максимізації конфіденційності. Гаманець просто є збіркою адрес і ключів для розблокування коштів в ньому. Спочатку нам потрібно знати, як генерується адреса гаманця Bitcoin.
Біткойн використовує еліптичну криву secp256k1. "Приватний ключ" - це випадкове число між 1 та n-1. n - велике число (256 бітів), і n виражається в науковій нотації приблизно 1.15792*10^77. Обсяг великий, і майже неможливо вгадати приватні ключі інших людей. Це випадкове ціле приватний ключ може бути використаний 256 бітами вказують, що є багато способів кодування. Якщо приватний ключ, використовуючи WIF або WIF-стиснений, не зашифрований, оригінальне "випадкове ціле" можна отримати розкодуванням. Інший метод - BIP38. Запропоновано використовувати алгоритм AES для шифрування приватного ключа. Приватний ключ, отриманий за цією схемою, починається з символу 6P. Цей приватний ключ повинен бути імпортований в різноманітні гаманці для Біткойн. Це приватний ключ, який ми зазвичай використовуємо.
Потім ми використаємо формулу еліптичної кривої K = kG для генерації публічного ключа Bitcoin K з приватного ключа k. G є базовою точкою, яка є параметром secp256k1. Ви можете отримати дві координати K, які є двома виразами публічного ключа, відповідно "Не стиснутий формат" та "Стиснутий формат".
Різні типи адрес Bitcoin можна побачити на наступній фігурі. Є чотири способи виразу їх:
1.Формат спадщини (P2PKH)
Приклад: 1fh7ajxabjbpzw8bjd3qu4cuq3prty9u
Адреси, що починаються з «1», є початковим форматом адреси Bitcoin і досі використовуються. Отримано з відкритого ключа за допомогою розрахунку хешу, відомого як P2PKH, є скороченням від Pay To PubKey Hash (платіж на хеш відкритого ключа).
2. Вкладений формат SegWit (P2SH)
Приклад: 3kf9nxowq4assgxrrzeitpdjmuwM2nyPan
Адреси починаються з «3». P2SH - це скорочення від Pay To Script Hash (Pay To Script Hash), яке підтримує складніші функції, ніж адреси спадщини. Вкладений P2SH отримує існуючу адресу P2SH (починається з «3») та інкапсулює її за адресою SegWit.
3.Формат Native SegWit (Bech32)
Адреси, що починаються з bc1, були запропоновані в BIP0173; Це рідні адреси свідків карантину. Закодована адреса Bech32 - це формат адреси, спеціально розроблений для SegWit. Bech32 був визначений в BIP173 в кінці 2017 року. Однією з головних особливостей цього формату є те, що він не чутливий до регістру (адреса містить лише 0-9, az), тому він дозволяє ефективно уникнути плутанини та легше читається при введенні. Оскільки в адресі потрібно менше символів, в адресі використовується кодування Base32 замість традиційного Base58, що зручніше і ефективніше обчислювати. Дані можуть бути більш щільно збережені в QR-коді. Bech32 забезпечує більш високу безпеку, краще оптимізує коди перевірки та виявлення помилок, а також мінімізує ймовірність появи недійсних адрес.
Сама адреса Bech32 сумісна з SegWit. Для включення адреси SegWit в адресу P2SH не потрібно додаткового простору, тому використання адреси у форматі Bech32 дозволить знизити комісію. Адреси Bech32 мають кілька переваг перед старими адресами Base58 (для кодування байтових масивів у Bitcoin у вирази, які може читати людина використовується кодування Base58Check): QR-коди менші; вони більш надійні; вони більш безпечні; вони нечутливі до регістру; вони складаються лише з малих літер, тому їх легше читати, вводити та розуміти.
4. Формат Taproot (P2TR)
Bech32 має недолік: якщо останній символ у адресі - p, вставка або видалення будь-якої кількості символів q безпосередньо перед p не зробить недійсним його контрольну суму.
Для пом'якшення вищезазначених недоліків Bech32M адреса була запропонована в BIP0350:
Для адрес Bech32M, коли версія - 1, вони завжди починаються з bc1p (тобто адреса Taproot). Зокрема, як свідок місцевої карантину, гаманець може складатися з фрази-сім'ї та кодового слова. Їх використовують для генерації розширених публічних і приватних ключів, які використовуються для отримання адрес для довільних шляхів в ієрархічних детермінованих гаманцях. Головним чином NFT, які зберігають BRC-20 та BTC.
Spectrum Labs - це команда магістрів та докторів філософії, які зосереджені на дослідженні блокчейну, а також ветерани промисловості блокчейну. Ми прагнемо вивчення технології ланцюжка дослідження блокчейну та її застосування, щоб люди краще розуміли блокчейн. Основним бізнесом Spectrum Labs є написання дослідницьких звітів, написання курсів та розробка інструментів.
BTC NFT китайська спільнота - це платформа для обміну BTC NFT для китайських новачків з усього світу.
З народженням Протоколу Ординалів він надав Біткойну функцію нумерації та напису, тим самим розширюючи асортимент продуктів екосистеми Біткойн та приносячи нову живість екосистемі Біткойн. У цій статті ми розглянемо деталі Протоколу Ординалів, включаючи те, як кожен Біткойн нумерується та відстежується, а також взаємозв'язок між написами та номерами. Проте, перш ніж ми заглибимось у цю тему, нам потрібно спочатку зрозуміти деякі основи Біткойну, щоб допомогти нам краще зрозуміти те, що наступить.
Після прочитання цієї статті ви оволодієте механізмом транзакцій та моделлю платежів Bitcoin, дізнаєтеся, як Ординали можуть нумерувати та відстежувати кожен Сатоші, а також як створюються та торгуються написи. Також ви дізнаєтеся про відмінності між різними типами гаманців.
Біткойн використовує модель транзакцій, схожу на готівку (грошова система), а його спосіб оплати заснований на моделі під назвою UTXO, яка відрізняється від традиційної моделі, заснованої на залишках на рахунках. Наприклад, у процесі бухгалтерського обліку банку, коли А переводить 100 юанів до Б, банк записує три кроки. Ці три кроки формують процес транзакції. Насамперед потрібно списати 100 юанів з рахунку А. Ідентифікатор запису для цього кроку – tid1. Другим кроком є внесення 100 юанів на рахунок Б. Ідентифікатор запису для цього кроку – tid2. Третім кроком є запис про передачу. Цей запис пов'язує tid1 і tid2, що вказує на зменшення на 100 юанів для рахунку A і збільшення на 100 юанів для рахунку B. Таким чином, зв'язок передачі між А і В реєструється і може бути запитаний і відстежений в майбутньому. Тепер ми пояснимо способи оплати Bitcoin через вступ до UTXO та моделей оплати.
У блокчейні Bitcoin всі залишки зберігаються у списку, який називається «Невикористаними вихідними транзакціями (UTXO)» (Невикористані вихідні транзакції). Кожен UTXO містить певну кількість біткоїнів, разом із інформацією про власників цих біткоїнів, та вказує, чи вони доступні. Уявіть його як грошовий чек із ім'ям власника на ньому. Поки власник підписує його, ви можете передати право використання його іншій особі. Для конкретної адреси всі суми її UTXO складаються з балансу гаманця цієї адреси. Пройшовши всі UTXO, ми можемо отримати поточний баланс для кожної адреси. Сума всіх сум у UTXO - це загальна кількість біткоїнів, які зараз перебувають в обігу.
У структурі транзакцій Bitcoin кожна транзакція включає кілька входів і виходів. Кожен вхід є посиланням на існуючий UTXO, і кожен вихід вказує нову адресу надходження коштів і відповідну суму. Після ініціювання транзакції UTXO, на який посилається розділ введення, тимчасово блокується, щоб запобігти повторному використанню, доки транзакція не буде завершена. Тільки коли транзакція буде успішно упакована майнером у блок (Block) і підтверджена мережею, відповідний статус UTXO зміниться. Зокрема, UTXO, які використовуються для введення транзакцій, будуть видалені зі списку UTXO, що вказує на те, що вони були використані, а вихідні дані транзакції згенерують новий UTXO та додадуться до списку UTXO. Можна зрозуміти, що старий грошовий чек був використаний, а потім став недійсним, створивши новий грошовий чек, який належав новому власнику.
Варто підкреслити, що кожен UTXO може бути використаний лише один раз у одній транзакції. Як тільки він використаний як вхід, він назавжди видаляється зі списку UTXO. Тим часом, новостворений вихідний сигнал додається до списку як новий UTXO. Список UTXO постійно змінюється, і при створенні кожного нового блоку він відповідно оновлюється. Також, аналізуючи історію транзакцій в блокчейні, ми можемо відновити стан списку UTXO в будь-який момент часу.
Також загальна сума введення угоди зазвичай трохи перевищує загальну суму виведення. Ця різниця, яку називають комісією за угоду (комісія за угоду) або мережевою комісією (мережева комісія), надається як стимул для майнерів, відповідальних за упакування угод в блоки. Розмір мережевої комісії пропорційний складності угоди, тому угода з більшою кількістю введень та виведень зазвичай потребує вищої мережевої комісії.
Тепер, щоб краще зрозуміти структуру транзакцій Bitcoin, ми проведемо глибинний аналіз на конкретному прикладі. Структура транзакцій Bitcoin виглядає наступним чином. Два змінні vin та vout представляють "вхід" та "вихід" транзакції Bitcoin відповідно. Транзакції Bitcoin не схожі на традиційні моделі облікового балансу, які реєструють зміни даних облікових записів, а вони виражені через вхід та вихід.
Ми можемо випадково вибрати запис операції на blockchain.com для аналізу. На рисунку нижче показано, що Ідентифікатор хешу - це транзакція 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5f5fbd8a57286c345c2f2. Вона містить один вхід і два виходи.
За допомогою команд bitcoin-cli getrawtransaction та decoderawtransaction ми можемо переглянути базову структуру вищезазначеної транзакції:
У мережі Bitcoin вихід операції містить два важливі елементи інформації: адресу (хеш публічного ключа) та суму (в біткоїнах). Якщо вихід однієї операції не використовується в вході іншої операції, то цей вихід операції називається не витраченим вихідом операції (UTXO). Хто має приватний ключ, який відповідає публічному ключу в UTXO, має право використовувати (тобто витрачати) цей UTXO.
Давайте подивимося інформацію в "vin" вищезазначеному коді, яка вказує на те, що UTXO, витрачений на цій біржі, походить з іншої транзакції (її ідентифікатор - 7957a35fe64f80d234d76d83a2a8a0d8a0d149a41d81de548f0a65a8a999f6f18). Ми можемо знайти суму цього UTXO з історичних транзакцій (наприклад, 0,1). Таким чином, у цій транзакції користувач витратив 0,1 BTC. Значення 0,1 не потрібно явно записувати в транзакцію, але воно отримується шляхом пошуку інформації про UTXO. "vout" цієї транзакції має два виходи. Ці два виходи - два нові UTXO, що відповідають новому балансу та власнику до того часу, поки інша транзакція їх не використає як вхід.
Загальна кількість біткоїнів становить 21 мільйон, а кожен біткоїн містить 10^8 Сатоші (Сатоші, Сат). В результаті на мережі Біткоїн є 21 мільйон*10^8 сатоші. Протокол Ordinals розрізняє ці Сатоші та унікально нумерує кожний Сатоші. У цьому розділі пояснюється, як ця угода унікально нумерує кожний Сатоші та відстежує рахунок, в якому він знаходиться. Додатково буде представлена класифікація рідкісності для Сатоші.
Згідно з Угодою про порядкові числа, Сатоші нумеруються в порядку, в якому вони були добувані. На рисунку нижче показано, як 0-й Сатоші представлений 0-м блоком.
Є багато способів виразити Сатоші:
Ми скористаємося прикладом, щоб пояснити, як нумерувати нові добуті біткоїни. Подивившись на 795952-й блок ланцюжка блоків Біткоїн, ми бачимо, що перша транзакція Tx 3a1f… b177 зафіксувала винагороду майнера (транзакція Coinbase). У транзакцію включені нові добуті біткоїни, які є упакованими винагородами для майнерів, а також комісії, виплачені майнерам ініціатором транзакції. Подивившись на вхід на зображенні нижче, ми бачимо, що його ID UTxO складається з рядка нулів та висоти блоку. Адреса виводу - це адреса гаманця майнера, а сума - це сума вищезгаданих винагород і комісій.
Якщо ми придивимося до розділу виводу для майнерів, ми побачимо адресу, суму та розподіл включеного Сатоші. Як вже зазначалося, серед них знаходяться винагороди за видобуток та комісії. Серед них інформація з числом зелених Сатоші 1941220000000000-1941220625000000 - це нові Сатоші, згенеровані винагородами за видобуток, а решта 712 записів Сатоші відповідають всім комісійним винагородам у цьому блоку.
Ми можемо перевірити номер Сат 1941220000000000. Його номер блоку - 795952, а десятковий символ (десятковий) - 795952,0, що означає, що висота блоку для видобутку цього Сатоші - 795952, номер у цьому блоку - 0, і рідкість (рідкість), яка йде внаслідок, позначена як незвичайна, про що ми розглянемо докладніше в подальших розділах.
Оскільки кожен BTC генерується за рахунок винагороди за майнінг, усі вони можна відстежити. Біткойн-рахунки використовують модель UTXO. Припустимо, користувач A отримав від 100-го до 110-го Satoshi шляхом майнінгу (10 Satoshi зберігаються в цілому в UTXO з тим же ідентифікатором adc123). Коли користувач А хоче заплатити користувачеві B 5 Satoshi, він вирішує використовувати ідентифікатор abc123 як вхідні дані для транзакції. З них 5 Сатоші віддаються користувачеві Б, а 5 Сатоші повертаються користувачеві А у вигляді нулів. Ці дві копії 5 Сатоші є цілим, що зберігається в двох UTXO з ідентифікаторами abc456 і abc789 відповідно. Кількість ідентифікаторів UTXO та Satoshi, згаданих вище, показана лише як приклад. За фактичних обставин мінімальна кількість надісланих Сатоші обмежена 546, і ідентифікатори UTXO не виражаються в цій формі.
У вищезазначеній транзакції шляхи переказу 10 Сатоші користувача A:
Як похідний від Протоколу порядків, рідкість Сатоші може бути визначена на основі порядку, в якому вони добуваються. Це призведе до того, що деякі особливі Сатоші матимуть різні рівні рідкості. Ось наскільки рідкісними є різні типи слухання:
Ця рідкісна та розумна концепція може додати більше задоволення та цінності до екосистеми Біткойну. Сатоші різної рідкості можуть мати різні значення на ринку, привертаючи колекціонерів та інвесторів.
Ordinals значно відрізняється від інших ончейн-NFT, які не належать до Bitcoin. Серед них основна відмінність полягає в тому, що метадані Ordinals не зберігаються в певному місці. Замість цього ці метадані вбудовуються в дані свідка транзакції (поле свідка), тому ми називаємо їх « напис (напис) », тому що ці дані «вигравірувані» як напис на певній частині транзакції Біткойн, і ці дані Він прикріплений до конкретного Сатоши. Цей процес напису досягається за допомогою сегрегованого свідка (SegWit) і «pay-to-taproot (P2TR)» (pay-to-taproot (P2TR)). Він включає два етапи: подання (фіксація) та розкриття (розкриття), і може гравірувати будь-яку форму контенту (наприклад, текст, зображення чи відео) на спеціальній смарт-дошці. Нижче ми представимо інший, більш прямий спосіб зберігання, OP_RETURN і пояснимо, чому він не використовувався як засіб написів. У той же час ми розповімо, що таке сегрегований свідок і платний корінь, і яку роль вони відіграють у написі. В кінці ми познайомимо з тим, як робляться написи.
У версії 0.9 клієнта Bitcoin Core було досягнуто компроміс, використовуючи оператор RETURN. **RETURN дозволяє розробникам додавати 80 байтів неплатіжних даних до виведення транзакції. **У відміну від фіктивних платежів, RETURN створює недвозначно перевірене неспоживче виведення; такі дані не потрібно зберігати в наборі UTXO. Виведення RETURN записуються в ланцюжок блоків. Вони споживають місце на диску та також призводять до збільшення розміру ланцюжка блоків, але оскільки вони не зберігаються в концентрації UTXO, вони не розширюють пам'ять пулу пам'яті UTXO, не кажучи вже про збільшення вартості пам'яті для всього вузла.
Хоча OP_RETURN є дуже прямим засобом зберігання інформації на блокчейні Bitcoin, він також є потенційним методом напису. Однак обмеження OP_RETURN призводять до труднощів у справі зберігання метаданих. По-перше, OP_RETURN може зберігати лише 80 байтів даних, і в ситуаціях, де потрібно зберігати більше даних, це обмеження очевидно неможливо виконати. По-друге, дані OP_RETURN зберігаються в розділі виводу транзакції. Хоча ці дані не централізовано зберігаються в UTXO, вони займають місце на блокчейні, що призводить до збільшення розміру блокчейну. Нарешті, використання OP_RETURN призводить до збільшення комісій за транзакції, оскільки для їх публікації потрібно платити більше.
Навпаки, SegWit надає новий підхід, який може подолати ці проблеми. SegWit є важливим протокольним оновленням для Біткойну. Воно було запропоновано розробником ядра Біткойну Пітером Вуілле в 2015 році і офіційно прийнято у версії 0.16.0 в 2017 році. Розділення в розділеному свідку означає розділення або ізоляцію, а свідок - це підпис, що стосується транзакції. Таким чином, SegWit відокремлює певні дані транзакційного підпису (дані свідків) від транзакцій.
Основною перевагою відокремлення підписів від даних, пов'язаних із транзакціями, є зменшення розміру даних, що зберігаються в блоці Bitcoin. Таким чином, кожен блок має додаткову ємність для зберігання більшої кількості транзакцій, що також означає, що мережа може обробляти більше транзакцій, а відправник сплачує нижчу комісію за обробку. З технічної точки зору, інформація про сигнатуру скрипта (scriptSig) береться з базової структури (базового блоку) і поміщається в нову структуру даних. Вузли та майнери, які виконують роботу з верифікації, також перевірятимуть підписи скриптів у цій новій структурі даних, щоб переконатися, що транзакції дійсні. Оновлення Segwit представило нове поле свідка у виводі транзакцій для забезпечення конфіденційності та продуктивності. Хоча дані свідків не призначені для зберігання даних, вони фактично дають нам можливість зберігати такі речі, як метадані написів. Давайте скористаємося наступним зображенням, щоб краще зрозуміти свідка карантину:
P2TR - це тип виводу транзакції для Біткойну. Він був представлений у оновленні Taproot у 2021 році. Це дозволяє зберігати різні умови транзакції більш приватно на блокчейні. У написі Ordinals P2TR відіграє критичну роль. По суті, напис вбудовує конкретний вміст даних у транзакції Біткойн, а оновлення Taproot, зокрема P2TR, зробили ці вбудовані дані більш гнучкими та економічними.
Спочатку, через метод зберігання скриптів Taproot, ми можемо зберігати вміст напису в шляху витрат скриптів Taproot. Ці скрипти майже не мають обмежень на вміст, і водночас також можуть отримувати знижки на дані свідків, що робить зберігання вмісту напису відносно економічним. Оскільки витрата скрипту Taproot може бути здійснена лише з виводу Taproot, що вже існує, напис використовує двоетапний процес подання/розкриття. Спочатку, при поданні транзакції, було створено вивід Taproot, який обіцяв скрипт, що містить вміст напису. Потім, у транзакції розкриття, вивід, створений поданням транзакції, був витрачений, тим самим розкриваючи вміст напису в ланцюгу.
Цей підхід значно зменшив споживання ресурсів. Якщо P2TR не використовується, інформація свідка зберігається в виході транзакції. Таким чином, доки цей вихід не буде використаний, інформація свідка завжди буде зберігатися в пулі UTXO. Навпаки, якщо використовується P2TR, інформація свідка не з'являтиметься в транзакціях, згенерованих під час етапу подання, тому вона не буде записана в набір UTXO. Лише коли цей UTXO витрачається, інформація свідка з'являється в вході транзакції під час фази розкриття. P2TR дозволяє записувати метадані на блокчейн Bitcoin, але вони ніколи не з'являються в UTXO. Оскільки підтримка/зміна наборів UTXO потребує більше ресурсів, цей підхід може заощадити значні ресурси.
Протокол Ordinals використовував SegWit для послаблення обмежень на розмір контенту, записаного в мережу Bitcoin, зберігаючи вміст напису в дані свідка. Це дозволяє зберігати до 4 МБ метаданих. Taproot упрощує зберігання довільних даних свідків у транзакціях Bitcoin, дозволяючи розробнику Ordinals Кейсі Родамору використовувати старі опкоди (OP_FALSE, OP_IF, OP_PUSH) для зберігання довільних даних в тому, що він описав як «конверт», що називається «напис».
Процес відливання напису складається з наступних двох кроків:
Спочатку потрібно створити обіцянку в операції надсилання до виводу Taproot скрипта, що містить вміст напису. Формат зберігання - Taproot, тобто вивід попередньої операції є P2TR (Pay-To-Taproot), а вхід наступної операції вбудовує вміст у конкретному форматі в побаченому Taproot скрипті; рядок ord спочатку накладається, щоб усунути неоднозначність, що напис має інші використання. OP_PUSH 1 вказує, що наступне натискання містить тип вмісту, а OP_PUSH 0 вказує, що наступні дані містять сам вміст. Великі написи повинні використовувати кілька натискань даних, оскільки одним з небагатьох обмежень taproot є те, що одне натискання даних не може бути більшим за 520 байтів. На цьому етапі дані напису були застосовані до виводу UTXO операції, але вони не були розкриті.
По-друге, необхідно розкрити вихід, створений транзакцією подання покупки в транзакції. На цьому етапі транзакцію ініціюється за допомогою використання UTXO, що відповідає цьому напису як вхід. На цей момент вміст відповідного напису був зроблений загальнодоступним для всієї мережі.
Через вищезазначені два кроки вміст напису було пов'язано з вибитим UTXO. Також, згідно з позиціонуванням Сатоші, описаним вище, напис виконується на першому Сатоші, що відповідає введенню UTXO, і вміст напису включений у введення, що показує транзакцію. Згідно з вступом до обігу та відстеження Сатоші, описаним вище, цей Сатоші, який вибитий з особливим вмістом, може бути переданий, куплений, проданий, втрачений та відновлений. Зверніть увагу, що написи не можуть бути повторені, інакше наступні написи будуть недійсними.
Ми детально пояснимо цей процес, розписавши приклад невеликого зображення BTC NFT. Цей процес в основному включає два етапи подання (зобов'язання) та розкриття (виявлення), згадані раніше. По-перше, ми бачимо, що хеш-ідентифікатор для першої транзакції - 2ddf9... f585c. Можна зауважити, що вихід цієї транзакції не містив даних свідків, і на сторінці не було відповідної написи.
Далі давайте подивимося на запис другого етапу. Ідентифікатор хешу - e7454 ... 7c0e1. Тут ми можемо побачити інформацію про написи упорядкованих, тобто вміст свідчення. Вхідна адреса для цієї операції - це вихідна адреса попередньої операції, а вихід 0.00000546 BTC (546 Сатоші) відправляє цей NFT на свою власну адресу. Тим часом ми також можемо використовувати Sat Find Satoshi, де знаходиться цей напис за номером 1893640468329373.
У гаманці Bitcoin ми бачимо цей актив. Якщо ми хочемо торгувати цим NFT, ми можемо відправити його безпосередньо на адресу іншої особи, тобто відправити цей UTXO, і це завершує обіг напису.
Після того, як ми ознайомилися з екосистемою Ординалів, циркуляцією Сатоші та пов'язаними знаннями про написи, наразі існує багато сценаріїв застосування. Чи то це поява відповідних похідних угод, таких як BRC-20, ORC-20, BRC-721, GBRC-721 тощо, нам потрібен відповідний гаманець для підтримки та відображення інформації токенів або невеликих зображень NFT. У цьому розділі ми розглянемо концепції та характеристики різних адрес гаманців Bitcoin.
Адреси Bitcoin починаються з 1, 3 або bc1. Точно так само, як адреси електронної пошти, їх можна обмінювати з іншими користувачами Bitcoin, які можуть використовувати їх для надсилання біткойнів безпосередньо на свої гаманці. З точки зору безпеки, адреси Bitcoin не містять ніякого чутливого вмісту. Їх можна публікувати де завгодно, не ризикуючи безпекою облікового запису. На відміну від адрес електронної пошти, ми можемо створювати нові адреси в будь-який час, всі з яких будуть безпосередньо зараховані на ваш гаманець. Насправді, багато сучасних гаманців автоматично створюють нову адресу для кожної транзакції для максимізації конфіденційності. Гаманець просто є збіркою адрес і ключів для розблокування коштів в ньому. Спочатку нам потрібно знати, як генерується адреса гаманця Bitcoin.
Біткойн використовує еліптичну криву secp256k1. "Приватний ключ" - це випадкове число між 1 та n-1. n - велике число (256 бітів), і n виражається в науковій нотації приблизно 1.15792*10^77. Обсяг великий, і майже неможливо вгадати приватні ключі інших людей. Це випадкове ціле приватний ключ може бути використаний 256 бітами вказують, що є багато способів кодування. Якщо приватний ключ, використовуючи WIF або WIF-стиснений, не зашифрований, оригінальне "випадкове ціле" можна отримати розкодуванням. Інший метод - BIP38. Запропоновано використовувати алгоритм AES для шифрування приватного ключа. Приватний ключ, отриманий за цією схемою, починається з символу 6P. Цей приватний ключ повинен бути імпортований в різноманітні гаманці для Біткойн. Це приватний ключ, який ми зазвичай використовуємо.
Потім ми використаємо формулу еліптичної кривої K = kG для генерації публічного ключа Bitcoin K з приватного ключа k. G є базовою точкою, яка є параметром secp256k1. Ви можете отримати дві координати K, які є двома виразами публічного ключа, відповідно "Не стиснутий формат" та "Стиснутий формат".
Різні типи адрес Bitcoin можна побачити на наступній фігурі. Є чотири способи виразу їх:
1.Формат спадщини (P2PKH)
Приклад: 1fh7ajxabjbpzw8bjd3qu4cuq3prty9u
Адреси, що починаються з «1», є початковим форматом адреси Bitcoin і досі використовуються. Отримано з відкритого ключа за допомогою розрахунку хешу, відомого як P2PKH, є скороченням від Pay To PubKey Hash (платіж на хеш відкритого ключа).
2. Вкладений формат SegWit (P2SH)
Приклад: 3kf9nxowq4assgxrrzeitpdjmuwM2nyPan
Адреси починаються з «3». P2SH - це скорочення від Pay To Script Hash (Pay To Script Hash), яке підтримує складніші функції, ніж адреси спадщини. Вкладений P2SH отримує існуючу адресу P2SH (починається з «3») та інкапсулює її за адресою SegWit.
3.Формат Native SegWit (Bech32)
Адреси, що починаються з bc1, були запропоновані в BIP0173; Це рідні адреси свідків карантину. Закодована адреса Bech32 - це формат адреси, спеціально розроблений для SegWit. Bech32 був визначений в BIP173 в кінці 2017 року. Однією з головних особливостей цього формату є те, що він не чутливий до регістру (адреса містить лише 0-9, az), тому він дозволяє ефективно уникнути плутанини та легше читається при введенні. Оскільки в адресі потрібно менше символів, в адресі використовується кодування Base32 замість традиційного Base58, що зручніше і ефективніше обчислювати. Дані можуть бути більш щільно збережені в QR-коді. Bech32 забезпечує більш високу безпеку, краще оптимізує коди перевірки та виявлення помилок, а також мінімізує ймовірність появи недійсних адрес.
Сама адреса Bech32 сумісна з SegWit. Для включення адреси SegWit в адресу P2SH не потрібно додаткового простору, тому використання адреси у форматі Bech32 дозволить знизити комісію. Адреси Bech32 мають кілька переваг перед старими адресами Base58 (для кодування байтових масивів у Bitcoin у вирази, які може читати людина використовується кодування Base58Check): QR-коди менші; вони більш надійні; вони більш безпечні; вони нечутливі до регістру; вони складаються лише з малих літер, тому їх легше читати, вводити та розуміти.
4. Формат Taproot (P2TR)
Bech32 має недолік: якщо останній символ у адресі - p, вставка або видалення будь-якої кількості символів q безпосередньо перед p не зробить недійсним його контрольну суму.
Для пом'якшення вищезазначених недоліків Bech32M адреса була запропонована в BIP0350:
Для адрес Bech32M, коли версія - 1, вони завжди починаються з bc1p (тобто адреса Taproot). Зокрема, як свідок місцевої карантину, гаманець може складатися з фрази-сім'ї та кодового слова. Їх використовують для генерації розширених публічних і приватних ключів, які використовуються для отримання адрес для довільних шляхів в ієрархічних детермінованих гаманцях. Головним чином NFT, які зберігають BRC-20 та BTC.
Spectrum Labs - це команда магістрів та докторів філософії, які зосереджені на дослідженні блокчейну, а також ветерани промисловості блокчейну. Ми прагнемо вивчення технології ланцюжка дослідження блокчейну та її застосування, щоб люди краще розуміли блокчейн. Основним бізнесом Spectrum Labs є написання дослідницьких звітів, написання курсів та розробка інструментів.
BTC NFT китайська спільнота - це платформа для обміну BTC NFT для китайських новачків з усього світу.