Một sơ đồ phân khối đơn giản cho các trình sắp xếp được chia sẻ

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

Lý lịch

Đọc bài viết của tôi về trình sắp xếp được chia sẻ .

Rất nhiều thứ đã được tạo ra từ các trình sắp xếp được chia sẻ cho phép bao gồm các giao dịch nguyên tử. Tuy nhiên, điều này yêu cầu thay đổi giao thức đối với tất cả các bản tổng hợp thành phần. Những thay đổi về giao thức đó là không xác định, và các ý tưởng thì phức tạp và kỳ lạ.

Tôi nghi ngờ những người sắp xếp thứ tự được chia sẻ chỉ đang phức tạp hóa nó quá mức để trông có vẻ bí ẩn. Vì vậy, tôi quyết định ngồi xuống và thiết kế một sơ đồ gói cuộn chéo cơ bản.

May mắn thay, chúng tôi đã có kiến ​​thức trước đây về các kế hoạch đóng gói tùy ý, vì vậy chúng tôi biết những điều cần tránh và nói chung là cách xây dựng chúng. Hóa ra thật dễ dàng để sửa đổi chức năng lọc của mỗi lần tổng hợp.

Bàn thắng

  • Nó sẽ cho phép nhiều giao dịch từ nhiều EOA.

  • Không thể phá vỡ một gói (bao gồm một giao dịch thành phần mà không bao gồm tất cả các giao dịch khác trong cùng một chuỗi.

  • Không cần chia sẻ định dạng TX.

  • Sẽ rất rẻ khi ký (tệ nhất là O(n) về số lượng giao dịch đối với bài toán thở dài bậc hai )

Sửa đổi định dạng TX tổng hợp thành phần

  • Bỏ chữ ký trong mọi trường hợp.

  • Bao gồm id chuỗi hoặc ràng buộc tên miền khác trong tx.

Không có sửa đổi nào khác

Gói

Đối với mỗi bản tổng hợp thành phần, hãy có cơ sở hạ tầng ánh xạ địa chỉ EOA tới danh sách các giao dịch từ địa chỉ đó. Các giao dịch phải được tuần tự hóa và được biểu diễn dưới dạng byte mờ. Người ký không cần hiểu nội dung.

 struct Bundle {arbitrum: Map<Address, Vec<OpaqueBytes>>,optimism: Map<Address, Vec<OpaqueBytes>>,}

Ký tên

Chúng tôi lặp lại tất cả các giao dịch, chèn dấu phân cách cho danh sách tổng hợp và người gửi. Điều này đảm bảo rằng một txn được liên kết với một danh sách tổng hợp cụ thể và một EOA cụ thể và không thể bị hiểu sai. Nó cũng đảm bảo rằng thông tin tổng hợp và EOA được hiển thị cho tất cả người quan sát mà không yêu cầu người quan sát phải hiểu cấu trúc tx.

Việc ký theo cách này đảm bảo cũng đảm bảo rằng tất cả các chữ ký đều cam kết với mọi giao dịch. Điều này làm cho gói không thể sửa đổi được. Nó không thể được mở rộng cũng như không được giải nén.

 fn signing_hash(&self) -> [u8;32] {let mut hasher = Keccak::new();hasher.update(b"arb");for (from, txns) in self.arbitrum.iter() {hasher.update(&from);txns.for_each(|tx| hasher.update(tx.hash()));}hasher.update(b"opt");for (from, txns) in self.optimism.iter() {hasher.update(&from);txns.for_each(|tx| hasher.update(tx.hash()));}hasher.finalize()}fn sign(&self, key: &SigningKey) -> Signature {key.sign_raw(self.signing_hash())}

Sử dụng một số ràng buộc tên miền bổ sung nếu bạn muốn, idc.

Đang xác minh

Việc xác minh có thể được thực hiện mà không hiểu nội dung tx.

Chúng tôi xác minh bằng cách:

  1. tính toán Hash băm ký cho gói

  2. kiểm tra xem mỗi EOA được khai báo cho gói có chữ ký trên Hash băm ký không

 struct SignedBundle {bundle: Bundle,signatures: Vec<Signature>,}fn verify(bundle: &SignedBundle) -> Result<()> {let signing_hash = bundle.bundle.signing_hash();// Collect the signers whose signatures are includedlet addresses = bundle.signatures.map(|sig| sig.recover_raw(signing_hash)).collect::<Result<HashSet<_>>>();// collect the stated EOA senderslet eoas = bundle.arb.keys().chain(bundle.opt.keys()).collect::<HashSet<_>>>();// Check that those sets are equalif eoas != addresses {return Err("missing sig or extra sig or whatever")}Ok(())}

Bằng cách này, chúng tôi đảm bảo rằng tất cả chữ ký bao gồm tất cả các giao dịch (và sẽ không hợp lệ nếu một giao dịch được thêm, xóa hoặc thay thế) và không có giao dịch nào bị chữ ký phát hiện. Việc kiểm tra thêm cũng không tốn kém lắm.

Tuần tự hóa

Ai quan tâm nó tầm thường. Chỉ cần làm điều đó.

Lọc

Bản tổng hợp thành phần PHẢI lọc các gói có quá trình xác minh không thành công. Lưu ý rằng việc lọc không yêu cầu bất kỳ kiến ​​thức nào về nội dung của giao dịch mà chỉ cần kiểm tra chữ ký trên chúng.

Điều này có nghĩa là các gói có chữ ký không chính xác hoặc không đủ sẽ được đưa vào lịch sử máy chủ nhưng được lọc khỏi lịch sử tổng hợp. Chúng không có bất kỳ ảnh hưởng nào đến chuỗi cuộn lên. Điều tương tự cũng được thực hiện đối với các giao dịch không hợp lệ trong đầu ra của trình sắp xếp thứ tự trong các bản tổng hợp trên mạng chính ngày nay, tất nhiên.

Phần kết luận

Điều này đạt được sự bao gồm nguyên tử cho các gói nhiều bên. Nhiều EOA có thể bao gồm các giao dịch. Không thể chia các gói vì tất cả các dấu hiệu đều cam kết với tất cả các txns. Việc ký kết là O(n) về số lượng giao dịch. Việc xác minh là O(n + s) trong đó s là số người ký. Bạn có thể sử dụng sơ đồ chữ ký tổng hợp để điều chỉnh sự cân bằng đó một Bit nếu muốn.

Bùm. Mục tiêu đạt được.

Vậy điều này không mang lại cho chúng ta điều gì? Những độc giả thông minh đã đọc các bài đăng trên blog trước đây của tôi và Threads tweet khó chịu có thể nhận ra rằng việc kết hợp theo cách này không thể giúp bạn thực thi được nguyên tử. Chuẩn rồi. Vì vậy, bạn thực sự không thể sử dụng điều này để xây dựng bất kỳ sơ đồ khả năng tương tác nào mà không cần thay đổi cơ chế/giao thức tiếp theo để xử lý phần thực thi. Người xây dựng Block giải nén MEV được thực thi bằng cách đứng đầu Block. Nhưng bạn, người dùng cuối, không trích xuất nội dung. Bạn được trích xuất.

Vì vậy, việc xây dựng một sơ đồ đóng gói là chuyện nhỏ, nhưng chỉ vì chúng tôi đã thu hẹp vấn đề đến mức gần như vô dụng.

Tóm lại, việc đưa nguyên tử vào rất dễ dàng và không tốt cho bất cứ việc gì ngoại trừ việc chiết xuất MEV. Đừng làm lớn chuyện nữa.

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