Fluxe: Giao thức bảo mật toàn diện cho thanh toán Stablecoin xuyên chuỗi với khả năng tuân thủ có thể lập trình

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

Fluxe: Giao thức bảo mật toàn diện cho thanh toán Stablecoin xuyên chuỗi với khả năng tuân thủ có thể lập trình

Tóm tắt

Chúng tôi giới thiệu Fluxe, một giao thức bảo mật phổ quát cho phép chuyển tiền ổn định riêng tư qua nhiều mạng blockchain với sự tuân thủ theo quy định. Giao thức kết hợp các kiến trúc bằng chứng lai (Groth16 phía máy khách, SP1 phía máy chủ), các mô hình UTXO bí mật với cây merkle được lập chỉ mục và zk-promises cho các lệnh gọi lại tuân thủ không đồng bộ. Hệ thống hỗ trợ thanh toán riêng tư xuyên chuỗi với cân bằng thanh khoản tự động và thanh toán có thể lập trình.

1. Giới thiệu

Các giao thức bảo mật hiện tại phải đối mặt với tam nan về quyền riêng tư, tuân thủ và khả năng tương tác giữa các chuỗi. Fluxe giải quyết vấn đề này thông qua tích hợp zk-promises cho phép xác định tuân thủ không đồng bộ mà không ảnh hưởng đến quyền riêng tư của giao dịch.

2. Kiến trúc kỹ thuật

2.1 Mô hình UTXO bảo mật

Mỗi nốt N N được định nghĩa như sau:
N = \ { kiểu \ tài sản , giá trị , chủ sở hữu , \ psi , gợi ý \ chuỗi , dữ liệu \ tuân thủ , dòng \ băm , id \ nhóm , lệnh gọi lại \ } N = { kiểu \ tài sản , giá trị , chủ sở hữu , ψ , gợi ý chuỗi , dữ liệu tuân thủ , nguồn dòng , id nhóm , lệnh gọi lại }

Cam kết ghi chú được tính như sau:

cm = H(kiểu tài sản \giá trị song song \chủ sở hữu song song \psi \gợi ý chuỗi song song \tuân thủ \ dữ liệu song song \ dòng dõi song song \ băm \ nhóm song song \ id \ song song H ( gọi lại ) ) c m = H ( kiểu tài sản giá trị chủ sở hữu ψ gợi ý chuỗi tuân thủ _dữ liệu dòng dõi _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm _hàm_ ...

Nguồn gốc của nullifier ngăn chặn việc chi tiêu gấp đôi:

nf = H(auth\_secret \parallel \psi \parallel cm) n f = H ( a u t h _ se e c r e t ψ c m )

trong đó auth\_secret a u t h _ se c r e t được lấy từ khóa riêng của chủ sở hữu và \psi ψ là entropy trên mỗi nốt nhạc.

2.2 Cây Merkle được lập chỉ mục

Cây merkle thưa thớt truyền thống yêu cầu d = 256 d = 256 phép toán băm cho bằng chứng thành viên. Fluxe sử dụng cây merkle được lập chỉ mục với cấu trúc danh sách liên kết được sắp xếp để giảm xuống còn d = 64 d = 64 phép toán.

Mỗi nút lá lưu trữ:
lá = \ { giá trị , chỉ số \ _tiếp theo , giá trị \ _tiếp theo \ } = { giá trị , chỉ số tiếp theo , giá trị tiếp theo }

Triển khai bằng chứng không phải thành viên :
Sử dụng cây Merkle được lập chỉ mục, việc không phải là thành viên được chứng minh bằng cách tìm ra giá trị vô hiệu thấp (địa chỉ được chấp thuận có giá trị lớn nhất nhỏ hơn địa chỉ mục tiêu):

\text{NonMembershipProof}(addr, root, proof) = NonMembershipProof ( a d d r , root o o t , p r o o f ) =

\begin{cases}\text{MerkleProof}(thấp\_addr, gốc, đường dẫn) \land \\thấp\_addr.giá trị < địa chỉ \land \\(thấp\_addr.giá trị tiếp theo \lor thấp\_addr.giá trị tiếp theo == 0 ) \ end { cases } MerkleProof ( thấp _ a d d r , gốc , đường dẫn ) thấp _ a d d r . giá trị < a d d r ( a d r < thấp _ a d r . giá trị tiếp theo _ t a l u e thấp _ a d r . giá trị tiếp theo _ t a l u e = = 0 )

trong đó low\_addr = \{giá trị, next\_index, next\_value\} l o w _ a d d r = { v a l u e , n e x t _ i n d e x , n e x t _ v a l u e } là mục địa chỉ được chấp thuận mà địa chỉ đích sẽ nằm sau trong danh sách được sắp xếp.

Bằng chứng bao gồm:

  • Đường dẫn Merkle cho nút v_i v i (64 băm)
  • Xác minh rằng v_i.next\_value = v_{i+1} v i . n e x t _ v a l u e = v i + 1
  • Kiểm tra phạm vi: v_i < v < v_{i+1} v i < v < v i + 1

2.3 Hệ thống chứng minh lai

Mạch phía máy khách (Groth16) :

Mạch gửi tiền :

Public: deposit_amount, asset_type, tx_hash, cm_out Private: owner_secret, ψ Constraints: - Verify deposit transaction validity- cm_out = H(asset_type || deposit_amount || owner || ψ || ...)

Mạch chuyển mạch :

Public: nf _in, cm_ out, merkle _rootPrivate: note_ in, auth _secret, note_ outConstraints: - nf _in = H(auth_ secret || note _in.ψ || note_ in.cm) - MerkleProof(note _in.cm, merkle_ root) - value _in ≥ value_ out + fee - cm _out = H(note_ out)

Mạch rút lui :

Public: nf, amount, dest_chain, recipient Private: note, auth_secret Constraints: - nf = H(auth_secret || note.ψ || note.cm)- amount ≤ note.value- dest_chain ∈ supported_chains

Xác minh phía máy chủ (SP1) :

SP1 xác minh bằng chứng Groth16 của máy khách bằng cách sử dụng biên dịch trước groth16_bn254 và thực hiện cập nhật trạng thái hàng loạt:

fn verify_and_update_state (old_root: [ u8 ; 32 ],groth16_proofs: Vec <Groth16Proof>,public_inputs: Vec <PublicInputs>) -> [ u8 ; 32 ] { for (proof, inputs) in groth16_proofs. zip (public_inputs) {groth16:: verify (proof, inputs);} let new_nullifiers = extract_nullifiers (public_inputs);indexed_merkle_tree:: batch_insert (old_root, new_nullifiers)}

2.4 Kiểm tra các biện pháp trừng phạt cơ bản của khách hàng

Đối với việc tuân thủ cơ bản, yêu cầu cơ bản nhất là chứng minh rằng các địa chỉ giao dịch không bị xử phạt. Điều này được thực hiện thông qua bằng chứng không kiến thức phía máy khách so với cam kết về các địa chỉ được gắn cờ.

Cam kết danh sách trừng phạt :
Giao thức duy trì cam kết cây Merkle đối với các địa chỉ được chấp thuận:

trừng phạt\_root = \text{MerkleRoot}( \ { addr_1 , addr_2 , ... , addr_n \ } ) lệnh trừng phạt _ root = MerkleRoot ( { a d r 1 , a d r 2 , . . . , a d r n } )

trong đó mỗi addr_i a d r i một băm địa chỉ được chấp thuận.

Mạch sàng lọc trừng phạt cơ bản :

Public: sanctions_root, tx_valid Private: sender_addr, recipient_addr, sanctions_proof_sender, sanctions_proof_recipient Constraints: - NonMembershipProof(sender_addr, sanctions_root, sanctions_proof_sender)- NonMembershipProof(recipient_addr, sanctions_root, sanctions_proof_recipient)- tx_valid = (sender_proof_valid ∧ recipient_proof_valid)

LƯU Ý: Trong khi việc sàng lọc các biện pháp trừng phạt cơ bản diễn ra ở phía máy khách, sức mạnh thực sự của hệ thống nằm ở khả năng thực thi việc tuân thủ một cách hồi tố thông qua các lệnh gọi lại. Xem Mục 3.10 để biết cách đóng băng tài sản sau giao dịch nếu phát hiện ra các vấn đề về tuân thủ.

2.5 Giao thức cầu nối chuỗi chéo

Hợp đồng cầu nối duy trì bất biến:

\ sum_ { i } tiền gửi_i = \ sum_ { j } rút_j + \ sum_ { k } thanh khoản \ _k tiền gửi i = j với số tiền rút j + thanh khoản _k

Đối với các hoạt động liên chuỗi, giao thức sẽ phối hợp:

  1. Rút chuỗi nguồn : Ghi chú, phát sự kiện có bằng chứng
  2. Truyền tin nhắn : CCTP (cho USDC) hoặc LayerZero (cho các loại khác)
  3. Tiền gửi chuỗi đích : Tiền tương đương đúc sau khi xác minh

Thuật toán định tuyến thanh khoản chọn đường dẫn tối ưu dựa trên:

chi phí ( đường đi ) = chi phí gas + phí cầu + thời gian \ hình phạt \ cdot trì hoãn chi phí ( đường đi ) = chi phí gas + phí cầu + thời gian hình phạt trì hoãn

Điều này được thực hiện thông qua những người quản lý bên ngoài giúp thanh toán gas và thực hiện các hành động này trên các sự kiện được quan sát, mặc dù các chức năng cân bằng không cần xin phép và có thể được bất kỳ ai gọi đến.

2.6 Tích hợp với Mạng lưới thanh toán đa Twine

Fluxe hoạt động như một lớp ứng dụng trên cơ sở hạ tầng đa thanh toán của Twine, tận dụng kiến trúc máy khách nhẹ của nó để có chức năng chuỗi chéo:

  • Xác minh máy khách nhẹ : Twine duy trì máy khách nhẹ cho mỗi chuỗi được hỗ trợ để xác minh quá trình chuyển đổi trạng thái
  • Bằng chứng chuỗi chéo : Cập nhật trạng thái được xác minh thông qua bằng chứng máy khách nhẹ trước khi chấp nhận trên chuỗi từ xa
  • Giải quyết không đồng bộ : Mỗi chuỗi xử lý các bản cập nhật trạng thái Fluxe khi xác minh máy khách nhẹ
  • Cầu nối được tối thiểu hóa sự tin cậy : Chuyển giao tài sản được xác minh thông qua bằng chứng trạng thái máy khách nhẹ

Kiến trúc này cho phép Fluxe duy trì quyền riêng tư trong khi vẫn đạt được khả năng tương tác xuyên chuỗi thông qua xác minh mật mã thay vì sự đồng thuận.

┌────────────────────────────────────────────────────────┐│ TWINE ││ ││ ┌──────────────────────────────────────────────────┐ ││ │ FLUXE │ ││ │ │ ││ │ • Nullifier Tree (IMT) │ ││ │ • Commitment Tree │ ││ │ • Transfer Proofs (Groth16) │ ││ │ • Compliance Callbacks │ ││ │ • SP1 Verification │ ││ └──────────────────────────────────────────────────┘ ││ ↑ ││ Light Clients │└─────────────────────────┼──────────────────────────────┘↓┌──────────┐ ┌──────────┐│ Ethereum │ │ Solana ││ Bridge │ │ Bridge │└──────────┘ └──────────┘(Deposit/ (Deposit/Withdraw) Withdraw)

3. Tích hợp zk-Promises để tuân thủ không đồng bộ

3.1 Quỹ zk-Objects

Fluxe mở rộng mô hình zk-objects trong đó mỗi người dùng duy trì một đối tượng tuân thủ có chứa trạng thái và một trình hủy duy nhất cho các bản cập nhật. Cấu trúc đối tượng:

obj = \ { trạng thái , tuần tự , cbList \ } o b j = { trạng thái , tuần tự , cbList }

trong đó state s t e chứa thông tin tuân thủ, serial serial định danh duy nhất ngăn chặn các cuộc tấn công phát lại và cbList c b L i s t duy trì các lệnh gọi lại đang chờ xử lý.

Cam kết đối tượng:
cm_{obj} = \text{Commit}(trạng thái \song song \song song H ( cbList ) , r_ { obj } ) c m o b j = Commit ( trạng thái nối tiếp H ( c b List ) , r o b j )

Các bản cập nhật đối tượng tuân theo ngữ nghĩa sao chép khi ghi: tạo các cam kết mới với các trình hủy mới trong khi chứng minh các chuyển đổi trạng thái hợp lệ.

3.2 Kiến trúc bảng thông báo kép

Hệ thống duy trì hai bảng tin toàn cầu:

Bảng tin đối tượng ( bb_{obj} b b o b j ) : Lưu trữ các cam kết đối tượng bằng cách sử dụng cây Merkle để chứng minh tư cách thành viên. Gốc cây rt_{obj} r t o b j biểu diễn tất cả các trạng thái đối tượng hợp lệ.

Bảng tin gọi lại ( bb_{cb} b b c b ) : Lưu trữ các lệnh gọi lại yêu cầu cả bằng chứng thành viên và không thành viên. Sử dụng phương pháp tiếp cận tập hợp bổ sung phân vùng không gian vé chưa sử dụng thành các phạm vi.

Bằng chứng không phải thành viên được triển khai thông qua các tập phạm vi đã ký:
\text{NonMember}(vé) \iff \exists (a,b) \in \text{RangeSet}: a < vé < b NonMember ( t i c k e t ) ( a , b ) Bộ phạm vi : a < t i c k e t < b

3.3 Giao thức tạo cuộc gọi lại

Người dùng tạo các lệnh gọi lại tuân thủ trong quá trình thực hiện giao dịch thông qua thuật toán \text{ExecMethodAndCreateCallback} ExecMethodAndCreateCallback :

Bước 1 : Tạo phiếu ngẫu nhiên từ khóa công khai của nhà cung cấp tuân thủ:
ticket = pk_{compliance} \cdot r^{sk_{user}} \mod p t i c k e t = p k c o m p l i a n c e r s k u s e r chế độ P

trong đó r r là ngẫu nhiên về mặt mật mã và sk_{user} s k u s e r là khóa ký của người dùng.

Bước 2 : Tạo mục nhập gọi lại với ngày hết hạn và mã hóa:
cb_{entry} = \{ticket, exp\_time, enc\_key, method \ _id \ } c b e n t r y = { t i c k e t , e x p _ t i m e , en c _ key , me t h o d _ i d }

trong đó enc\_key = \text{KDF}(user\_secret, ticket) e n c _ k e y = KDF ( u s e r _ se c r e t , t i c k e t ) để mã hóa theo mỗi lần gọi lại.

Bước 3 : Cập nhật đối tượng với danh sách gọi lại mới:
obj'.cbList = obj.cbList \ parallel cb_ { entry } o b j .c b List = o b j .c b List c b e n t r y
obj'.serial = \text{Mới}( ) o b j .s e r i a l = Mới ( )

Bước 4 : Tạo bằng chứng ZK về quá trình chuyển đổi hợp lệ:

Public: cm_old, cm_new, method_idPrivate: obj_old, obj_new, r_old, r_new, cb_entryConstraints:- cm_old = Commit (obj_old, r_old)- cm_new = Commit (obj_new, r_new)- obj_new.cbList = obj_old.cbList || cb_entry- obj_new.state = ValidTransition (obj_old.state, method_id)

3.4 Gọi lại và xử lý

Các nhà cung cấp tuân thủ sẽ gọi lại bằng cách đăng lên bb_{cb} b b c b :

invocation = \ { ticket , \ text { Enc } _ { enc \ _key } ( args ) , timestamp , \ sigma \ } trong lời gọi = { ticket , Enc_key ( arg s ) , timestamp , σ }

trong đó \sigma σ là chữ ký trên (vé, đối số, dấu thời gian) ( t i c k e t , đối số , dấu thời gian ) bằng cách sử dụng làm khóa công khai.

Người dùng xử lý lệnh gọi lại thông qua thuật toán \text{ScanOne} ScanOne :

Bước 1 : Lặp lại qua các lệnh gọi lại đang chờ xử lý trong cbList c b L i s t
Bước 2 : Kiểm tra tư cách thành viên trong bb_{cb} b b c b :
\ exists invocation \ in bb_ { cb } : invocation.ticket = cb_ { entry } .ticket trong lệnh gọi b b c b : trong lệnh gọi .t i c k e t = c b e n t r y .t i c k e t

Bước 3 : Nếu tìm thấy và hợp lệ:

  • Giải mã các đối số: args = \text{Dec}_{enc\_key}(invocation.args) a r g s = Dec e n c _ k e y ( i n v o c a t i o n . a r g s )
  • Thực hiện phương thức: state' = method ( state , args ) s t a t e = phương thức ( s t a t e , args )
  • Xóa khỏi danh sách gọi lại: cbList' = cbList \setminus \{cb_{entry}\} c b L i s t = c b L i s t { c b e n t r y }

Bước 4 : Tạo bằng chứng xử lý chính xác:

Public: cm_old, cm_new, timestampPrivate: obj_old, obj_new, args , cb_entryConstraints:- ValidDecryption(cb_entry.enc_key, invocation. args , args )- obj_new.state = ExecuteMethod(obj_old.state, args )- obj_new.cbList = obj_old.cbList \ {cb_entry}- timestamp < cb_entry.exp_time

3.5 Thuộc tính bảo mật và khả năng không liên kết

Hủy liên kết giữa việc tạo và gọi : Sơ đồ ngẫu nhiên hóa đảm bảo:
\Pr[\text{Liên kết}(vé_tạo}, vé_gọi}) = 1] \leq \text{negl} ( \ lambda ) Pr [ Liên kết ( t i c k e t tạo , t i c k e t i n v o k e ) = 1 ] negl ( λ )

không có kiến thức về sk_{user} s k u s e r hoặc r r .

Xác thực thông qua Vé dựa trên chữ ký : Vé có chức năng như khóa xác minh trong sơ đồ chữ ký:
\text{Xác minh}(vé, (đối số, dấu thời gian), \sigma) = 1 \iff \text{lời gọi hợp lệ} Xác minh ( t i c k e t , ( a r g s , t i m e s t a m p ) , σ ) = 1 lời kêu gọi hợp lệ

Tính bảo mật : Mã hóa theo từng cuộc gọi lại ngăn chặn truy cập trái phép:
\text{Enc}_{enc\_key}(args) \text{ không thể phân biệt được về mặt tính toán với ngẫu nhiên} Enc e n c _ k e y ( a r g s ) không thể phân biệt được về mặt tính toán với ngẫu nhiên

3.6 Triển khai máy trạng thái tuân thủ

Trạng thái tuân thủ nâng cao cho các giao thức thanh toán:

S = \{ S = {
\tuân thủ quad\_level \trong \{0,1,2,3\}, mức độ tuân thủ _ { 0 , 1 , 2 , 3 } ,
\quad lần\_xem\_cuối\_thời gian \trong \mathbb{N}, lần xem lại cuối cùng N ,
\quad pending\_callbacks: \text{Danh sách}[CallbackEntry], p e n d i n g _ c a l l b a c k s : Danh sách [ Mục nhập C a l l b a c k ] ,
\quad risk\_score \in [0, 2^{32}), điểm rủi ro _ s [ 0 , 2 32 ) ,
\quad jurisdiction\_flags: \text{BitSet}, thẩm quyền _ cờ : BitSet ,
\quad giao dịch\_limits: \{hàng ngày, hàng tháng, hàng năm\}, hành động giao dịch _ giới hạn : { hàng ngày , hàng tháng , hàng năm } ,
\quad danh tiếng\_vector: \mathbb{R}^n vec - danh tiếng : R n
\} }

Các hàm chuyển đổi trạng thái :

\text{CreateTxCallback}(S, tx\_data) \rightarrow S' CreateTxCallback ( S , t x _ d a t a ) S :

  • Phân tích rủi ro giao dịch: rủi ro = \text{RiskScore}(tx\_data, S.reputation \ _vector ) rủi ro = RiskScore ( t x _ d a t a , S. r e p u t a t i o n _ ve c t o <

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
1
Thêm vào Yêu thích
Bình luận