Hiểu về Giao thức Taproot Assets

Bài viết này được dịch máy
Xem bản gốc

Tác giả: Hiroki Gondo

Nguồn: https://medium.com/nayuta-engineering-blog-en/under Hiểu- taproot-assets-protocol-e2dfe3fc1e07

Giao thức Taproot Assets (trước đây gọi là "Taro", sau đây viết tắt là "TAP") là giao thức đại diện cho tài sản dựa trên UTXO trên Bitcoin . Bài viết này nhằm giải thích cách TAP tạo và chuyển giao tài sản.

Giao thức hoàn chỉnh được chia thành nhiều phần. Bài viết này chủ yếu giải thích bip-tap và bit-tap-ms-smt.

Việc triển khai của Lightning Labs có thể được tìm thấy ở đây .

Taproot là gì?

" Taproot " là một loại đầu ra Bitcoin mới cho phép chỉ định đồng thời hai loại điều kiện chi tiêu: Chi tiêu chính ( Key Path ) và Chi tiêu tập lệnh ( Script Path ).

1_3ZjfJfqZlG3Sr8zCRpDO6g

Key Path , giống như đầu ra P2PKH truyền thống, được sử dụng bằng chữ ký khóa chung. Tập hợp khóa có chữ ký Schnorr (đa chữ ký) cũng có thể được sử dụng ở đây trong Taproot.

Script Path , giống như P2SH truyền thống, cho phép lập trình các điều kiện chi tiêu phức tạp bằng ngôn ngữ tập lệnh. Và Taproot cũng cho phép chỉ định nhiều tập lệnh cùng một lúc. Các tập lệnh này không được tuần tự hóa trực tiếp trong đầu ra Taproot mà được xây dựng dưới dạng Merkle trees và được nén thành hàm băm gốc. Khi đầu ra được sử dụng bằng cách sử dụng tập lệnh, chỉ tập lệnh đó cần được hiển thị (không hiển thị các tập lệnh khác).

TAP nhúng dữ liệu vào Script Pat ("Cây tài sản"). Dữ liệu này không thể giải thích được và không thể phát hiện được đối với nút Bitcoin vì nó đã được băm.

1_vHAqoqHoLHQ6DMZ-nFu5Og

Đại diện tài sản trong Tài sản Taproot

Cây tài sản

Cây tài sản là cấu trúc "cây tổng Merkle thưa thớt" hai cấp thể hiện giao thức Taproot Assets. Cấp thấp hơn thể hiện UTXO của một tài sản(được xác định bởi " id tài sản( asset_id )"). Cấp trên tổng hợp cây từ cấp dưới.

1_ykcsSYt_mGNy8uhutO7K7g

Giá trị của giá trị băm gốc ( asset_tree_root) của Merkle trees cấp cao hơn sẽ được Taproot nhúng vào đầu ra Script Path , từ đó cam kết với trạng thái của cây.

Việc chuyển giao tài sản cũng tạo ra một cây tài sản mới và cây tài sản cũ được cập nhật. Điều này có thể được thực hiện bằng cách bắt đầu một giao dịch Bitcoin mới sử dụng đầu ra Taproot của cây tài sản cũ; các giao dịch chuyển tiền không đáp ứng các thông số kỹ thuật (ví dụ: lạm phát, các cuộc gọi trùng lặp) sẽ bị cho rằng không hợp lệ. *

* Phương pháp được sử dụng ở đây là một khái niệm gọi là " xác minh máy trạm "; độc giả quen thuộc với sự đồng thuận đáng chú ý của Bitcoin có thể tò mò về cơ sở cho tính đúng đắn của thông số kỹ thuật ở đây, nhưng bây giờ tôi sẽ bỏ qua vấn đề đó.

Cây tổng Merkle thưa thớt

"Cây tổng Merkle thưa thớt" (sau đây viết tắt là "MS-SMT") là một biến thể của Merkle trees, được xác định bởi bip-tap-ms-smt . Bởi vì khóa của nó là 256 bit nên nó có 2^256 lá. Hầu hết các lá đều trống rỗng.

Mỗi lá chứa một đại lượng và mỗi nút nhánh cam kết tổng số lượng được đại diện bởi các lá trên cây con của nó. Ngay cả khi không biết nội dung của cây con, tổng số chứa trong cây con có thể được biết đơn giản bằng cách kiểm tra các nút nhánh. Gốc cây hứa hẹn tổng số lượng được đại diện bởi tất cả các lá.

Cũng giống như Merkle trees thông thường, chỉ cần một cây được cắt tỉa có chứa các lá mục tiêu cũng có thể cung cấp bằng chứng cho thấy những lá mục tiêu này có trên cây (Merkle proof). Nhưng MS-SMT cũng hỗ trợ "không có bằng chứng". Điều này được thực hiện bằng một hạn chế: số lượng lá biểu thị một từ khóa không tồn tại phải được đặt rõ ràng thành một giá trị biểu thị sự không tồn tại của nó (None) (do đó, việc chứng minh sự tồn tại của "Không" cấu thành Một không chứa bằng chứng). Do đó, MS-SMT mặc định sẽ có 2^256 lá biểu thị "Không".

Lá tài sản(UTXO tài sản)

MS-MST cấp thấp hơn của cây tài sản có asset_script_key làm khóa và lá tài sản làm giá trị. Mỗi lá tài sản đại diện cho một UTXO của tài sản(để đơn giản, nó sẽ được biểu thị trực tiếp dưới dạng "UTXO"* bên dưới) và các thuộc tính sau (bao gồm thuộc tính tùy chọn) sẽ được tuần tự hóa dưới dạng Định dạng "type-length-value" .

* Không phải UTXO của Bitcoin haha.

  • taproot_asset_version
  • asset_genesis
  • asset_id
  • asset_type
  • amt
  • lock_time
  • relative_lock_time
  • prev_asset_witnesses
    - prev_asset_id
    - asset_witness
    - split_commitment_proof
  • split_commitment
  • asset_script_version
  • asset_script_key
  • asset_group_key
  • canonical_universe

asset_genesis là lấy hình ảnh gốc của asset_id .

asset_script_key vừa là từ khóa cho lá tài sản vừa là khóa chung ở dạng Taproot (được xác định trong tap-vm độc lập với Bitcoin) và là điều kiện để chi tiêu UTXO được đại diện bởi lá tài sản đó.

Khi chi tiêu UTXO, trước tiên, điều kiện chi tiêu Bitcoin(bên ngoài) phải được đáp ứng, sau đó điều kiện chi tiêu TAP (nội bộ), được chỉ định bởi asset_script_keyasset_script_key phải được đáp ứng bởi prev_asset_idasset_witness . Ví dụ: asset_witness là chữ ký của asset_script_key của UTXO đang được sử dụng.

1_8yCJofequ55HYKSPG1Gb-Q

Nếu UTXO được phân chia trong quá trình chuyển tài sản thì cũng cần phải có split_commitmentsplit_commitment_proof .

split_commitment là một MS-SMT đề cập đến tất cả các UTXO sau khi phân tách (theo nghĩa này, cây tài sản thực sự có ba cấp độ) và tổng giá trị trong thư mục gốc là tất cả số tiền đã được chuyển.

split_commitment_proof là bằng chứng Merkle của split_commitment , chứng minh sự tồn tại của sự phân chia.

Trong số tất cả các phần tách, chỉ có một phần sẽ có prev_asset_id , asset_witnesssplit_commitment . Tất cả các phần chia tách khác chỉ có split_commitment_proof . Tất cả các phân vùng đều chia sẻ prev_asset_idasset_witness .

Tạo tài sản

1_6Tu6LHxuI1gTzOIKHf04zg

Việc tạo tài sản yêu cầu nhúng cây tài sản mới chứa UTXO của tài sản mới vào đầu ra Taproot của giao dịch Bitcoin (giao dịch trở thành giao dịch ban đầu của tài sản). ID của tài sản( asset_id ) được xác định theo công thức sau.

 asset_id := sha256(genesis_outpoint || sha256(asset_tag) || asset_meta_hash || output_index || asset_type)

genesis_outpoint là đầu ra giao dịch trước đó được chi tiêu bởi giao dịch này và output_index là số chỉ mục chứa đầu ra của cây tài sản này. Điều này đảm bảo rằng asset_id là duy nhất trên toàn cầu.

Tài sản mới được tạo UTXO bỏ qua prev_asset_idasset_witness .

Chuyển nhượng tài sản

Giống như Bitcoin UTXO, tài sản UTXO có thể được hợp nhất hoặc phân chia khi tài sản được chuyển nhượng. Nhưng hãy bắt đầu với một ví dụ đơn giản - không chia tách cũng không hợp nhất -*.

*Các giải thích sau đây đã được đơn giản hóa phần nào. Ví dụ: đầu ra thay đổi của giao dịch Bitcoin bị bỏ qua.

1_k9uQ2Brglnx-HOPaqVTupg

Alice có 10 tài sản nhất định, tất cả đều được chuyển cho Bob.

Alice tạo và phát sóng một giao dịch Bitcoin, chi tiêu đầu ra Taproot tại nơi chứa tài sản UTXO của cô ấy. Giao dịch này có hai đầu ra Taproot. Một đầu ra chứa cây tài sản mới, bao gồm UTXO mới sở hữu 10 tài sản nhất định và Bob có thể kiểm soát (ví dụ: sử dụng khóa Bitcoin của Bob). Đầu ra còn lại chứa một cây tài sản , được hình thành bằng cách loại bỏ các lá tài sản tương ứng khỏi cây tài sản ban đầu do Alice kiểm soát.

UTXO mới của Bob sử dụng prev_asset_id để lập chỉ mục cho UTXO đặt hàng trước của Alice. Trong asset_witness có chữ ký của lời mở đầu asset_script_key . Trong asset_script_key của UTXO mới này, có một khóa công khai mới do Bob đưa trước.

Bob cần xác minh rằng các điều kiện chi tiêu đã được đáp ứng và tài sản không bị thổi phồng sau khi chuyển khoản để xác nhận đã nhận được khoản thanh toán.

  • Cây tài sản mới tạo của Bob có chứa UTXO mới đáp ứng các điều kiện chi tiêu không?
  • UXTO đầu vào đã bị xóa khỏi cây tài sản cập nhật của Alice chưa?
  • Có bất kỳ đầu ra Taproot nào khác trong giao dịch không? Chúng có chứa cây tài sản khác không? *
  • vân vân.

Điều này đạt được bằng cách chứng minh/xác minh bằng chứng bao gồm/không bao gồm của MS-SMT cũng như bằng chứng và tiền ảnh do Taproot đưa ra.

* Nếu một UTXO khác được thêm vào một cây tài sản khác (không phải cây tài sản của Bob) và UTXO đầu vào cũng được chi tiêu thì nó sẽ cấu thành một khoản chi tiêu gấp đôi.

Hợp nhất UTXO

1_2vwC4q_3DOb0R8fs7RXxJQ

Alice có lần lượt 3 và 7 tài sản nhất định ở hai lá và cô ấy muốn chuyển tất cả chúng cho Bob.

Mỗi UTXO đầu vào có thể thuộc về một cây tài sản khác nhau hoặc một khóa khác ( asset_script_key ) trên cùng một cây tài sản. UTXO mới của Bob phải chứa prev_asset_idasset_witness cho hai UTXO đã sử dụng này.

Tách UTXO

1_mmoYchmgOBsa_MUKPOlbwg

Alice có 7 tài sản nhất định và sẵn sàng chuyển 3 cho Bob. Do đó, Alice sẽ giữ 3 và Bob sẽ nhận được 7.

Thay đổi UTXO của Alice sẽ có prev_asset_id , asset_witnesssplit_commitment ; UTXO mới của Bot sẽ chỉ có split_commitment_proof *.

Tôi sẽ không giải thích cách hợp nhất và tách UTXO cùng một lúc.

* Điều này hơi khác so với thông số kỹ thuật , nhưng có vẻ như việc triển khai mới nhất đã thực hiện điều này.

Chuyển nhượng tài sản

Mặc dù không có khối lượng phía trước nhưng mỗi UTXO đầu vào phải được xác minh là hợp pháp trước khi có thể xác minh việc chuyển giao tài sản. Đối với mỗi UTXO đầu vào, phải chứng minh/xác minh rằng mọi giao dịch trên toàn bộ đường dẫn lưu thông từ giao dịch tạo tài sản đến đầu vào hiện tại đều được thực hiện chính xác.

1_6Z-NG7a7zjf1H7hGekaU6g

Đường dẫn này là một biểu đồ phức tạp từ giao dịch gốc đến giao dịch mới nhất. Trong hình trên, đối với Tx A , tất cả các giao dịch màu xanh (giao dịch tổ tiên của nó) cần được xác minh; trong khi đối với Tx B , tất cả các giao dịch màu xanh và đỏ cần được xác minh. Đây là một thách thức đáng kể mở rộng vì lịch sử sẽ tăng trưởng theo cấp số nhân.

Ngoài ra, do các hình ảnh sơ bộ và bằng chứng cần thiết để xác minh không được công bố trên blockchain nên việc chuyển chúng giữa người gửi và người nhận tài sản cũng là một vấn đề.

Mở rộng

Lịch sử ngày càng tăng là một thách thức đáng kể mở rộng. Một số giải pháp đã được đề xuất, nhưng hỗ trợ cho Lightning Network là một trong những giải pháp hứa hẹn nhất. Các giao dịch ngoài Chuỗi không được thêm vào lịch sử.

Bộ giao thức này là mới và các thông số kỹ thuật chưa đầy đủ. Ví dụ, tôi đã chỉ ra vấn đề này trước đây.

Nguồn
Tuyên bố từ chối trách nhiệm: Nội dung trên chỉ là ý kiến của tác giả, không đại diện cho bất kỳ lập trường nào của Followin, không nhằm mục đích và sẽ không được hiểu hay hiểu là lời khuyên đầu tư từ Followin.
Thích
Thêm vào Yêu thích
Bình luận