1. Nền tảng bitcoin

Bitcoin áp 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 kế toán tài khoả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 quy trình giao dịch. Bước đầu tiên là trừ 100 nhân dân tệ từ tài khoản của A. ID hồ sơ 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. ID hồ sơ của bước này là tid2. Bước thứ ba là ghi lại hồ sơ chuyển khoản, liên kết tid1 và tid2, cho biết tài khoản A giảm 100 nhân dân tệ và tài khoản B tăng 100 nhân dân tệ. Bằng 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 danh sách có tên là "Đầu ra giao dịch chưa chi tiêu" (UTXO). Mỗi UTXO chứa một số lượng Bitcoin nhất định, cũng như thông tin về 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 tiền mặt có tên chủ sở hữu trên đó và miễn là chủ sở hữu ký vào đó, quyền sử dụng có thể được chuyển giao cho người khác. Đối với một địa chỉ cụ thể, tổng tất cả số tiền UTXO là số dư trong ví của địa chỉ đó. Bằng cách lặp qua tất cả các UTXO, chúng ta có thể nhận được số dư hiện tại của từng địa chỉ. Thêm tổng số lượng UTXO để có được tất cả Bitcoin hiện đang lưu hành.

Trong cấu trúc giao dịch 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 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. Sau khi giao dịch được bắt đầu, UTXO được tham chiếu bởi phần đầu vào của nó sẽ tạm thời bị khóa để ngăn việc sử dụng lại cho đến khi giao dịch hoàn tất. Chỉ khi giao dịch được thợ mỏ đóng gói thành công thành một khối và được mạng xác nhận thì trạng thái UTXO liên quan mới thay đổi. Cụ thể, các UTXO được sử dụng làm đầu vào cho giao dịch sẽ bị xóa khỏi danh sách UTXO, cho biết rằng chúng đã được sử dụng, trong khi đầu ra của giao dịch tạo ra các UTXO mới và được thêm vào danh sách UTXO. Có thể hiểu là sau khi séc tiền mặt cũ được sử dụng sẽ hết hiệu lực 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. Sau khi đượ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 các 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 blockchain, 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ẽ vượt quá tổng số tiền đầu ra một chút. Sự khác biệt này, được gọi là phí giao dịch hoặc phí mạng, được đưa ra như một động lực 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ô phí mạng tỷ lệ thuận với mức độ phức tạp của giao dịch, do đó, giao dịch có nhiều đầu vào và đầu ra thường sẽ yêu cầ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 ta 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 là "đầu vào" và "đầu ra" của giao dịch Bitcoin. Giao dịch bitcoin không ghi lại các thay đổi dữ liệu theo hình tài khoản như mô hình số dư tài khoản truyền thống mà được thể hiện bằng đầu vào và đầu ra.

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

Chúng ta 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 lệnh bitcoin-cli getrawtransaction và decoderawtransaction, chúng ta có thể xem cấu trúc cơ bản của giao dịch trên:

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d8 6652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[TẤT CẢ] 0484ecc0d46f1 918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","trình tự": 4294967295 }],"vout": [{"giá trị": 0,01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"giá trị": 0,08450000,"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

Trong mạng Bitcoin, đầu ra giao dịch chứa hai thông tin quan trọng: địa chỉ (băm khóa công khai) và số tiền (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 giao dịch được gọi là đầu ra giao dịch chưa chi tiêu (UTXO). Bất cứ ai sở hữu khóa riêng tương ứng với khóa chung trong UTXO đều có quyền sử dụng (tức là chi tiêu) UTXO này.

Hãy xem thông tin trong "vin" trong đoạn mã trên Nó chỉ ra rằng UTXO được chi tiêu bởi giao dịch này đến từ đầu ra thứ 0 (đầu ra của một giao dịch có thể là bội số, chỉ số là từ số bắt đầu 0), chúng ta có thể tìm thấy số lượng UTXO này từ các giao dịch lịch sử (ví dụ: 0,1), do đó, trong giao dịch này, người dùng đã chi 0,1 BTC và giá trị 0,1 không cần phải ghi rõ ràng trong giao dịch mà thông qua tìm kiếm sẽ thu được thông tin UTXO. "Vout" của giao dịch này có hai đầu ra. Hai đầu ra này là hai UTXO mới, tương ứng với số dư và chủ sở hữu mới, 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 trong đó A trả cho B số tiền n Bitcoin. 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 hết cần xác định tập hợp tất cả các UTXO mà họ sở hữu, tức là tất cả số 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 số lượ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à m-n-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ỉ. Nói chung, 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 người khai thác đóng gói giao dịch và tải nó lên chuỗi để xác nhận, B có thể nhận được thông tin giao dịch. Vì kích thước khối có giới hạn trên (khoảng 1 MB), nên thợ đào sẽ ưu tiên các giao dịch có tỷ lệ giao dịch cao (fee_rate=fee/size) để thu được lợi nhuận phí cao nhất. Chúng ta có thể thấy tình hình phí giao dịch khai thác theo thời gian thực trong mempool. Nếu muốn xác nhận nhanh nhất trong quá trình chuyển khoả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 Công

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à gán cho mỗi satoshi một số duy nhất. Phần này sẽ giới thiệu cách giao thức này đánh số duy nhất cho mỗi Satoshi và cách nó theo dõi tài khoản mà nó thuộc về. Ngoài ra, cách phân loại độ hiếm của Satoshi cũng sẽ được giới thiệu.

số của Satoshi

Theo giao thức Ordinals, satoshi được đánh số dựa trên thứ tự chúng được khai thác. Hình bên dưới thể hiện số satoshi thứ 0 được khai thác trong khối thứ 0.

Có nhiều cách để thể hiện Satoshi:

  • Ký hiệu số nguyên: Ví dụ: 2099994106992659, đại diện cho số sê-ri được gán cho 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ố satoshi trong khối.

  • Ký hiệu độ: Ví dụ: 3°111094′214″16797‴, số đầu tiên là dấu chấm, được đánh số bắt đầu 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à chỉ số khối trong độ khó kỳ điều chỉnh, số cuối cùng là chỉ số sat trong khối.

  • Ký hiệu phần trăm: Ví dụ: 99,99971949060254% biểu thị vị trí của Satoshi 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á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 được khai thác. Nhìn vào khối 795952 của chuỗi khối Bitcoin, chúng ta có thể thấy giao dịch đầu tiên Tx 3a1f...b177 ghi lại phần thưởng của người khai thác (giao dịch coinbase). Giao dịch này bao gồm số Bitcoin mới được khai thác, được sử dụng làm phần thưởng đóng gói cho người khai thác, cũng như phí xử lý mà người khởi tạo giao dịch trả cho 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 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.

Nếu chúng ta nhìn sâu hơn vào kết quả đầu ra cho các thợ mỏ, chúng ta có thể thấy sự phân bổ địa chỉ, số lượng và satoshi chứa trong đó. 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 xanh 1941220000000000–1941220625000000 là satoshi mới được tạo ra bởi phần thưởng khai thác và 712 satoshi còn lại tương ứng với tất cả phí xử lý trong khối.

Chúng tôi có thể xác minh số Thứ bảy 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, số lượng Satoshi trong khối này là 0 và dấu độ hiếm (độ hiếm) tiếp theo là không phổ biến. Chúng tôi Điều này sẽ được giải thích chi tiết ở phần sau.

Sự lưu thông của Công

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ể truy nguyên đượ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 (toàn bộ 10 satoshi được lưu trữ trong cùng một UTXO với ID adc123). Khi người dùng A muốn trả 5 satoshi cho người dùng B, 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 tiền thừa. Hai bản sao của 5 satoshi này là một tổng thể và đượ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ụ. Trong các tình huống thực tế, số lượng satoshi tối thiểu được gửi được giới hạn ở 546 và id UTXO không được biểu thị ở dạng này.

Trong giao dịch trên, đường lưu thông 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 thứ 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 có 5 satoshi. Nguyên tắc "nhập trước, xuất trước" được sử dụng ở đây, tức là thứ tự số lượng satoshi được xác định theo chỉ số của chúng trong đầu ra giao dịch. Giả sử thứ tự đầu ra là người dùng A trước, sau đó là 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.

Satoshi hiếm

Là một phiên bản phụ của giao thức Ordinals, độ hiếm của satoshi có thể được xác định dựa trên thứ tự 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à mức độ hiếm của các Satoshi khác nhau:

  • chung: Bất kỳ satoshi nào ngoại trừ satoshi đầu tiên trong khối (tổng nguồn cung là 2.100 nghìn tỷ)

  • Không phổ biến: satoshi đầu tiên trong mỗi khối (tổng nguồn cung là 6.929.999)

  • hiếm: satoshi đầu tiên trong mỗi giai đoạn điều chỉnh độ khó (tổng nguồn cung 3437)

  • epic: satoshi đầu tiên sau mỗi đợt halving (tổng nguồn cung là 32)

  • huyền thoại: satoshi đầu tiên mỗi chu kỳ (tổng nguồn cung là 5)

  • Huyền thoại: satoshi đầu tiên trong khối Genesis (tổng nguồn cung là 1)

Khái niệm satoshi hiếm này có thể tăng thêm sự quan tâm 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. Phương pháp khắc chữ

Số 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. Sự khác biệt chính là siêu dữ liệu Ordinals không được lưu trữ ở một vị trí cụ thể. Thay vào đó, siêu dữ liệu này được nhúng vào dữ liệu nhân chứng của giao dịch (dữ liệu nhân chứng, trường nhân chứng), đó là lý do tại sao chúng tôi gọi nó là “dòng chữ” vì dữ liệu này được “khắc” vào Bitcoin giống như một dòng chữ trên một phần cụ thể của giao dịch. dữ liệu được gắn vào một Satoshi cụ thể. Quá trình ghi chú này được thực hiện thông qua Segregated Witness (SegWit) và Pay-to-Taproot (P2TR), bao gồm hai giai đoạn: cam kết và tiết lộ, bất kỳ dạng nội dung nào (chẳng hạn như văn bản, hình ảnh hoặc video) đều có thể được ghi trên phần được chỉ định. Satoshi. 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 ghi. Đồng thời, chúng tôi sẽ giới thiệu Segregated Witness và Pay-to-Taproot là gì cũng như vai trò của chúng trong Inscription. Cuối cùng chúng tôi sẽ giới thiệu phương pháp ghi.

OP_RETURE

Trong máy khách Bitcoin Core phiên bản 0.9, sự 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ả, RETURN tạo ra một đầu ra không thể tiêu thụ được, có thể xác minh rõ ràng và không cần lưu trữ trong bộ UTXO. Các đầu ra RETURN được ghi lại trên blockchain. Chúng tiêu tốn dung lượng ổ đĩa và tăng kích thước của blockchain. Tuy nhiên, 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 và sẽ không tăng số lượng nút đầy đủ. Chi phí bộ nhớ đắt đỏ.

Mặc dù OP_RETURN là một phương tiện lưu trữ thông tin rất đơn giản vào chuỗi khối Bitcoin nhưng nó cũng là một phương pháp ghi thông tin tiềm năng. Nhưng những hạn chế của OP_RETURN khiến nó gặp phải một số thách thức khi xử lý việc 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 với các trường hợp cần lưu trữ lượng dữ liệu lớn hơn, giới hạn này rõ ràng là không thỏa đáng. 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 blockchain, dẫn đến tăng kích thước của blockchain. Cuối cùng, việc sử dụng OP_RETURN dẫn đến phí giao dịch cao hơn vì yêu cầu phải trả nhiều tiền hơn để đăng các giao dịch này.

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ác vấn đề trên. SegWit là một bản nâng cấp giao thức quan trọng cho Bitcoin. Nó được nhà phát triển cốt lõi Bitcoin Pieter Wuille đề xuất vào năm 2015 và cuối cùng đã được áp dụng chính thức trong phiên bản 0.16.0 vào năm 2017. Tách biệt trong Segregated Witness có nghĩa là sự tách biệt và cô lập. Nhân chứng là một điều đặc trưng liên quan đến một 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 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à giảm kích thước dữ liệu được lưu trữ trong khối Bitcoin. Điều này có thêm dung lượng trên mỗi khối để 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 phải trả phí thấp hơn. Về mặt kỹ thuật, điều đó có nghĩa 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 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 là hợp lệ. Bản nâng cấp Segwit giới thiệu trường nhân chứng mới trong kết quả đầu ra 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 lại cho chúng tôi cơ hội lưu trữ những thứ như siêu dữ liệu ghi chú. Chúng ta sử dụng hình sau để hiểu Segregated Witness một cách sống động hơn:

Rễ cái

P2TR là loại đầu ra giao dịch của Bitcoin được giới thiệu trong bản nâng cấp Taproot vào năm 2021, cho phép các điều kiện giao dịch khác nhau được lưu trữ trong chuỗi khối một cách riêng tư hơn. Trong dòng chữ của Ordinals, P2TR đóng một vai trò quan trọng. Về cơ bản, Inscription nhúng nội dung dữ liệu cụ thể vào các giao dịch Bitcoin và các bản nâng cấp Taproot, đặc biệt là P2TR, giúp việc nhúng dữ liệu này trở nên linh hoạt và tiết kiệm hơn.

Đầu tiên, 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 việc lưu trữ nội dung dòng chữ tương đối tiết kiệm. Vì việc sử dụng tập lệnh Taproot chỉ có thể được thực hiện từ đầu ra Taproot đã có sẵn nên Inscription sử dụng quy trình xác nhận/tiết lộ hai giai đoạn. Đầu tiên, trong giao dịch cam kết, đầu ra Taproot được tạo ra hứa hẹn một tập lệnh chứa nội dung dòng chữ. Sau đó, trong một giao dịch tiết lộ, đầu ra do giao dịch cam kết tạo ra sẽ được tiêu thụ, do đó tiết lộ nội dung ghi trên chuỗi.

Cách tiếp cận này làm giảm đáng kể việ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ữ trong đầu ra của giao dịch. Bằng cách này, miễn là đầu ra này không được sử dụng, thông tin nhân chứng sẽ luôn được lưu trữ trong bộ UTXO. Ngược lại, nếu sử dụng P2TR, 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, do đó nó sẽ không được ghi vào bộ UTXO. Chỉ khi UTXO này được sử dụng thì thông tin nhân chứng mới xuất hiện trong đầu vào giao dịch trong giai đoạn tiết lộ. P2TR cho phép siêu dữ liệu được ghi 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 bộ UTXO yêu cầu 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 tận 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, lưu trữ nội dung ghi trong dữ liệu nhân chứng. Cho phép nó lưu trữ tối đa 4MB siêu dữ liệu. Taproot giúp việc lưu trữ dữ liệu nhân chứng tùy ý trong các giao dịch Bitcoin trở nên 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ã hoạt động cũ (OP_FALSE, OP_IF, OP_PUSH) vào những gì ông mô tả là "phong bì" cho cái mà ông gọi là lưu trữ "dòng chữ" Dữ liệu tùy ý.

Quá trình đúc chữ khắc bao gồm hai bước sau:

  1. Trước tiên, bạn cần tạo một giao dịch cam kết với đầu ra Taproot của tập lệnh chứa nội dung dòng chữ. Đị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 ở một định dạng cụ thể trong tập lệnh Taproot được chứng kiến ​​trước tiên, chuỗi ord là; được đẩy lên ngăn xếp, để loại bỏ sự mơ hồ rằng dòng chữ này có những công dụng khác. OP_PUSH 1 chỉ ra rằng lần đẩy tiếp theo chứa loại nội dung và OP_PUSH 0 chỉ ra rằng lần đẩy dữ liệu tiếp theo chứa chính nội dung đó. Các dòng chữ 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 ghi đã được ánh xạ tới UTXO của đầu ra giao dịch, nhưng chưa được công khai.

  2. 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, giao dịch được bắt đầu bằng cách sử dụng UTXO tương ứng với dòng chữ đó làm đầu vào. Lúc này, nội dung dòng chữ tương ứng đã được công khai trên toàn bộ Internet.

Qua hai bước trên, nội dung dòng chữ đã được liên kết với UTXO được ghi. Theo vị trí của Satoshi được giới thiệu ở trên, việc khắc chữ được thực hiện trên Satoshi đầu tiên tương ứng với đầu vào UTXO và nội dung của dòng chữ được đưa vào đầ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, những satoshi này được khắc nội dung đặc biệt có thể được chuyển nhượng, mua, bán, bị mất và phục hồi. Cần lưu ý rằng không được phép ghi lại các dòng chữ, nếu không các dòng chữ tiếp theo sẽ không hợp lệ.

Chúng tôi sẽ giải thích chi tiết về quy trình này thông qua ví dụ khắc một hình ảnh BTC NFT nhỏ. Quy trình này chủ yếu bao gồm hai giai đoạn cam kết và tiết lộ đã đề cập trước đó. Đầu tiên, chúng ta thấy ID băm của giao dịch đầu tiên là 2ddf9...f585c. Có thể lưu ý 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 ghi chú liên quan trên trang web.

Tiếp theo, chúng tôi kiểm tra bản ghi giai đoạn thứ hai, có ID Hash là e7454...7c0e1. Tại đây chúng ta có thể xem thông tin về dòng chữ Ordinals, đó chính là nội dung của dòng chữ làm 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 0,00000546BTC (546 Satoshi) là để gửi NFT này đến địa chỉ của chính bạn. Đồng thời, chúng ta cũng có thể tìm thấy satoshi nơi có dòng chữ này vào Thứ Bảy 1893640468329373.

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ể gửi trực tiếp đến địa chỉ của người khác, tức là gửi UTXO này, như vậy sẽ hoàn tất việc chuyển dòng chữ.

4. Ví Bitcoin

Sau khi chúng ta hiểu hệ sinh thái thông thường, sự lưu hành của satoshi và kiến ​​thức liên quan về chữ khắc là gì, hiện tại có nhiều kịch bản ứng dụng, cho dù đó là sự xuất hiện của BRC-20, ORC-20, BRC-721, GBRC-721 và các giao thức phái sinh có liên quan khác, yêu cầu 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 hình ả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. Cũng 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ừ góc độ bảo mật, địa chỉ Bitcoin không chứa bất cứ điều gì nhạy cảm. Nó có thể được đăng ở bất cứ đâu mà không ảnh hưởng đến tính bảo mật của tài khoản của bạn. Không giống như địa chỉ email, địa chỉ mới có thể được tạo bất cứ lúc nào nếu cần, tất cả những đị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 địa chỉ mới cho mọi giao dịch để tối đa hóa quyền riêng tư. Ví chỉ đơn giản là một tập hợp các địa chỉ và khóa để mở khóa số tiền bên trong nó. Đầu tiên chúng ta cần biết địa chỉ ví Bitcoin được tạo ra như thế nào.

Khóa riêng tư và công khai của Bitcoin

Bitcoin sử dụng đường cong elip Secp256k1. “Private key” là một số ngẫu nhiên trong khoảng từ 1 đến n-1. n là một số lớn (256 bit) được biểu thị bằng ký hiệu khoa học như sau:

Phạm vi này cực kỳ lớn và 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 thị bằng 256 bit và có nhiều phương pháp mã hóa. Nếu khóa riêng ở dạng WIF hoặc dạng nén WIF không được mã hóa thì có thể lấy được "số nguyên ngẫu nhiên" ban đầu bằng cách giải mã nó. Một cách khác là BIP38, đề xuất sử dụng thuật toán AES để mã hóa khóa riêng. Khóa riêng thu được bằng phương pháp này bắt đầu bằng ký tự 6P. Loại khóa riêng này phải nhập mật khẩu trước khi có thể được nhập vào nhiều ví Bitcoin khác nhau. Đây là những gì chúng ta thường làm.

Sau đó, chúng ta sẽ sử dụng công thức đường cong elip K = kG để tạo khóa công khai Bitcoin K từ khóa riêng k G là Điểm cơ sở, là tham số của secp256k1. Có thể lấy đượ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".

  • Hình thức Không nén là kết 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 nghĩa là y là số chẵn thì mã là 02 x, 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. Có bốn phương pháp biểu diễn:

Tham khảo: https://en.bitcoin.it/wiki/Invoice_address

1. Định dạng kế thừa (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 tính từ public key thông qua Hash hay còn gọi là P2PKH là viết tắt của Pay To PubKey Hash (thanh toán cho public key hash).

2. Đị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, hỗ trợ các chức năng phức tạp hơn địa chỉ Legacy. Nested P2SH, lấy địa chỉ P2SH hiện có (bắt đầu bằng "3") và đóng gói nó bằng địa chỉ SegWit.

3. Đị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, là địa chỉ SegWit gốc. Địa chỉ được mã hóa Bech32 là định dạng địa chỉ được phát triển đặc biệt cho SegWit. Bech32 được xác định trong BIP173 vào cuối năm 2017. Một trong những đặc điểm 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), do đó nó có thể tránh nhầm lẫn khi nhập một cách hiệu quả và dễ đọc hơn . Vì địa chỉ cần ít ký tự hơn nên địa chỉ này sử dụng mã hóa Base32 thay vì Base58 truyền thống, giúp việc tính toá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 tính 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ệ.

Bản thân địa chỉ Bech32 tương thích với SegWit. Không cần thêm dung lượng để đưa địa chỉ SegWit vào địa chỉ P2SH nên sử dụng địa chỉ định dạng Bech32 thì 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ũ (mã hóa Base58Check được sử dụng để mã hóa các mảng byte trong Bitcoin thành các chuỗi mà con người có thể mã hóa): mã QR nhỏ hơn; khả năng chống lỗi tốt hơn, an toàn hơn; , để dễ đọc, gõ và dễ hiểu hơn.

4. Đị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 thì việc chèn hoặc xóa bất kỳ số 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 của nó.

Để khắc phục những thiếu sót trên của Bech32, địa chỉ Bech32m đã được đề xuất trong BIP0350:

  • Đối với các địa chỉ SegWit gốc phiên bản 0, hãy sử dụng Bech32 trước đó;

  • Đối với các địa chỉ SegWit gốc phiên bản 1 (hoặc cao hơn), Bech32m mới sẽ được sử dụng.

Đố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 bản địa, ví có thể bao gồm cụm từ hạt giống và cụm mật khẩu. Chúng được sử dụng để tạo các khóa công khai và riêng tư mở rộng được sử dụng để lấy địa chỉ cho 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à BTC NFT, v.v.