Tác giả: Luo Benben, cựu đại sứ công nghệ Arbitrum, cộng tác viên đam mê web3
Giới thiệu: Bài viết này là phần diễn giải kỹ thuật của Arbitrum One của Luo Benben, cựu đại sứ kỹ thuật của Arbitrum và cựu đồng sáng lập công ty kiểm toán tự động hóa hợp đồng thông minh Goplus Security.
Trong bài viết trước"Cựu Đại sứ kỹ thuật Arbitrum diễn giải cấu trúc thành phần của Arbitrum (Phần 1)", chúng tôi đã giới thiệu trình sắp xếp thứ tự, Trình xác thực và Trình sắp xếp thứ tự trong các thành phần cốt lõi của Arbitrum vai trò của hợp đồng Hộp thư đến, Khối tổng hợp và bằng chứng gian lận không tương tác. Trong bài viết hôm nay, chúng tôi sẽ tập trung vào các thành phần liên quan đến nhắn tin chuỗi chéo và các lối vào giao dịch chống kiểm duyệt giữa các thành phần cốt lõi của Arbitrum.

Text: Trong bài viết trước, chúng tôi đã đề cập rằng hợp đồng Hộp thư đến tuần tự đặc biệt nhận gói dữ liệu giao dịch Batch do trình tuần tự phát hành trên Lớp1. Đồng thời, chúng tôi chỉ ra rằng Hộp thư đến theo thứ tự còn được gọi là hộp nhanh, trái ngược với hộp chậm Hộp thư đến bị trì hoãn (gọi tắt là Hộp thư đến). Dưới đây, chúng tôi sẽ giải thích chi tiết về các thành phần liên quan đến nhắn tin chuỗi chéo, chẳng hạn như Hộp thư đến bị trì hoãn.

Các nguyên tắc liên chuỗi và bắc cầu
Các giao dịch chuỗi chéo có thể được thực hiện chia thành L1 Đến L2 (nạp tiền) và L2 đến L1 (rút tiền). Lưu ý rằng việc nạp và rút tiền được đề cập ở đây không nhất thiết liên quan đến tài sản xuyên chuỗi, nhưng có thể là tin nhắn không trực tiếp bao gồm tài sản. Vì vậy, hai từ này chỉ đại diện cho hai hướng hành vi liên quan đến chuỗi chéo.
So với các giao dịch L2 thuần túy, các giao dịch xuyên chuỗi thực hiện thông tin trong hai hệ thống khác nhau, L1 và L2. trao đổi, vì vậy quy trình này là phức tạp hơn.
Ngoài ra, cái mà chúng tôi thường gọi là hành vi chuỗi chéo đang sử dụng chế độ chứng kiến trên hai mạng không liên quan. Tính bảo mật của cầu nối chuỗi chéo này phụ thuộc vào người vận hành cầu chuỗi chéo.Trong lịch sử, các vụ trộm cầu chuỗi chéo dựa trên mô hình nhân chứng đã xảy ra thường xuyên.
Hành vi chuỗi chéo giữa Rollup và mạng chính ETH về cơ bản khác với chuỗi chéo nêu trên, vì trạng thái của Lớp 2 được xác định bởi dữ liệu được ghi trên Lớp 1, miễn là bạn đang sử dụng cầu nối chuỗi chéo chính thức của Rollup thì cấu trúc hoạt động của nó tuyệt đối an toàn.
Điều này cũng làm nổi bật bản chất của Rollup. Nó chỉ trông giống như một chuỗi độc lập từ góc nhìn của người dùng, nhưng trên thực tế, cái gọi là "Layer2" chỉ là một cửa sổ hiển thị nhanh được Rollup mở cho người dùng, cấu trúc chuỗi thực sự của nó vẫn được ghi trên Layer1. Vì vậy, chúng ta có thể coi L2 là một nửa chuỗi hoặc "chuỗi được tạo trên Lớp 1".
Có thể thử lại
Cần lưu ý rằng các chuỗi chéo không đồng bộ và không nguyên tử. Không thể biết kết quả sau khi xác nhận giao dịch như trên một chuỗi, cũng như không thể đảm bảo rằng phía bên kia sẽ ở một nơi nhất định. Đã xảy ra chuyện gì đó tại một thời điểm Do đó, chuỗi chéo có thể thất bại do một số vấn đề phần mềm, nhưng miễn là sử dụng đúng phương tiện, chẳng hạn như Vé có thể thử lại (Vé có thể thử lại), thì các vấn đề khó như kẹt tiền sẽ không xảy ra.
Vé có thể thử lại là công cụ cơ bản được sử dụng khi nạp tiền qua cầu chính thức của Arbitrum, ETH và ERC20 Việc nạp tiền sẽ được dùng. Vòng đời của nó được chia thành ba bước:
1. Gửi vé trên L1. Sử dụng phương thức createRetryableTicket() trong hợp đồng Hộp thư đến bị trì hoãn để tạo vé nạp tiền và gửi nó.
2. Thanh toán tự động trên L2. Trong hầu hết các trường hợp, trình sắp xếp có thể tự động giúp người dùng thanh toán hóa đơn của họ mà không cần thao tác thủ công tiếp theo.
3. Thanh toán thủ công trên L2. Trong một số trường hợp đặc biệt, chẳng hạn như giá gas tăng đột ngột trên L2 và lượng gas trả trước trên hóa đơn không đủ, thanh toán tự động không thể được thực hiện. Tại thời điểm này, người dùng cần phải vận hành thủ công.
Lưu ý rằng nếu việc quy đổi tự động không thành công thì ghi chú cần được quy đổi theo cách thủ công trong vòng 7 ngày, nếu không ghi chú sẽ bị xóa (số tiền sẽ bị mất vĩnh viễn), hoặc bạn phải trả phí để giữ giấy báo gia hạn hợp đồng thuê.
Ngoài ra, mặc dù quá trình rút tiền của cây cầu chính thức Arbitrum có sự tương đồng đối xứng nhất định với hành vi nạp tiền nhưng nó không giống nhau Một mặt, khái niệm này có thể được hiểu từ chính giao thức Rollup và mặt khác chúng ta có thể hiểu nó từ một số điểm khác biệt:
Không có quy đổi tự động trong quá trình rút tiền. Vì EVM không có bộ đếm thời gian hoặc tự động hóa , có thể thực hiện quy đổi tự động trên L2. Chính trình sắp xếp thứ tự sẽ hỗ trợ. Đã được triển khai, vì vậy người dùng trên L1 cần tương tác thủ công với hợp đồng Hộp thư đi để yêu cầu tài sản.
Không có vấn đề hết hạn vé khi rút tiền mặt. Miễn là thời gian thử thách đã trôi qua, bạn có thể yêu cầu vé bất cứ lúc nào.
Cổng chuỗi chéo tài sản ERC-20
< p dir="ltr" style="text-align: left;">
Nội dung ERC-20 chuỗi chéo rất phức tạp. Chúng ta có thể nghĩ về một số câu hỏi:Mã thông báo được triển khai trên L1, làm cách nào để triển khai nó trên L2?
Hợp đồng L2 tương ứng của nó có cần được triển khai trước theo cách thủ công hay không, hoặc có thể hệ thống tự động triển khai nó trên khắp Các mã thông báo đến nhưng chưa triển khai hợp đồng có tự động được triển khai cho hợp đồng tài sản không?
Địa chỉ hợp đồng tương ứng của nội dung ERC-20 trên L1 trên L2 là gì ?? Nó có phù hợp với L1 không?
Làm cách nào để phát hành mã thông báo chuỗi chéo tự nhiên từ L2 đến L1?
Mã thông báo có chức năng đặc biệt, chẳng hạn như mã thông báo rebase với số lượng có thể điều chỉnh, tự phát triển Token sinh lãi, làm thế nào để liên chuỗi?
Chúng tôi sẽ không trả lời tất cả những câu hỏi này vì nó quá phức tạp mở rộng. Những câu hỏi này chỉ được sử dụng để minh họa mức độ phức tạp của chuỗi chéo ERC20.

Nhiều giải pháp mở rộng hiện sử dụng giải pháp danh sách trắng + danh sách thủ công để tránh các vấn đề phức tạp và điều kiện biên khác nhau.
Arbitrum sử dụng hệ thống Cổng để giải quyết hầu hết các điểm yếu của chuỗi chéo ERC20. Nó có những điểm sau các tính năng:< /p>
Các thành phần cổng xuất hiện theo cặp tại L1 và L2.
Gateway Router chịu trách nhiệm duy trì Token L1<->Token L2 Ánh xạ địa chỉ giữa ,và ánh xạ giữa một số cổng thông báo<->some.
Bản thân cổng có thể được chia thành cổng StandardERC20, cổng tùy chỉnh chung, cổng tùy chỉnh , v.v., để giải quyết các vấn đề bắc cầu thuộc các loại và chức năng khác nhau của ERC20.
Hãy lấy chuỗi chéo WETH tương đối đơn giản làm ví dụ để minh họa sự cần thiết của việc tùy chỉnh cổng.
WETH là ERC20 tương đương với ETH. Là loại tiền tệ chính, Ether không thể thực hiện các chức năng phức tạp trong nhiều dApp, do đó cần có ERC20 tương đương. Chuyển một số ETH vào hợp đồng WETH, chúng sẽ bị khóa trong hợp đồng và số lượng WETH tương tự sẽ được tạo ra.
Tương tự, WETH cũng có thể bị phá hủy và ETH bị lấy đi. Rõ ràng,số lượng WETH lưu hành và ETH bị khóa luôn là 1:1.

Nếu bây giờ chúng ta liên kết chéo trực tiếp WETH với L2, chúng ta sẽ thấy một số vấn đề lạ:
Không thể Unwrap WETH vào ETH trên L2 vì không có khóa tương ứng trên L2 của ETH.
Có thể sử dụng hàm gói, nhưng nếu các WETH mới được tạo này sẽ quay trở lại L1 và không thể được giải mã thành ETH trên L1 vì hợp đồng WETH trên L1 và L2 không "đối xứng".
Rõ ràng điều này vi phạm Hiểu các nguyên tắc thiết kế của WETH. Khi WETH là chuỗi chéo, cho dù là nạp hay rút, trước tiên nó cần được mở vào ETH, sau đó chuyển sang phía bên kia và sau đó được gói vào WETH. Đây là vai trò của WETH Gateway.
Các mã thông báo khác có logic phức tạp hơn cần một Cổng được thiết kế cẩn thận và phức tạp hơn để hoạt động bình thường trong môi trường chuỗi chéo. Cổng tùy chỉnh của Arbitrum kế thừa logic giao tiếp chuỗi chéo của Cổng thông thường và cho phép các nhà phát triển tùy chỉnh hành vi chuỗi chéo liên quan đến logic mã thông báo, có thể đáp ứng hầu hết các nhu cầu.
Hộp thư đến bị trì hoãn
Tương ứng với hộp thư nhanh hay còn gọi là SequencerInbox là Hộp thư đến chậm (tên đầy đủ Hộp thư đến bị trì hoãn). Tại sao phải có sự phân biệt giữa tốc độ và sự chậm chạp? Vì hộp nhanh được dành riêng để nhận các lô giao dịch L2 do trình sắp xếp chuỗi phát hành nên tất cả các giao dịch chưa được trình sắp xếp chuỗi xử lý trước trong mạng L2 sẽ không xuất hiện trong hợp đồng hộp nhanh.
Chức năng đầu tiên của hộp chậm là xử lý hành vi nạp lại từ L1 đến L2. Người dùng nạp tiền thông qua hộp chậm và trình sắp xếp trình tự sẽ giám sát nó rồi phản ánh nó trên L2. Cuối cùng, bản ghi nạp tiền sẽ được trình sắp xếp trình tự đưa vào trình tự giao dịch L2 và gửi tới Hộp thư đến trình sắp xếp hợp đồng hộp nhanh.
Trong ví dụ này, việc người dùng gửi giao dịch nạp tiền trực tiếp vào hộp nhanh là không phù hợp vì nó được gửi tới hộp nhanh. hộp Hộp thư đến Trình sắp xếp giao dịch sẽ can thiệp vào việc sắp xếp giao dịch thông thường của Lớp 2, sau đó ảnh hưởng đến công việc của trình sắp xếp trình tự.
Chức năng thứ hai của hộp chậm là chống kiểm duyệt. Người dùng gửi trực tiếp các giao dịch đến hợp đồng hộp chậm và người sắp xếp thường sẽ tổng hợp chúng vào hộp nhanh trong vòng 10 phút. Nhưng nếu trình sắp xếp cố tình bỏ qua yêu cầu của bạn, hộp chậm cũng có chức năng bắt buộc đưa vào:
Nếu giao dịch được gửi đến Hộp thư đến bị trì hoãn và sau 24 giờ, giao dịch trong hộp chậm chưa được trình sắp xếp thứ tự đưa vào chuỗi giao dịch, người dùng có thể kích hoạt thủ công chức năng bao gồm lực lượng trên Lớp 1, Các yêu cầu giao dịch bị trình sắp xếp thứ tự bỏ qua buộc phải được thu thập trong Hộp thư đến của Trình sắp xếp. Sau đó, chúng sẽ được giám sát bởi tất cả các nút Arbitrum One và sẽ buộc phải được đưa vào chuỗi giao dịch Lớp 2.

Như chúng tôi vừa đề cập, dữ liệu trong hộp nhanh là thực thể dữ liệu lịch sử của L2. Do đó, trong trường hợp kiểm duyệt độc hại,thông qua hộp chậm, hướng dẫn giao dịch cuối cùng có thể được đưa vào sổ cái L2, bao gồm các tình huống như buộc phải rút tiền và các tình huống khác để thoát khỏi Lớp 2.
Có thể thấy rằng đối với các giao dịch theo bất kỳ hướng và cấp độ nào, trình sắp xếp cuối cùng không thể tồn tại vĩnh viễn. Kiểm duyệt bạn .
Một số chức năng cốt lõi của hộp chậm Hộp thư đến:
depositETH(), chức năng đơn giản nhất để gửi ETH.
createRetryableTicket(), có thể được sử dụng để nạp tiền ETH, ERC20 và tin nhắn. So với DepositETH(), nó có tính linh hoạt cao hơn, ví dụ: bạn có thể chỉ định địa chỉ thanh toán L2 sau khi gửi tiền, v.v.
forceInclusion(), tức là hàm tổng hợp bắt buộc, ai cũng có thể điều chỉnh Sử dụng . Chức năng này sẽ xác minh xem giao dịch được gửi tới hợp đồng hộp chậm có được xử lý sau 24 giờ hay không. Nếu các điều kiện được đáp ứng, các tin nhắn sẽ bị thu thập cưỡng bức.
Tuy nhiên, cần lưu ý rằng chức năng Bao gồm lực thực ra nằm trong hợp đồng hộp nhanh. Để cho dễ hiểu, chúng ta sẽ cùng nhau giải thích nó trong hộp chậm.
Hộp thư đi
Hộp thư đi chỉ liên quan đến việc rút tiền và có thể hiểu là hệ thống ghi chép và quản lý việc rút tiền:
Chúng tôi biết rằng việc rút tiền từ cầu chính thức của Arbitrum cần phải chờ kết thúc giai đoạn thử thách khoảng 7 ngày. Sau khi Khối tổng hợp được hoàn tất , rút tiền Hành vi này có thể được thực hiện. Sau khi thời gian thử thách kết thúc, người dùng gửi Bằng chứng Merkle tương ứng cho hợp đồng Hộp thư đi trên Lớp 1, sau đó liên lạc với các hợp đồng để thực hiện các chức năng khác (chẳng hạn như mở khóa tài sản bị khóa trong các hợp đồng khác) và cuối cùng hoàn tất việc rút tiền.
Hợp đồng OutBox sẽ ghi lại các tin nhắn chuỗi chéo từ L2 đến L1 đã được xử lý để ngăn ai đó gửi liên tục các yêu cầu rút tiền đã thực hiện. Nó ghi lại sự tương ứng giữa Chỉ mục chi tiêu của yêu cầu rút tiền và thông tin thông qua
mapping(uint256 => bytes32 ) chi tiêu công khai , nếu ánh xạ[spentIndex] != byte32(0), thì yêu cầu đã bị rút lại. Nguyên tắc tương tự như bộ đếm giao dịch Nonce để ngăn chặn các cuộc tấn công lặp lại.
Dưới đây chúng tôi sẽ lấy ETH làm ví dụ để giải thích đầy đủ về quy trình gửi và rút tiền. Điểm khác biệt duy nhất giữa ERC20 và Gateway là nó sẽ không được mô tả chi tiết.
Tiền gửi ETH
1. Người dùng gọi hàm DepositETH() của hộp chậm.
2. Hàm này sẽ tiếp tục gọi bridge.enqueueDelayedMessage(), ghi lại thông báo trong hợp đồng bridge và ETH được gửi đến hợp đồng bắc cầu. Tất cả số tiền nạp ETH được lưu giữ trong hợp đồng bắc cầu, tương đương với một địa chỉ nạp tiền.
3. Trình tuần tự giám sát thông báo nạp lại trong hộp chậm và phản ánh hoạt động nạp lại tới L2 Trong cơ sở dữ liệu, người dùng có thể xem tài sản họ đã gửi vào mạng L2.
4. Trình sắp xếp thứ tự đưa bản ghi nạp tiền vào lô giao dịch và gửi nó vào hộp nhanh trên hợp đồng L1.

Rút ETH
1. Người dùng ở L2 Gọi hàm drawEth() của hợp đồng ArbSys để hủy số lượng ETH tương ứng trên L2.
2. Trình sắp xếp thứ tự gửi yêu cầu rút tiền đến hộp nhanh.
3. Nút Trình xác thực tạo Khối tổng hợp mới dựa trên chuỗi giao dịch nhanh chóng hộp này sẽ bao gồm các giao dịch rút tiền ở trên.
4. Sau khi Khối tổng hợp đã vượt qua giai đoạn thử thách và được xác nhận, người dùng có thể đăng nhập tới L1 Hàm Outbox.execute Transaction() được gọi, chứng minh rằng các tham số được đưa ra bởi hợp đồng ArbSys đã đề cập trước đó.
5. Sau khi hợp đồng Hộp thư đi được xác nhận là chính xác, số ETH tương ứng trong cầu nối đã mở khóa sẽ là gửi tới người dùng.

Rút tiền nhanh chóng
Sử dụng cầu nối chính thức của Optimistic Rollup để rút tiền money Sẽ có vấn đề khi chờ đợi trong thời gian thử thách. Chúng ta có thể sử dụng cầu nối chuỗi chéo riêng tư của bên thứ ba để tránh vấn đề này:
Trao đổi khóa nguyên tử. Phương thức này chỉ trao đổi tài sản giữa hai bên trong chuỗi tương ứng của họ và là phương thức nguyên tử, chỉ cần một bên cung cấp Preimage, cả hai bên chắc chắn sẽ nhận được tài sản mà họ xứng đáng. Nhưng vấn đề là tính thanh khoản tương đối khan hiếm và bạn cần tìm đối tác trực tiếp.
Nhân chứng đi qua cầu dây xích. Các loại cầu xuyên chuỗi chung là cầu chứng kiến. Người dùng gửi yêu cầu rút tiền của riêng họ và điểm đích rút tiền sẽ trỏ đến nhà điều hành cầu nối bên thứ ba hoặc nhóm thanh khoản. Sau khi nhân chứng phát hiện ra rằng giao dịch chuỗi chéo đã được gửi đến hợp đồng hộp nhanh L1, anh ta có thể chuyển tiền trực tiếp cho người dùng ở phía L1. Cách tiếp cận này về cơ bản sử dụng một hệ thống đồng thuận khác để giám sát Lớp 2 và hoạt động dựa trên dữ liệu mà nó đã gửi lên Lớp 1. Vấn đề là hệ số bảo mật ở chế độ này không cao bằng cầu Rollup chính thức.
Buộc rút lui
Hàm bao gồm lực lượng Inclusion() được sử dụng để chống lại việc xem xét trình sắp xếp thứ tự, bất kỳ Các giao dịch cục bộ L2, giao dịch L1 đến L2 và giao dịch L2 đến L1 đều có thể được thực hiện bằng chức năng này. Việc đánh giá ác ý của trình sắp xếp chuỗi ảnh hưởng nghiêm trọng đến trải nghiệm giao dịch, trong hầu hết các trường hợp, chúng tôi sẽ chọn rút tiền và để lại L2. Do đó, những điều sau đây sử dụng việc rút tiền cưỡng bức làm ví dụ để giới thiệu cách sử dụng ForceInclusion.
Xem lại các bước rút ETH, chỉ có bước 1 và 2 liên quan đến việc xem xét trình tự sắp xếp nên chỉ cần thay đổi Hai bước này :

Gọi inbox.sendL2Message() trong hợp đồng hộp chậm trên L1, Các tham số đầu vào là các tham số cần nhập khi gọi hàm pullEth() trên L2. Thông báo này sẽ được chia sẻ với hợp đồng bridge trên L1.
Sau khi chờ đợi 24 giờ để đưa vào bắt buộc, hãy gọi Force Inclusion() trong hộp nhanh để thực hiện việc đưa vào bắt buộc. Hợp đồng hộp nhanh sẽ kiểm tra xem có thông báo tương ứng trong cầu nối hay không.
Người dùng cuối có thể Để rút tiền trong Outbox các bước còn lại thực hiện như rút tiền thông thường.
Ngoài ra, arbitrum-tutorials còn có hướng dẫn chi tiết về cách sử dụng Arb SDK để hướng dẫn người dùng cách sử dụng ForceInclusion() để thực hiện L2 giao dịch cục bộ và giao dịch L2 đến L1.