Tác giả: Ash Li, Noah Ho
Nguồn gốc: khái niệm
Với sự ra đời của giao thức Ordinals, nó cung cấp cho Bitcoin các chức năng đánh số và chữ khắc, từ đó mở rộng phạm vi sản phẩm của hệ sinh thái Bitcoin và mang lại sức sống mới cho hệ sinh thái Bitcoin. Trong bài viết này, chúng ta sẽ đi sâu vào chi tiết của giao thức Thông thường, bao gồm cách mỗi bitcoin được đánh số và theo dõi cũng như mối quan hệ giữa chữ khắc và số. Nhưng trước khi đi sâu vào chủ đề này, trước tiên chúng ta cần hiểu một số nền tảng cơ bản về Bitcoin để giúp chúng ta hiểu rõ hơn về những điều tiếp theo.
Sau khi đọc bài viết này, bạn sẽ nắm được cơ chế giao dịch và mô hình thanh toán của Bitcoin, cách các Thứ tự được đánh số và theo dõi cho mỗi satoshi cũng như cách các chữ khắc được tạo và giao dịch. Ngoài ra, bạn sẽ tìm hiểu về sự khác biệt giữa các loại ví khác nhau.
1. Bối cảnh Bitcoin
Bitcoin sử dụng mô hình giao dịch giống như tiền mặt (hệ thống tiền mặt) và phương thức thanh toán của nó dựa trên mô hình có tên UTXO, khác với mô hình dựa trên số dư tài khoản truyền thống. Ví dụ: trong quy trình mô hình sổ sách kế toán của ngân hàng, khi A chuyển 100 nhân dân tệ cho B, ngân hàng sẽ ghi lại ba bước, tạo thành một quy trình giao dịch. Bước đầu tiên là khấu trừ 100 nhân dân tệ từ tài khoản của A và ID bản ghi của bước này là tid1. Bước thứ hai là gửi 100 nhân dân tệ vào tài khoản của B và ID bản ghi của bước này là tid2. Bước thứ ba là ghi lại một bản ghi chuyển khoản, liên kết tid1 và tid2, cho biết tài khoản A bị giảm 100 nhân dân tệ và tài khoản B được tăng thêm 100 nhân dân tệ. Theo cách này, mối quan hệ chuyển giao giữa A và B được ghi lại và có thể được truy vấn và theo dõi trong tương lai. Bây giờ, chúng tôi sẽ giải thích phương thức thanh toán của Bitcoin thông qua việc giới thiệu UTXO và mô hình thanh toán.
UTXO
Trong chuỗi khối Bitcoin, tất cả số dư được lưu trữ trong một danh sách có tên là "Đầu ra giao dịch chưa sử dụng" (UTXO). Mỗi UTXO chứa một số bitcoin nhất định, cũng như thông tin chủ sở hữu của những bitcoin này và cho biết liệu chúng có sẵn hay không. Hãy coi nó giống như một tấm séc thu ngân có tên người cầm, chỉ cần người cầm nó ký tên, quyền sử dụng nó có thể được chuyển giao cho người khác. Đối với một địa chỉ cụ thể, tổng của tất cả số tiền UTXO là số dư của ví địa chỉ. Bằng cách lặp lại tất cả các UTXO, chúng tôi có thể nhận được số dư hiện tại của từng địa chỉ. Tổng của tất cả số lượng UTXO là tất cả bitcoin hiện đang lưu hành.
Trong cấu trúc giao dịch của Bitcoin, mỗi giao dịch bao gồm một số đầu vào và đầu ra, trong đó mỗi đầu vào là một tham chiếu đến một UTXO hiện có và mỗi đầu ra chỉ định một địa chỉ nhận tiền mới và số tiền tương ứng. Khi một giao dịch được bắt đầu, UTXO được tham chiếu bởi đầu vào của nó sẽ tạm thời bị khóa để ngăn nó được sử dụng lại cho đến khi giao dịch hoàn tất. Chỉ khi giao dịch được đóng gói thành công thành một khối bởi những người khai thác và được xác nhận bởi mạng, trạng thái UTXO có liên quan sẽ thay đổi. Cụ thể, các UTXO được sử dụng cho đầu vào giao dịch sẽ bị xóa khỏi danh sách UTXO, cho biết rằng chúng đã được sử dụng và các UTXO mới sẽ được tạo cho đầu ra giao dịch và được thêm vào danh sách UTXO. Có thể hiểu rằng séc tiền mặt cũ trở nên vô hiệu sau khi được sử dụng và séc tiền mặt mới được tạo ra, quyền sở hữu thuộc về chủ sở hữu mới.
Điều đáng nhấn mạnh là mỗi UTXO chỉ có thể được sử dụng một lần trong một giao dịch. Khi nó được sử dụng làm đầu vào, nó sẽ bị xóa vĩnh viễn khỏi danh sách UTXO. Đồng thời, đầu ra mới được tạo sẽ được thêm vào danh sách dưới dạng UTXO mới. Danh sách UTXO liên tục thay đổi và khi mỗi khối mới được tạo, nó sẽ được cập nhật tương ứng. Và, bằng cách phân tích lịch sử giao dịch trong chuỗi khối, chúng tôi có thể xây dựng lại trạng thái của danh sách UTXO tại bất kỳ thời điểm nào.
Ngoài ra, tổng số tiền đầu vào của một giao dịch thường sẽ hơi vượt quá tổng số tiền đầu ra của nó. Sự khác biệt này, được gọi là phí giao dịch (Phí giao dịch) hoặc phí mạng (Phí mạng), được đưa ra như một động cơ khuyến khích cho những người khai thác chịu trách nhiệm đóng gói các giao dịch thành các khối. Quy mô của phí mạng tỷ lệ thuận với mức độ phức tạp của giao dịch, do đó, một giao dịch có nhiều đầu vào và đầu ra hơn thường sẽ phải chịu phí mạng cao hơn.
Bây giờ, để hiểu rõ hơn về cấu trúc giao dịch của Bitcoin, chúng tôi sẽ tiến hành phân tích chuyên sâu thông qua một ví dụ cụ thể. Cấu trúc giao dịch của Bitcoin như sau, trong đó hai biến vin và vout tương ứng đại diện cho "đầu vào" và "đầu ra" của giao dịch Bitcoin. Các giao dịch bitcoin không ghi lại các thay đổi dữ liệu theo hình dạng tài khoản như mô hình số dư tài khoản truyền thống, nhưng được thể hiện bằng đầu vào và đầu ra.
Nguồn: https://github.com/bitcoin/bitcoin/blob/v22.0/src/primitives/transaction.h#L270
Chúng tôi có thể chọn ngẫu nhiên một bản ghi giao dịch trên blockchain.com để phân tích. Hình bên dưới hiển thị giao dịch với **Hash ID** 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2**. Nó chứa một đầu vào và hai đầu ra.
Bằng cách sử dụng các lệnh `getrawtransaction` và `decorawtransaction` của bitcoin-cli, chúng ta có thể xem cấu trúc cơ bản của giao dịch trên:
Trong mạng Bitcoin, đầu ra giao dịch chứa hai thông tin quan trọng: địa chỉ (hàm băm của khóa công khai) và số tiền (tính bằng bitcoin). Nếu đầu ra của một giao dịch không được sử dụng làm đầu vào của các giao dịch khác, thì đầu ra của giao dịch này được gọi là đầu ra giao dịch chưa chi tiêu (UTXO). Bất kỳ ai sở hữu khóa riêng tư tương ứng với khóa chung trong UTXO đều có quyền sử dụng (nghĩa là chi tiêu) UTXO này.
Hãy quan sát thông tin trong "vin" trong đoạn mã trên, nó chỉ ra rằng UTXO được sử dụng bởi giao dịch này đến từ một giao dịch khác (id của nó là [7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18](https://www.blockchain.com/btc/tx/7957a 3 5fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18 )) của đầu ra thứ 0 (một giao dịch có thể có nhiều đầu ra và chỉ mục bắt đầu từ 0), chúng tôi có thể tìm ra số lượng UTXO này (ví dụ: 0,1) từ giao dịch lịch sử, vì vậy người dùng đã chi tiêu trong giao dịch này 0,1 BTC, giá trị 0,1 không cần phải được viết rõ ràng trong giao dịch mà có được bằng cách tra cứu thông tin UTXO. "Vout" của giao dịch này có hai đầu ra, đó là hai UTXO mới, tương ứng với số dư mới và chủ sở hữu, cho đến khi một giao dịch khác sử dụng chúng làm đầu vào.
mô hình thanh toán
Để hiểu rõ hơn về mô hình thanh toán của mạng Bitcoin, chúng tôi sử dụng một ví dụ để giới thiệu quy trình thanh toán Bitcoin được A trả cho B với số lượng n. Hình dưới đây cho thấy quá trình người dùng A gửi 3 bitcoin cho người dùng B.
1. Đối với người dùng A, trước tiên cần xác định tất cả các bộ UTXO mà họ sở hữu, tức là tất cả bitcoin mà người dùng A có thể kiểm soát;
2. A chọn một hoặc nhiều UTXO từ bộ này làm đầu vào của giao dịch. Tổng của các đầu vào này là m (2+0,8+0,5=3,3 BTC) lớn hơn số tiền phải trả n (3 BTC);
3. Người dùng A đặt hai đầu ra cho giao dịch, một đầu ra được thanh toán cho địa chỉ của B, số tiền là n(3 BTC) và đầu ra còn lại được thanh toán cho **địa chỉ thay đổi** của chính A, số tiền là mn-fee ( 3,3-3-0,001=0,299 BTC). Ví của người dùng thường bao gồm nhiều địa chỉ, thông thường mỗi địa chỉ chỉ được sử dụng một lần và thay đổi sẽ được trả về địa chỉ mới theo mặc định;
4. Sau khi thợ mỏ đóng gói giao dịch trên chuỗi để xác nhận, B có thể nhận được thông tin giao dịch. Vì kích thước của khối có giới hạn trên (khoảng 1 MB), nên những người khai thác sẽ ưu tiên xác nhận các giao dịch có tỷ lệ phí giao dịch cao (`fee_rate=fee/size`) để thu được mức phí cao nhất. Chúng ta có thể xem phí giao dịch khai thác theo thời gian thực tại [mempool](https://mempool.space/). Nếu muốn xác nhận nhanh nhất trong quá trình chuyển tiền, chúng ta có thể chọn Mức độ ưu tiên cao hoặc tùy chỉnh tỷ lệ giao dịch phù hợp.
2. Đánh số và theo dõi Satoshi
Tổng số bitcoin là 21 triệu và mỗi bitcoin chứa 10^8 satoshi (Satoshi, Sat). Do đó, có tổng cộng 21 triệu*10^8 satoshi trên mạng Bitcoin. Giao thức Ordinals phân biệt các satoshi này và đánh số duy nhất cho mỗi satoshi. Phần này sẽ giới thiệu cách giao thức này đánh số duy nhất cho từng Satoshi và theo dõi tài khoản của nó. Ngoài ra, phân loại độ hiếm cho Satoshi sẽ được giới thiệu.
số satoshi
Theo giao thức Ordinals, satoshi được đánh số theo thứ tự mà chúng được khai thác. Hình dưới đây cho thấy đại diện của satoshi thứ 0 được khai thác trong khối thứ 0.
Nguồn: https://ordinals.com/sat/0
Có nhiều cách để thể hiện Satoshi:
- **Ký hiệu số nguyên**: Ví dụ: 2099994106992659, cho biết số sê-ri được gán bởi Satoshi theo thứ tự khai thác.
- **Ký hiệu thập phân**: Ví dụ: 3891094.16797, số đầu tiên cho biết chiều cao của khối nơi Satoshi được khai thác và số thứ hai cho biết số lượng Satoshi trong khối.
- **ký hiệu độ**: Ví dụ: 3°111094′214″16797‴, số đầu tiên là chu kỳ, được đánh số từ 0, số thứ hai là chỉ số khối của kỷ nguyên giảm một nửa và số thứ ba là độ khó điều chỉnh Chỉ số khối của khoảng thời gian, số cuối cùng là chỉ số của sat trong khối.
- **Ký hiệu phần trăm**: Ví dụ: 99,99971949060254%, biểu thị vị trí của Satoshi này trong nguồn cung Bitcoin, được biểu thị bằng phần trăm.
- **Tên**: ví dụ Satoshi. Tên mã hóa số thứ tự bằng cách sử dụng các ký tự từ a đến z.
Chúng tôi sẽ sử dụng một ví dụ để giải thích cách đánh số bitcoin mới khai thác. Nhìn vào khối 795952 của chuỗi khối Bitcoin, chúng ta có thể thấy rằng giao dịch đầu tiên **[Tx 3a1f...b177](https://ordinals.com/tx/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177)** ghi lại rằng phần thưởng cho người khai thác (giao dịch coinbase) . Giao dịch này bao gồm các bitcoin mới được khai thác, được sử dụng làm phần thưởng đóng gói cho những người khai thác và phí giao dịch mà người khởi tạo giao dịch trả cho những người khai thác. Bằng cách nhìn vào đầu vào trong hình bên dưới, chúng ta có thể thấy rằng id của UTXO của nó bao gồm một chuỗi 0 và chiều cao khối. Địa chỉ đầu ra là địa chỉ ví của người khai thác và số tiền là tổng của phần thưởng và phí xử lý ở trên.
Nguồn: https://ordinals.com/tx/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177
Nếu chúng ta nhìn xa hơn vào phần đầu ra cho những người khai thác, chúng ta có thể thấy sự phân phối địa chỉ, số lượng và satoshi liên quan. Như đã đề cập trước đó, chúng bao gồm phần thưởng và phí khai thác. Trong số đó, thông tin số sats màu xanh lục [1941220000000000–1941220625000000](https://ordinals.com/range/1941220000000000/1941220625000000) là sats mới được tạo bởi phần thưởng khai thác và 712 bản ghi sats còn lại tương ứng với khối này Tất cả phí xử lý TRONG .
Nguồn: https://ordinals.com/output/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177:0
Chúng tôi có thể xác minh số Sat 1941220000000000. Số khối của nó là 795952 và ký hiệu thập phân (thập phân) là 795952.0, có nghĩa là chiều cao khối để khai thác Satoshi này là 795952 và số lượng Satoshi trong khối này là 0 và độ hiếm tiếp theo được đánh dấu là không phổ biến. Sẽ được mô tả chi tiết trong phần sau.
Nguồn: https://ordinals.com/sat/1941220000000000
lưu thông satoshi
Bởi vì mỗi BTC được tạo ra thông qua phần thưởng khai thác, nên tất cả chúng đều có thể theo dõi được. Tài khoản bitcoin sử dụng mô hình UTXO. Giả sử rằng người dùng A nhận được Satoshi thứ 100-110 thông qua khai thác (10 Satoshi được lưu trữ tổng thể trong cùng một UTXO có id là adc123). Khi người dùng A muốn trả cho người dùng B 5 Satoshi, anh ta chọn sử dụng id abc123 làm đầu vào của giao dịch, trong đó 5 Satoshi được trao cho người dùng B và 5 Satoshi được trả lại cho người dùng A dưới dạng thay đổi. 5 satoshi này là một tổng thể, được lưu trữ trong hai UTXO có id lần lượt là abc456 và abc789. Id UTXO ở trên và số lượng Satoshi chỉ được hiển thị dưới dạng ví dụ. Trên thực tế, số lượng Satoshi gửi tối thiểu được giới hạn ở 546 và id UTXO không được thể hiện ở dạng này.
Trong giao dịch trên, đường lưu thông của 10 Satoshi của người dùng A là:
1. Khai thác tạo ra 10 Satoshi, được đánh số [100 *, 110). *Điều đó có nghĩa là satoshi thứ 100 đến 109 được lưu trữ trong UTXO với id abc123 và chủ sở hữu của nó là người dùng A.
2. Khi A chuyển tiền, 10 Satoshi được chia thành hai phần, mỗi phần 5 Satoshi. Nguyên tắc "vào trước, ra trước" được áp dụng ở đây, nghĩa là thứ tự của các số Satoshi được xác định theo chỉ số của chúng trong đầu ra giao dịch. Giả sử rằng thứ tự đầu ra là người dùng A trước, sau đó đến người dùng B, sau đó số sê-ri của 5 satoshi còn lại của người dùng A là [100, 105), được lưu trữ trong UTXO với id abc456 và số sê-ri của 5 satoshi của người dùng B là [ 105, 110), được lưu trữ trong UTXO với id abc789.
Độ hiếm (Satoshi hiếm)
Là một dẫn xuất của giao thức Ordinals, độ hiếm của Satoshi có thể được xác định theo thứ tự mà chúng được khai thác. Điều này sẽ dẫn đến một số satoshi đặc biệt có độ hiếm khác nhau. Dưới đây là độ hiếm của các satoshi khác nhau:
- `chung`: bất kỳ satoshi nào ngoại trừ satoshi đầu tiên của khối (tổng nguồn cung là 2100 nghìn tỷ)
- Loại tốt `không phổ biến`: satoshi đầu tiên trên mỗi khối (tổng nguồn cung là 6929999)
- `hiếm`: satoshi đầu tiên cho mỗi giai đoạn điều chỉnh độ khó (tổng cung 3437)
- `epic`: satoshi đầu tiên sau mỗi halving (tổng nguồn cung là 32)
- `huyền thoại`: satoshi đầu tiên trên mỗi chu kỳ (tổng nguồn cung là 5)
- `mythic`: satoshi đầu tiên của khối genesis (tổng cung là 1)
Khái niệm Satoshi hiếm này có thể tăng thêm niềm vui và giá trị cho hệ sinh thái Bitcoin. Satoshi có độ hiếm khác nhau có thể có giá trị khác nhau trên thị trường, thu hút các nhà sưu tập và nhà đầu tư.
3. Cách ghi
Thứ tự khác biệt đáng kể so với NFT trên các chuỗi không phải Bitcoin khác. Trong số đó, sự khác biệt chính là siêu dữ liệu của Ordinals không được lưu trữ ở một vị trí cụ thể. Thay vào đó, những siêu dữ liệu này được nhúng vào dữ liệu nhân chứng (trường nhân chứng) của giao dịch, đó là lý do tại sao chúng tôi gọi nó là "dòng chữ" vì những dữ liệu này được "khắc" trên Bitcoin giống như một phần cụ thể của giao dịch, và những dữ liệu này được gắn với Satoshi cụ thể. Quá trình ghi nhận này được hiện thực hóa thông qua Nhân chứng tách biệt (Segregated Witness, SegWit) và “Pay-to-Taproot, P2TR”, bao gồm hai giai đoạn gửi (commit) và tiết lộ (reeal) bất kỳ dạng nội dung nào như văn bản, hình ảnh hoặc video được ghi trên Satoshi được chỉ định. Chúng tôi sẽ giới thiệu một phương pháp lưu trữ trực tiếp khác OP_RETURN bên dưới và giải thích lý do tại sao nó không được sử dụng làm phương tiện khắc chữ. Đồng thời, chúng tôi sẽ giới thiệu Segregated Witness và Pay-to-Taproot là gì và vai trò của chúng trong dòng chữ. Cuối cùng, chúng tôi sẽ giới thiệu cách khắc chữ.
OP_RETURE
Trong phiên bản 0.9 của ứng dụng khách Bitcoin Core, thỏa hiệp cuối cùng đã đạt được thông qua việc áp dụng toán tử RETURN. **RETURN cho phép nhà phát triển thêm 80 byte dữ liệu không thanh toán vào đầu ra giao dịch**. Không giống như các khoản thanh toán giả mạo, RETURN tạo ra một đầu ra không tiêu hao có thể kiểm chứng rõ ràng mà không cần lưu trữ trong bộ UTXO. **Đầu ra RETURN được ghi lại trên chuỗi khối, chúng sẽ tiêu tốn dung lượng ổ đĩa và tăng kích thước của chuỗi khối, nhưng chúng không được lưu trữ trong bộ UTXO, vì vậy chúng sẽ không mở rộng nhóm bộ nhớ UTXO, chứ chưa nói đến việc tăng chi phí bộ nhớ đắt đỏ cho các nút đầy đủ. **
Mặc dù OP_RETURN là một phương tiện rất đơn giản để lưu trữ thông tin trên chuỗi khối Bitcoin, nhưng nó cũng là một phương tiện tiềm năng để ghi. Nhưng hạn chế của OP_RETURN khiến nó gặp một số thách thức khi xử lý lưu trữ siêu dữ liệu. Trước hết, OP_RETURN chỉ có thể lưu trữ 80 byte dữ liệu, điều này rõ ràng là không thể thỏa mãn khi cần lưu trữ một lượng dữ liệu lớn hơn. Thứ hai, dữ liệu OP_RETURN được lưu trữ trong phần đầu ra giao dịch, mặc dù dữ liệu này không được lưu trữ trong bộ UTXO nhưng chúng chiếm không gian lưu trữ của chuỗi khối, dẫn đến kích thước của chuỗi khối tăng lên. Cuối cùng, việc sử dụng OP_RETURN dẫn đến phí giao dịch cao hơn vì phải trả nhiều tiền hơn để đăng các giao dịch đó.
nhân chứng tách biệt
Ngược lại, phương pháp mới do SegWit cung cấp có thể khắc phục các vấn đề trên. SegWit là một bản nâng cấp giao thức quan trọng của Bitcoin, được đề xuất bởi nhà phát triển lõi Bitcoin Pieter Wuille vào năm 2015 và cuối cùng được chính thức áp dụng trong phiên bản 0.16.0 vào năm 2017. Segregated trong Segregated Witness có nghĩa là tách biệt và cô lập, còn Witness là chữ ký liên quan đến giao dịch. Do đó, SegWit tách dữ liệu chữ ký giao dịch nhất định (dữ liệu nhân chứng) khỏi các giao dịch.
Lợi ích chính của việc tách chữ ký khỏi dữ liệu liên quan đến giao dịch là nó làm giảm kích thước dữ liệu được lưu trữ trong khối Bitcoin. Bằng cách này, mỗi khối có thêm khả năng lưu trữ nhiều giao dịch hơn, điều đó cũng có nghĩa là mạng có thể xử lý nhiều giao dịch hơn và người gửi trả phí thấp hơn. Về mặt kỹ thuật, đó là lấy thông tin chữ ký tập lệnh (scriptSig) ra khỏi cấu trúc cơ bản (khối cơ sở) và đặt nó vào một cấu trúc dữ liệu mới. Các nút và công cụ khai thác thực hiện công việc xác minh cũng sẽ xác minh chữ ký tập lệnh trong cấu trúc dữ liệu mới này để đảm bảo rằng giao dịch hợp lệ. Bản nâng cấp Segwit giới thiệu một trường nhân chứng mới trong kết quả giao dịch để đảm bảo quyền riêng tư và hiệu suất. Mặc dù dữ liệu nhân chứng không được thiết kế để lưu trữ dữ liệu, nhưng nó thực sự mang đến cho chúng tôi cơ hội lưu trữ những thứ như siêu dữ liệu chữ khắc. Chúng ta hãy sử dụng hình sau để hiểu rõ hơn về Segregated Witness:
***Pre-SegWit – Giải thích về cấu trúc giao dịch (Phần trăm chiếm dụng dữ liệu)***
***Post-SegWit – Giải thích về cấu trúc giao dịch (Phần trăm chiếm dụng dữ liệu)***
***Cấu trúc dữ liệu giao dịch trước và sau SegWit***
rễ cái
P2TR là một loại đầu ra giao dịch cho Bitcoin, được giới thiệu trong bản nâng cấp Taproot vào năm 2021, cho phép lưu trữ các điều kiện giao dịch khác nhau một cách riêng tư hơn trên chuỗi khối. Trong các chữ khắc của Ordinals, P2TR đóng một vai trò quan trọng. Các dòng chữ về cơ bản nhúng nội dung dữ liệu cụ thể vào các giao dịch Bitcoin và các nâng cấp của Taproot, đặc biệt là P2TR, làm cho dữ liệu được nhúng này trở nên linh hoạt và tiết kiệm hơn.
Trước hết, do cách lưu trữ tập lệnh Taproot, chúng tôi có thể lưu trữ nội dung dòng chữ trong tập lệnh chi tiêu đường dẫn tập lệnh Taproot, hầu như không có hạn chế về nội dung, đồng thời được giảm giá đối với dữ liệu nhân chứng, giúp lưu trữ nội dung dòng chữ tương đối kinh tế. Do việc sử dụng các tập lệnh Taproot chỉ có thể được thực hiện từ các đầu ra Taproot hiện có, Inscription sử dụng quy trình cam kết/tiết lộ hai giai đoạn. Đầu tiên, trong giao dịch cam kết, đầu ra Taproot của tập lệnh hứa hẹn chứa nội dung của dòng chữ được tạo. Sau đó, trong một giao dịch tiết lộ, đầu ra được tạo bởi giao dịch cam kết được sử dụng, tiết lộ nội dung dòng chữ trên chuỗi.
Cách tiếp cận này làm giảm đáng kể mức tiêu thụ tài nguyên. Nếu P2TR không được sử dụng, thông tin nhân chứng sẽ được lưu trữ ở đầu ra của giao dịch. Theo cách này, miễn là đầu ra không được tiêu thụ, thông tin nhân chứng sẽ luôn được lưu trữ trong bộ UTXO. Ngược lại, nếu P2TR được sử dụng, thông tin nhân chứng sẽ không xuất hiện trong giao dịch được tạo trong giai đoạn cam kết, vì vậy nó sẽ không được ghi vào bộ UTXO. Chỉ khi UTXO này được tiêu thụ, thông tin nhân chứng mới xuất hiện trong đầu vào giao dịch của giai đoạn tiết lộ. P2TR cho phép ghi siêu dữ liệu vào chuỗi khối Bitcoin, nhưng không bao giờ xuất hiện trong bộ UTXO. Vì việc duy trì/sửa đổi các bộ UTXO cần nhiều tài nguyên hơn nên phương pháp này có thể tiết kiệm rất nhiều tài nguyên.
dòng chữ
Giao thức Ordinals sử dụng SegWit để nới lỏng giới hạn kích thước đối với nội dung được ghi vào mạng Bitcoin và lưu trữ nội dung ghi trong dữ liệu nhân chứng. Cho phép lưu trữ siêu dữ liệu lên tới 4 MB. Taproot giúp lưu trữ dữ liệu nhân chứng tùy ý trong các giao dịch Bitcoin dễ dàng hơn, cho phép nhà phát triển Casey Rodarmor của Ordinals tái sử dụng các mã opcode cũ (OP_FALSE, OP_IF, OP_PUSH) thành thứ mà ông mô tả là "phong bì" để lưu trữ được gọi là "dữ liệu tùy ý".
Quá trình đúc một dòng chữ bao gồm hai bước sau:
1. Trước tiên, một cam kết đối với đầu ra Taproot của tập lệnh chứa nội dung dòng chữ cần được tạo trong giao dịch cam kết. Định dạng lưu trữ là Taproot, nghĩa là đầu ra của giao dịch trước đó là P2TR (Pay-To-Taproot) và đầu vào của giao dịch tiếp theo được nhúng trong tập lệnh Taproot của nhân chứng; đầu tiên, chuỗi `ord` là được nhập vào ngăn xếp, để phân biệt rằng dòng chữ có những công dụng khác. `OP_PUSH 1` cho biết rằng lần đẩy tiếp theo chứa loại nội dung và `OP_PUSH 0` cho biết rằng lần đẩy dữ liệu tiếp theo chứa chính nội dung đó. Chữ khắc lớn phải sử dụng nhiều lần đẩy dữ liệu, vì một trong số ít hạn chế của taproot là một lần đẩy dữ liệu không thể lớn hơn 520 byte. Tại thời điểm này, dữ liệu của dòng chữ đã tương ứng với UTXO của đầu ra giao dịch, nhưng nó chưa được công khai.
Post-SegWit – Giải thích về cấu trúc giao dịch (Phần trăm chiếm dụng dữ liệu)
1. Thứ hai, đầu ra được tạo bởi giao dịch cam kết cần được sử dụng trong giao dịch tiết lộ. Ở giai đoạn này, một giao dịch được bắt đầu bằng cách lấy UTXO tương ứng với dòng chữ đó làm đầu vào. Tại thời điểm này, nội dung dòng chữ tương ứng đã được phát hành trên toàn bộ mạng.
Thông qua hai bước trên, nội dung của dòng chữ đã được ràng buộc với UTXO được ghi. Theo vị trí của Satoshi được giới thiệu ở trên, dòng chữ được thực hiện trên Satoshi đầu tiên tương ứng với UTXO đầu vào và nội dung của dòng chữ được bao gồm trong đầu vào của giao dịch được hiển thị. Theo phần giới thiệu về lưu thông và theo dõi Satoshi đã giới thiệu ở trên, Satoshi được khắc với nội dung đặc biệt này có thể được chuyển nhượng, mua, bán, mất mát và phục hồi. Cần lưu ý rằng dòng chữ không được lặp lại, nếu không dòng chữ tiếp theo sẽ không hợp lệ.
Chúng tôi sẽ minh họa chi tiết quá trình này bằng cách khắc một bức tranh NFT BTC nhỏ. Quá trình này chủ yếu bao gồm hai giai đoạn cam kết và tiết lộ đã đề cập ở trên. Đầu tiên, chúng tôi thấy rằng ID băm của giao dịch đầu tiên là **[2ddf9...f585c](https://www.blockchain.com/explorer/transactions/btc/2ddf90ddf7c929c8038888fc2b7591fb999c3ba3c3c7b49d54d01f8db4af585c)**. Có thể nhận thấy rằng đầu ra của giao dịch này không chứa dữ liệu nhân chứng và không có thông tin dòng chữ liên quan trên trang web.
Nguồn: https://www.blockchain.com/explorer/transactions/btc/2ddf90ddf7c929c8038888fc2b7591fb999c3ba3c3c7b49d54d01f8db4af585c
Tiếp theo, chúng tôi xem xét các bản ghi của giai đoạn thứ hai, có Hash ID là [e7454...7c0e1] (https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1). Ở đây, chúng ta có thể thấy thông tin của dòng chữ Ordinals, đó là nội dung dòng chữ của nhân chứng. Địa chỉ đầu vào của giao dịch này là địa chỉ đầu ra của giao dịch trước đó và đầu ra là 0,00000546 BTC (546 Satoshi) để gửi NFT này đến địa chỉ của chính nó. Đồng thời, chúng ta cũng có thể tìm thấy Satoshi nơi dòng chữ này nằm trong [Thứ bảy 1893640468329373](https://ordinals.com/sat/1893640468329373).
Nguồn: https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1
Nguồn: https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1
Trong ví bitcoin, chúng ta có thể thấy tài sản này. Nếu chúng tôi muốn giao dịch NFT này, chúng tôi có thể trực tiếp gửi nó đến địa chỉ của người khác, nghĩa là gửi UTXO này, do đó hoàn tất việc chuyển dòng chữ.
4. Ví Bitcoin
Sau khi chúng tôi hiểu hệ sinh thái Ordinals là gì, sự lưu thông của Satoshi và kiến thức liên quan về chữ khắc, hiện tại có nhiều kịch bản ứng dụng, cho dù đó là sự xuất hiện của các giao thức phái sinh có liên quan như BRC-20, ORC-20, BRC-721, GBRC-721, v.v., cần Chúng tôi có ví tương ứng để hỗ trợ và hiển thị thông tin mã thông báo hoặc ảnh nhỏ NFT. Trong phần này, chúng tôi sẽ giới thiệu các khái niệm và đặc điểm của các địa chỉ ví Bitcoin khác nhau.
Địa chỉ bitcoin bắt đầu bằng 1, 3 hoặc bc1. Giống như địa chỉ email, chúng có thể được chia sẻ với những người dùng bitcoin khác, những người có thể sử dụng chúng để gửi bitcoin trực tiếp đến ví của họ. Từ quan điểm bảo mật, địa chỉ Bitcoin không có bất kỳ nội dung nhạy cảm nào. Nó có thể được xuất bản ở bất cứ đâu mà không ảnh hưởng đến tính bảo mật của tài khoản. Không giống như địa chỉ email, chúng tôi có thể tạo địa chỉ mới bất cứ lúc nào chúng tôi muốn, tất cả địa chỉ này sẽ gửi tiền trực tiếp vào ví của bạn. Trên thực tế, nhiều ví hiện đại tự động tạo một địa chỉ mới cho mỗi giao dịch để bảo mật tối đa. Ví chỉ đơn giản là một tập hợp các địa chỉ và chìa khóa để mở khóa số tiền bên trong. Trước hết, chúng ta cần biết địa chỉ của ví Bitcoin được tạo như thế nào.
Khóa riêng và khóa công khai của bitcoin
Bitcoin sử dụng đường cong elip [Secp256k1](https://en.bitcoin.it/wiki/Secp256k1), **"khóa riêng tư" là một số ngẫu nhiên trong khoảng từ 1 đến n−1, n** là một số rất lớn (256 bit), n trong ký hiệu khoa học xấp xỉ:
Phạm vi này lớn đến mức chúng ta gần như không thể đoán được khóa riêng của người khác. Khóa riêng số nguyên ngẫu nhiên này có thể được biểu diễn bằng 256 bit và có nhiều phương pháp mã hóa. Nếu khóa riêng ở dạng nén WIF hoặc WIF không được mã hóa, nó có thể được giải mã để lấy "số nguyên ngẫu nhiên" ban đầu. Một cách khác là [BIP38](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki), đề xuất sử dụng thuật toán AES để mã hóa khóa riêng tư. Khóa riêng tư thu được bằng cách này là Bắt đầu bằng ký tự 6P, loại khóa riêng tư này phải nhập mật khẩu trước khi nhập vào các ví Bitcoin khác nhau, đây là khóa riêng tư mà chúng ta thường sử dụng.
Sau đó, chúng tôi sẽ sử dụng công thức đường cong elip K = kG để tạo khóa công khai K của Bitcoin từ khóa riêng k và G là Điểm cơ sở, là tham số của secp256k1. Có thể thu được hai tọa độ của K, là hai biểu thức của khóa chung, đó là "Định dạng không nén" và "Định dạng nén".
- Dạng không nén, tức là nối trực tiếp hai tọa độ x và y với nhau, sau đó thêm tiền tố 0x04 ở phía trước;
- Dạng nén, tức là khi y là số chẵn thì mã là 02 x, khi y là số lẻ thì mã là 03 x;
địa chỉ Bitcoin
Các loại địa chỉ Bitcoin khác nhau được hiển thị trong hình bên dưới và có bốn phương thức biểu diễn:
Tham khảo: https://en.bitcoin.it/wiki/Invoice_address
1. **Định dạng cũ (P2PKH)**
Ví dụ: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
Địa chỉ bắt đầu bằng "1", là định dạng địa chỉ ban đầu của Bitcoin và vẫn được sử dụng cho đến ngày nay. Nó được lấy từ khóa công khai thông qua tính toán Hash, còn được gọi là P2PKH, là chữ viết tắt của Pay To PubKey Hash (thanh toán cho hàm băm khóa công khai).
1. **Định dạng SegWit lồng nhau (P2SH)**
Ví dụ: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
Địa chỉ bắt đầu bằng "3" và P2SH là tên viết tắt của Pay To Script Hash (Pay To Script Hash), hỗ trợ các chức năng phức tạp hơn so với địa chỉ Legacy. P2SH lồng nhau, lấy địa chỉ P2SH hiện có (bắt đầu bằng "3") và đóng gói nó bằng địa chỉ SegWit.
1. **Định dạng SegWit gốc (Bech32)**
Ví dụ: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
Các địa chỉ bắt đầu bằng bc1 được đề xuất trong [BIP0173](https://en.bitcoin.it/wiki/BIP_0173), là các địa chỉ gốc của Segregated Witness. Địa chỉ được mã hóa Bech32 là một định dạng địa chỉ được phát triển đặc biệt cho SegWit. Bech32 đã được định nghĩa trong BIP173 vào cuối năm 2017. Một trong những tính năng chính của định dạng này là nó không phân biệt chữ hoa chữ thường (địa chỉ chỉ chứa 0-9, az), vì vậy nó có thể tránh nhầm lẫn một cách hiệu quả và dễ đọc hơn khi nhập liệu . Do địa chỉ cần ít ký tự hơn nên địa chỉ sử dụng mã hóa Base32 thay vì Base58 truyền thống, giúp việc tính toán trở nên thuận tiện và hiệu quả hơn. Dữ liệu có thể được lưu trữ chặt chẽ hơn trong mã QR. Bech32 cung cấp khả năng bảo mật cao hơn, mã phát hiện lỗi tổng kiểm tra được tối ưu hóa tốt hơn và giảm thiểu khả năng địa chỉ không hợp lệ.
Địa chỉ Bech32 tương thích với SegWit. Không cần thêm dung lượng để đặt địa chỉ SegWit vào địa chỉ P2SH, vì vậy sử dụng địa chỉ định dạng Bech32, phí xử lý sẽ thấp hơn. Địa chỉ Bech32 có một số ưu điểm so với địa chỉ Base58 cũ hơn (mã hóa Base58Check được sử dụng để mã hóa các mảng byte trong Bitcoin thành các chuỗi có thể mã hóa được của con người): mã QR nhỏ hơn; chống lỗi tốt hơn; an toàn hơn; không thể phân biệt chữ hoa và chữ thường; chỉ bao gồm các chữ cái viết thường , vì vậy sẽ dễ đọc, gõ và hiểu hơn.
1. **Định dạng Taproot (P2TR)**
Bech32 có một nhược điểm: nếu ký tự cuối cùng của địa chỉ là p, việc chèn hoặc xóa bất kỳ số lượng ký tự q nào ngay trước p sẽ không làm mất hiệu lực tổng kiểm tra.
Để giảm bớt những thiếu sót trên của Bech32, địa chỉ Bech32m được đề xuất trong [BIP0350](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki):
- Đối với các địa chỉ segwit gốc có phiên bản 0, hãy sử dụng Bech32 trước đó;
- Đối với các địa chỉ segwit gốc có phiên bản 1 (hoặc cao hơn), hãy sử dụng Bech32m mới.
Đối với địa chỉ Bech32m, khi phiên bản là 1, chúng luôn bắt đầu bằng **bc1p** (tức là địa chỉ Taproot). Cụ thể, giống như segwit gốc, ví có thể bao gồm cụm từ khởi đầu và cụm mật khẩu. Chúng được sử dụng để tạo khóa công khai và khóa riêng mở rộng để lấy địa chỉ của các đường dẫn tùy ý trong ví xác định phân cấp. Nó chủ yếu lưu trữ BRC-20 và NFT của BTC.