Về chuyển giao tài sản xuyên chuỗi Không cần tin cậy .
LƯU Ý: Quá trình phát triển ban đầu của giao thức này bắt đầu dưới tên gọi Viaduct.
Lời nói đầu
Trong trạng thái của Ethereum ngày nay, các blockchain Layer 2 trải qua sự phân mảnh giữa nhau và với mạng chính Ethereum. Một phần cốt lõi để giải quyết vấn đề này và đạt được khả năng tương tác hiệu quả là chuyển giao tài sản xuyên chuỗi. Nhiều cầu nối triển khai chức năng này, nhưng chúng thực hiện theo cách, ở một mức độ nào đó, dựa vào sự tin tưởng.
Nhưng, bằng cách sử dụng hệ thống giao dịch dựa trên chữ ký, có thể sao chép không cần tin cậy các giao dịch chuyển Token qua nhiều mạng. Giả định tin cậy duy nhất là có ít nhất một nút trung thực và mạng có thể phát hiện và chuyển tiếp các giao dịch trong một khoảng thời gian khá Short .
Phần I: Triển khai đơn lẻ
Bước đầu tiên là tạo ra một hệ thống có thể xử lý đáng tin cậy các giao dịch dựa trên chữ ký trên một hợp đồng thông minh duy nhất. Giao thức chia các giao dịch này thành ba phần: truy xuất, ký và thực hiện.
Bước truy xuất gọi getValidHash()
trên hợp đồng thông minh cốt lõi của giao thức. Phương pháp này sẽ, với người gửi, người nhận, giá trị và Nonce, tính toán và trả về Hash của giao dịch được yêu cầu.
Sau đó là bước ký. Khi hợp đồng hoàn tất tính toán, người gửi giao dịch có thể ký băm Hash quả để chấp thuận giao dịch. Chữ ký chỉ có giá trị cho một lần chuyển. Nếu người gửi muốn lặp lại giao dịch, họ có thể tính Hash và chữ ký mới bằng cách sử dụng Nonce mới.
Cuối cùng, trong bước thực hiện, bất kỳ ai có quyền truy cập vào chữ ký giao dịch đều có thể gọi objectiveTransfer()
trên hợp đồng cốt lõi. Sau khi kiểm tra chi tiêu gấp đôi và tính chính xác của chữ ký, hợp đồng sẽ chuyển số lượng mã thông báo chính xác từ người gửi đến người nhận. Người ký hoặc cái gọi là nút chuyển tiếp có thể khởi tạo lệnh gọi objectiveTransfer()
. Lưu ý rằng các nút chuyển tiếp có thể đưa phí vào quy trình chuyển giao.
Hệ thống này cho phép chuyển Token qua chữ ký và chuyển tiếp. Tại thời điểm này, thiết kế này sao chép các lợi ích và hạn chế của một hệ thống như Permit2 của Uniswap.
Phần II: Triển khai chéo
Bước tiếp theo trong việc tạo ra một hệ thống chuyển giao chữ ký Không cần tin cậy xuyên chuỗi là cho phép giao thức này hoạt động trên nhiều lần triển khai hoặc phiên bản của hợp đồng cốt lõi, tất cả đều trên cùng một blockchain. Mặc dù có vẻ không liên quan ngay bây giờ, nhưng nó tạo thành một phần quan trọng trong cơ sở hạ tầng cho việc chuyển giao xuyên chuỗi.
Mỗi lần triển khai có thể theo dõi danh sách các lần triển khai khác. Không nhất thiết mỗi lần triển khai phải biết tất cả các lần triển khai khác. Yêu cầu duy nhất là phải có một tuyến đường, trực tiếp hoặc gián tiếp, giữa bất kỳ hai phiên bản nào đã cho. Sau đó, bất cứ khi nào một triển khai nhận được một chuyển giao mục tiêu hợp lệ, nó có thể khởi tạo một cuộc gọi chuyển giao giống hệt nhau trên mỗi chuỗi ngang hàng của mình. Các chuỗi đó có thể xác minh độc lập rằng cuộc gọi là chính xác trước khi thực hiện chuyển giao và tính toán lại số dư một cách phù hợp.
Các nỗ lực chi tiêu gấp đôi token trên nhiều phiên bản cùng một lúc sẽ thất bại. Vì mỗi phiên bản đều nằm trên cùng một blockchain, nên người ký không thể thực hiện nhiều giao dịch cùng một lúc. Điều này có nghĩa là tất cả các lần triển khai sẽ vẫn đồng bộ, chặn mọi nỗ lực chi tiêu gấp đôi.
Phần III: Triển khai chéo biệt lập
Bây giờ, các triển khai hợp đồng cốt lõi hoặc các trường hợp cần một cách để chạy phiên bản giao thức an toàn mà không cần giao tiếp với nhau. Để cho phép thực hiện giao dịch triển khai chéo, có thể có một mạng nút chuyển tiếp Không cần cho phép giám sát các chuyển giao mục tiêu trên chuỗi và chuyển tiếp chúng đến từng triển khai.
Tuy nhiên, tại thời điểm này vẫn còn một lỗi nghiêm trọng trong giao thức. Nếu cùng một người gửi khởi tạo hai giao dịch trên hai lần triển khai khác nhau cùng lúc, cả hai đều gửi hơn 50% số dư của người gửi đến hai địa chỉ khác nhau, người gửi có thể chi tiêu gấp đôi. Cả hai lần triển khai sẽ từ chối giao dịch mà họ không nhận được ban đầu và số dư tài khoản của họ sẽ khác nhau.
Để giải quyết vấn đề chi tiêu gấp đôi, các hợp đồng cốt lõi sử dụng một cửa sổ thách thức . Mỗi cửa sổ kéo dài w_f w f giây và bao gồm hai giai đoạn: giai đoạn đề xuất và giai đoạn chỉ thách thức, kéo dài trong w_p w p và w_c w c giây. Hợp đồng thông minh cốt lõi vô hiệu hóa hàm objectiveTransfer()
trong giai đoạn chỉ thách thức.
Khi người ký gửi một giao dịch chuyển tiền mục tiêu, hợp đồng sẽ kiểm tra giao dịch đó có chi tiêu gấp đôi không và sau đó lưu trữ giao dịch đó trong mảng challengeableTransfers
. Lưu ý rằng các kiểm tra chi tiêu gấp đôi ban đầu đối với các lệnh gọi objectiveTransfer()
chỉ kiểm tra chi tiêu gấp đôi so với số dư đã hoàn tất của địa chỉ. Giao thức cũng sẽ kiểm tra chi tiêu gấp đôi một lần nữa khi cleanChallengeWindow()
được gọi [xem bên dưới], trong đó tổng số tiền đã chi trong tất cả các giao dịch chuyển tiền có thể thách thức được kết hợp và sau đó được kiểm tra so với số dư đã hoàn tất. Hợp đồng cốt lõi có thể hoàn tất giao dịch chuyển tiền sau khi giai đoạn thách thức đang hoạt động kết thúc. Bất kỳ địa chỉ nào cũng có thể gọi phương thức cleanChallengeWindow()
, phương thức này sẽ cố gắng thực hiện và xóa tất cả các giao dịch chuyển tiền có thể thách thức mà nó có thể hoàn tất. Tại thời điểm này, giao dịch chuyển tiền đã hoàn tất.
Bất kỳ địa chỉ nào cũng có thể gọi phương thức challengeAndRecord()
trên một hợp đồng cốt lõi, khi có một hoặc nhiều giao dịch chuyển tiền, hợp đồng này sẽ kiểm tra chúng cùng với tất cả các giao dịch chuyển tiền có thể thách thức để tìm chi tiêu gấp đôi. Nếu quy trình này phát hiện chi tiêu gấp đôi (tổng số lượng token được chuyển từ một địa chỉ trong khoảng thời gian cửa sổ thách thức vượt quá số dư của địa chỉ đó), nó sẽ đánh dấu tất cả các giao dịch chuyển tiền có thể thách thức bắt nguồn từ các địa chỉ chi tiêu gấp đôi là có vấn đề. Trong quá trình gọi cleanChallengeWindow()
, hợp đồng cốt lõi sẽ xóa nhưng không thực hiện các giao dịch có vấn đề.
Những quy tắc này tạo ra một hệ thống:
- Chỉ cần một người trung thực chuyển tiếp.
- Ngăn chặn chi tiêu gấp đôi.
- Duy trì Consensus giữa các lần triển khai.
Nhưng ở thời điểm này, giao thức này không còn hữu ích nữa.
Phần IV: Chuỗi chéo
Có một khoảng cách nhỏ đáng ngạc nhiên giữa Phần III và một Token chuỗi chéo. Vì giải pháp triển khai chéo bị cô lập không yêu cầu các hợp đồng tương tác với nhau, nên mỗi lần triển khai không cần bất kỳ nhận thức hoặc kết nối nào với bất kỳ lần triển khai nào khác. Chúng có thể nằm trên các chuỗi khối hoàn toàn khác nhau và giao thức vẫn hoạt động. Chúng ta có thể triển khai một phiên bản trên mỗi mạng mà chúng ta muốn kết nối. Sau đó, khi một địa chỉ bắt đầu chuyển giao trên một chuỗi, các rơle sẽ sao chép nó trên mọi chuỗi khác.
Hợp đồng trao đổi Không cần tin cậy đóng gói lại giao thức thành một dạng quen thuộc hơn, trong đó địa chỉ EOA có thể chuyển tài sản từ chuỗi này sang chuỗi khác. Điều này hoạt động bằng cách sử dụng mô hình swapon-sync-swapoff, hoạt động như sau:
- Hoán đổi Token ERC20 trên chuỗi nguồn để lấy Token chuỗi chéo.
- Chờ rơle đồng bộ hóa số dư chuỗi chéo.
- Đổi Token chuỗi chéo sang ERC20.
Tuy nhiên, các nhóm thanh khoản tiêu chuẩn như Uniswap không thể hoán đổi token ERC20 lấy token chuỗi chéo. Thay vì dựa vào mô hình truyền thống, chúng ta phải áp dụng cách tiếp cận giống như sổ lệnh.
Đối với người bán:
- Gửi Token ERC20 vào hợp đồng giao dịch, chỉ định mức giá cho giao dịch.
- Chờ người mua thực hiện đơn hàng.
Đối với người mua:
- Lấy các giao dịch chưa thực hiện ở mức giá đã chỉ định.
- Tạo và ký giao dịch để chuyển mã Token chuỗi chéo cho người bán thích hợp.
- Gửi các giao dịch và chữ ký đến hợp đồng trao đổi để xác minh chúng.
- Hợp đồng trao đổi thực hiện chuyển giao Token chuỗi chéo bằng cách sử dụng lệnh gọi
objectiveTransfer()
. - Hợp đồng trao đổi sẽ chuyển tiền ký quỹ của người bán cho người mua.
Thiết kế này cho phép có một giao diện kết nối tài sản chuẩn giữa các blockchain.
Phần kết luận
Giao thức này cho phép chuyển giao tài sản xuyên chuỗi Không cần tin cậy bằng giao diện chuẩn hóa. Cũng có thể mở rộng giao thức để thực hiện các giao dịch tùy ý trên một phiên bản Máy ảo Ethereum (EVM) . Phiên bản mở rộng này của giao thức có thể là bước đầu tiên trong việc xây dựng một lớp blockchain tích hợp một loạt lớn các mạng vào thiết kế cơ bản của nó, cho phép khả năng tương tác Không cần tin cậy giữa tất cả các blockchain dựa trên Ethereum hiện có. Nó sẽ tương tự như blockchain L2 theo nghĩa là dữ liệu giao dịch được lưu trữ trên một blockchain khác, nhưng khác ở chỗ nó lưu trữ dữ liệu trên nhiều blockchain cùng một lúc để tăng cường khả năng tương tác.
Bản thân hệ thống này không có khả năng mở rộng cao. Người ta mong đợi phí cao vì có nhiều giao dịch được yêu cầu cho mỗi lần chuyển. Tuy nhiên, vấn đề này có thể được giảm thiểu bằng cách chỉ sử dụng mạng L2 để lưu trữ dữ liệu chuyển hoặc xây dựng L3 trên giao thức. Ngoài ra, các giao dịch có thể được đóng gói và gốc Merkle của chúng được gửi trên chuỗi cùng với bằng chứng ZK theo cách tương tự như cách của một zero-knowledge rollup. Theo cách này, nhiều giao dịch mục tiêu có thể được gửi chỉ trong một vài giao dịch.
Cuối cùng, mọi phản hồi đều được hoan nghênh! Dự án vẫn đang trong giai đoạn đầu nhưng tôi sẽ đính kèm kho lưu trữ Github khi tôi đạt được thêm tiến triển.