Bằng chứng không kiến thức cho phép Cashu có các điều kiện chi tiêu tùy ý.

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

Tác giả: Starknet

Nguồn: https://blog.cashu.space/bringing-zero-knowledge-proofs-to-cashu/

Trong bài viết này, chúng ta sẽ khám phá cách "bằng chứng không kiến ​​thức" có thể cho phép trao đổi mã thông báo eCash với các điều kiện chi tiêu tùy ý (được chỉ định bởi ngôn ngữ lập trình Turing-complete) mà không ảnh hưởng đến quyền riêng tư.

Tổng quan về giao thức Cashu

Sau đây là tổng quan chung về giao thức "Cashu". Để biết trong đó chi tiết, vui lòng tham khảo tài liệu giao thức: Cashu NUTs (Ký hiệu, Cách sử dụng và Thuật ngữ).

Cashu là một giao thức eCash Chaumian mã mã nguồn mở và miễn phí ( Chaum, 1982 ) cho phép thực hiện các giao dịch Bitcoin gần như miễn phí và bảo mật thông qua mã thông báo điện tử; các mã thông báo điện tử này tương tự như tiền giấy và tiền xu và do người dùng nắm giữ.

hình ảnh

Giao thức Cashu xác định sự tương tác giữa ba bên:

  • Người gửi (Alice): Truyền mã thông báo tới...

  • Người nhận (Carla): Nhận mã thông báo.

  • Mint (Bob): Bên thứ ba cho phép Alice và Carla thực hiện các hoạt động sau:

    • Đúc tiền : Người dùng gửi Bitcoin qua Lightning Network để đúc token Cashu.

      • Alice ra hiệu cho Bob rằng cô ấy muốn đúc một lượng token Cashu nhất định.
      • Sau đó, Bob tạo Hóa đơn Lightning với số tiền đó và đưa cho Alice.
      • Sau khi nhận được khoản thanh toán, Bob " ký một cách mù quáng " vào một số giá trị bí mật do Alice xác định.
      • Sau đó, Alice có thể lấy được chữ ký của Bob bằng cách mở khóa, từ đó tạo ra mã thông báo cashu.
      • Sau đó, Alice có thể gửi những mã thông báo này—về cơ bản là những bí mật đã được tiết lộ và chữ ký (không che giấu) của Bob trên đó—cho Carla.

      (Ghi chú của người dịch: Trong giao thức Cashu, mã thông báo có mệnh giá chuẩn là lũy thừa của 2. Do đó, người dùng không nhận được một mã thông báo cùng một đúc mà là nhiều mã thông báo có thể được kết hợp để có được số tiền mong muốn.)

    • Trao đổi: Tạo một token cashu bằng cách sử dụng một token cashu khác

      • Carla ra hiệu cho Bob rằng cô ấy muốn trao đổi token (cô ấy cần gửi token cho Bob).
      • Sau khi xác minh mã thông báo, Bob ký ẩn một số giá trị bí mật mới do Carla xác định và vô hiệu hóa mã thông báo mà Carla sử dụng để trao đổi.
      • Ngoài ra, giống như việc trả lại tiền mặt, Carla cũng có thể yêu cầu chia token thành các mệnh giá khác nhau, ví dụ, chia một token trị giá 32 "satoshi" thành hai token, mỗi token trị giá 16 satoshi.
    • Meltdown : Đổi token Cashu Bitcoin

      • Alice ra hiệu cho Bob rằng cô muốn nấu chảy một số vật phẩm.
      • Cô ấy đã gửi mã thông báo Cashu và một lượng Hóa đơn Lightning tương đương cho Bob.
      • Sau khi Bob xác minh các mã thông báo, anh ấy đã thanh toán Hóa đơn Lightning và hủy các mã thông báo đã tan chảy.

Ví dụ: Alice gửi 100 điểm thông minh cho Carla

(Ví dụ sau đây được hiển thị trong ví web cashu.me .)

Hãy dùng một ví dụ cụ thể hơn. Giả sử Alice có đủ tiền trong ví Cashu và muốn gửi 100 satoshi eCash cho Carla.

hình ảnh

  1. Trên trang "Gửi", phần mềm ví của Alice sẽ đảm bảo cô ấy nắm giữ ít nhất 100 satoshi token. Nếu số dư của cô ấy vượt quá con số này, nhưng token của cô ấy không thể đạt chính xác 100 satoshi, ví sẽ thực hiện thao tác hoán đổi với đơn vị đúc tiền.
  2. Sau đó, Alice tuần tự hóa mã thông báo cần gửi.
  3. Sau đó, Alice có thể gửi mã thông báo đã được tuần tự hóa cho Carla (thông qua kênh liên lạc).
  4. Trong giai đoạn "nhận thanh toán", Carla ngay lập tức thực hiện hoán đổi bằng các token đã nhận. Như đã đề cập trước đó, việc hoán đổi sẽ khiến Bob vô hiệu hóa các token đã sử dụng cho việc hoán đổi và tạo một token mới bằng giá trị bí mật do Carla xác định, qua đó hoàn tất việc chuyển giao quyền sở hữu giá trị token.

Điều kiện chi phí

Alice có thể muốn gửi một mã thông báo không thể được sử dụng tùy ý và chỉ có thể được sử dụng bởi chủ sở hữu của một khóa công khai cụ thể. Điều này dẫn đến khái niệm " điều kiện sử dụng ".

Các điều kiện chi tiêu cho một mã thông báo có nghĩa là mã thông báo chỉ được hoán đổi hoặc tiêu hủy nếu có thể cung cấp một "nhân chứng" đáp ứng các điều kiện.

Để thiết lập các điều kiện chi tiêu cho một số token cashu, giá trị bí mật phải tuân theo định dạng giá trị bí mật được xác định trước trong quá trình đúc hoặc hoán đổi.

Ví dụ, nếu điều kiện là Carla là người nắm giữ một khóa công khai nào đó, thì giá trị bí mật của Alice phải tuân theo " Định dạng giá trị bí mật trả cho khóa công khai (P2PK) ".

Sử dụng lại ví dụ trước đó, ở bước áp chót, nếu mã thông báo được tuần tự hóa có giá trị 100 satoshi và chứa giá trị bí mật như thế này:

hình ảnh

Do đó, nếu Calir muốn nhận tiền (tức là token trao đổi), cô ấy phải cung cấp chữ ký hợp lệ của khóa công khai này làm bằng chứng. Nếu tất cả chữ ký do Carl cung cấp được xác minh bằng khóa công khai trong secret.data , thì Bob sẽ thực hiện giao dịch.

Hiện tại, giao thức Cashu chỉ hỗ trợ hai điều kiện chi tiêu ( P2PKHTLC ). Việc triển khai các điều kiện chi tiêu mới đòi hỏi phải sửa đổi nhiều thành phần đang hoạt động và có thể rất phức tạp. Để giải quyết những vấn đề này, chúng tôi giới thiệu một điều kiện chi tiêu tùy ý, đảm bảo quyền riêng tư, được gọi là "Điều kiện chi tiêu Cairo".

Tính toán bằng chứng STARK

Điều kiện chi phí Cairo cho phép thiết lập việc thực thi hợp lệ của bất kỳ chương trình Cairo nào làm điều kiện chi phí. Chứng cứ do người tính toán cung cấp là bằng chứng không kiến ​​thức về việc thực thi chương trình Cairo đã chỉ định, có đầu ra khớp với điều kiện.

Một giới thiệu rất ngắn gọn về Cario và STARK

"Bằng chứng STARK" được sử dụng để xác minh tính chính xác của phép tính một cách rất hiệu quả (nhanh hơn nhiều so với quá trình tính toán thực tế) mà không tiết lộ dữ liệu đầu vào của phép tính (thuộc tính này được gọi là "kiến thức bằng không").

" Cairo " là một ngôn ngữ lập trình được thiết kế riêng để sử dụng với các chứng minh STARK. Nó biên dịch mã dễ đọc thành một tập hợp các ràng buộc đánh giá đa thức (hệ thống chứng minh xử lý các đa thức trong một trường hữu hạn lớn Fp , và mã byte của chương trình Cairo là một mảng các số trong Fp ).

Ví dụ, chương trình Cairo sau fibonacci: Fp → Fp tính toán kết quả của việc lấy số Fibonacci thứ n modulo p :

hình ảnh

Phải mất khoảng 500 mili giây để tính toán các kết quả sau:

hình ảnh

Sau đó, chúng ta có thể sử dụng stwo-cairo để tạo ra bằng chứng STARK nhằm khẳng định tính đúng đắn của phép tính này.

Với mã bytecode của fibonacci , đầu ra c và bằng chứng STARK này, trình xác thực chuyên dụng có thể khẳng định tính hợp lệ của câu lệnh: ∃n : fibonacci(n) = c , mà không cần biết n hoặc chạy các phép tính fibonacci , và chỉ trong 50 mili giây!

Bạn có thể thử ví dụ này trên trang web stwo-cairo.vercel.app .

Bây giờ, nếu chúng ta thay thế fibonacci bằng một triển khai hàm xác minh của một lược đồ chữ ký số mà chúng ta thích, chúng ta sẽ có được một điều kiện P2PK tùy chỉnh! Hãy cùng xem nó thực sự hoạt động như thế nào.

Điều kiện chi tiêu ở Cairo

  • (Người gửi) đặt điều kiện:

    Khi gửi mã thông báo, người dùng có thể thêm điều kiện chi tiêu Cairo bằng cách chỉ định giá trị băm của chương trình đã biên dịch và giá trị băm của điều kiện đầu ra.

    Chương trình này (và các điều kiện đầu ra của nó) có thể cần được chia sẻ với người nhận thông qua một kênh truyền thông riêng.

  • (Người nhận) chi tiêu mã thông báo đã khóa:

    Bất kỳ người dùng nào muốn sử dụng mã thông báo này phải chạy chương trình này, khớp với điều kiện đầu ra mà người gửi mong muốn, sau đó tạo bằng chứng STARK cho phép tính này—cuối cùng được xác minh bởi xưởng đúc tiền.

Những điểm chính liên quan đến quyền riêng tư

Trong thiết lập này, xưởng đúc tiền sẽ biết mã bytecode của chương trình khi người dùng chi tiêu một mã thông báo (đây là điều kiện tiên quyết để xác minh bằng chứng).

Trong những trường hợp mà quyền riêng tư là tối quan trọng, chúng ta có thể sử dụng trình khởi động trên chương trình gốc.

Bộ nạp khởi động này là một chương trình Cairo, giống như một máy ảo, thực thi chương trình gốc và sau đó xuất ra (program_hash, program_output) .

Chúng ta có thể sửa đổi các điều kiện chi tiêu như sau:

  • 程序哈希值bootloader_program_hash
  • 输出条件(program_hash, output_condition)

Từ đó trở đi, máy đúc tiền sẽ chỉ biết mã bytecode của bộ nạp khởi động này, trong khi chương trình gốc sẽ được giữ bí mật khỏi máy đúc tiền từ đầu đến cuối!

Công việc của chúng tôi

Để tìm hiểu thêm, vui lòng xem đề xuất NUT của chúng tôi và cơ sở mã mà chúng tôi đã tạo trong TypeScript để xác thực máy trạm đối với các chương trình Cairo trong trình duyệt!

Video mẫu

Bản demo điều kiện chi phí Cairo

(qua)

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