Những ứng dụng thú vị của CSFS (Phần 1)

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

Tác giả: Jeremy Rubin

Nguồn: https://rubin.io/bitcoin/2025/03/05/csfs-fun/

Trong sê-ri trên blog này, tôi sẽ ghi lại một số cách sử dụng thú vị của CSFS mà tôi đã nhận thấy.

Mục tiêu là ghi lại những điều mà người khác có thể chưa biết.

Tôi có phải là người phát minh ra chúng không? Có thể, cũng có thể không. Việc ghi nhận công lao của những người đi trước là điều đáng hoan nghênh!

Địa chỉ không thể thay thế và không thể tái sử dụng

Tạo một đầu ra Taproot và sử dụng "NUMS dot" làm khóa công khai nội bộ (sử dụng đường dẫn khóa NUMS và chỉ thiết lập một lá kịch bản (tapleaf), nghĩa là bạn luôn biết tất cả các tùy chọn chi phí), và sử dụng một lá kịch bản (tapleaf) đáp ứng kịch bản <PK> CHECKSIG (kiểm tra chữ ký) hoặc cung cấp bằng chứng rằng khóa công khai này đã tạo ra nhiều hơn một chữ ký cho bất kỳ hai phần dữ liệu khác nhau nào; sau đó, chọn một trong hai:

  • Sử dụng CTV, nó có thể được gửi đến OP_RETUREN;
  • Nếu không sử dụng CTV, nó trở thành thứ mà bất cứ ai cũng có thể chi tiêu.

Điều này có nghĩa là một khi bạn quan sát được chữ ký của một giao dịch xuất phát từ địa chỉ này, bạn biết rằng người gửi sẽ không gửi thêm chữ ký nào khác trừ khi họ sẵn sàng mất tiền.

Thêm nhiều điều thú vị:

Loại "bảo hiểm không rõ ràng" này cũng có thể được sử dụng ở các đầu ra và địa chỉ khác nhau để bảo vệ các địa chỉ có tài sản thế chấp mới, và thậm chí có thể có hiệu lực hồi tố .

Biên dịch trước bảng tra cứu hàm

Giả sử chúng ta muốn thêm một mã lệnh vào Bitcoin có thể đánh giá f(x) .

设x = musig(巨大的联盟,带有一次性的启动仪式)设CSFS(key, sig, data) = ...

Hãy nhớ lại kỹ thuật nối chuỗi phím ( bản dịch tiếng Trung )... Sử dụng kỹ thuật nối chuỗi phím để tạo một kịch bản với logic sau:

 CSFS(X, sig_x, sig_arg)CSFS(Tweaked(X, arg), sig_arg, arg)CSFS(Tweaked(X, arg), sig_f, f(arg)))sig_f != sig_arg

Bây giờ, (trong ủy ban ký kết) chạy f(arg) trên tất cả các giá trị của arg .

Điều này cung cấp cho bạn một bảng tra cứu có thể được sử dụng trong bất kỳ cấu trúc cây nào với bất kỳ kích thước nào trong bất kỳ tập lệnh nào, với chi phí cố định: 3 chữ ký và 2 khóa công khai, hoặc 256 byte, trong nhiều trường hợp rẻ hơn so với việc sử dụng cấu trúc cây được tạo sẵn với taproot.

Kỹ thuật này cũng có thể được điều chỉnh để hoạt động với nhiều tham số, miễn là kết quả có thể được tính toán trước. Điều này loại trừ các hàm có "không gian đầu ra lớn" như OP_CAT , nhưng bảng tra cứu có thể dựa trên quy tắc, chẳng hạn như Merkle trees.

Về mặt ứng dụng, các kỹ thuật trên tương đương nhau về độ tin cậy khi (ví dụ) Merkle trees cần được ký bằng khóa. Chẳng hạn, một cây lưu trữ số dư người dùng có thể được xây dựng sao cho bất kỳ người dùng nào cũng có thể "tra cứu"số dư của họ từ tập hợp các chữ ký.

Đối với việc sử dụng thông thường "thư viện chuẩn", các liên minh lớn có thể được sử dụng để thiết lập đáng tin cậy một lần duy nhất.

Phát hiện thẻ SIGHASH

Hiện tại, các tập lệnh Bitcoin không thể hạn chế việc khóa công khai sử dụng thẻ sighash nào. Tuy nhiên, CSFS có thể cung cấp một phiên bản giới hạn trong đầu ra Taproot. Cách phương pháp như sau:

Sử dụng CSFS, bạn có thể lấy bản tóm tắt của một giao dịch từ chữ ký và lưu trữ nó trên ngăn xếp.

Nếu không có OP_CAT, việc sử dụng nó sẽ bị hạn chế...

Tuy nhiên, chúng ta có công thức sau:

Độ dài đầu ra của SigMsg() là bao nhiêu? Tổng độ dài của SigMsg() có thể được tính bằng công thức sau: 174 - is_anyonecanpay * 49 - is_none * 32 + has_annex * 32

(Ghi chú của người dịch: Ở đây, is_anyonecanpay , is_none has_annex đều là các giá trị boolean, cho biết liệu các thẻ sighash này có được sử dụng trong chữ ký hay không.)

Tức là, tối đa 206 byte (khi has_annex được thiết lập).

Lưu ý: Con số này cuối cùng sẽ bao gồm 1 byte của sighash epoch và 64 byte của giá trị taggedhash.

Điều này có nghĩa là, khi sử dụng CSFS, bạn có thể giới hạn chữ ký chỉ sử dụng một nhãn sighash cụ thể bằng cách sử dụng OP_SIZE.

  • is_anyonecanpay=0, is_none=0, has_annex=0, size is 174+65
  • is_anyonecanpay=0, is_none=0, has_annex=1, size is 206+65
  • is_anyonecanpay=0, is_none=1, has_annex=0, size is 142+65
  • is_anyonecanpay=0, is_none=1, has_annex=1, size is 174+65
  • is_anyonecanpay=1, is_none=0, has_annex=0, size is 125+65
  • is_anyonecanpay=1, is_none=0, has_annex=1, size is 157+65
  • is_anyonecanpay=1, is_none=1, has_annex=0, size is 93+65
  • is_anyonecanpay=1, is_none=1, has_annex=1, size is 125+65

Nói cách khác, bạn có thể sử dụng CSFS để phân biệt giữa các tổ hợp thẻ anyonecanpaynoneannex , ngoại trừ các trường hợp cả is_nonehas_annex đều được đặt hoặc không được đặt (vì kích thước giống nhau nên không thể phân biệt được).

Nói cách khác, bạn có thể chỉ nghĩ đến được những sự kết hợp sau:

  • is_anyonecanpay=0, is_none=1, has_annex=0, size is 142+65
  • is_anyonecanpay=1, is_none=1, has_annex=0, size is 93+65

Đối với các tổ hợp sau, chúng ít thú vị hơn nhưng vẫn đáng để xem xét, bởi vì Annex không phải là một nền tảng giao dịch tiêu chuẩn:

  • is_anyonecanpay=0, is_none=0, has_annex=1, size is 206+65
  • is_anyonecanpay=1, is_none=0, has_annex=1, size is 157+65

Lưu ý: Với các tổ hợp này, bạn vẫn có thể thiết lập các thẻ khác!

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