Text / OP Stack; bản dịch / Jinse Finance xiaozou
Vào ngày 23 tháng 2 năm 2023, Coinbase đã công bố ra mắt testnet Cơ sở dựa trên OP Stack. Đồng thời, Optimism Collective ( DAO quản lý Optimism) đã thông báo rằng nó sẽ được nâng cấp lên Optimism Superchain.
Nhưng cả mạng thử nghiệm Cơ sở và siêu chuỗi Lạc quan đều dựa trên Ngăn xếp OP . Vậy sự khác biệt giữa OP Stack và mạng chính Ethereum là gì?
Phiên bản OP Stack hiện tại là Bedrock và tài liệu trang web chính thức OP Stack nêu chi tiết về sự khác biệt giữa Bedrock và mạng chính Ethereum. Jinse Finance xiaozou đã dịch tài liệu này:
Điều đáng chú ý là có nhiều sự khác biệt nhỏ giữa hành vi của Chủ nghĩa lạc quan và Ethereum. Bạn nên biết những khác biệt này khi xây dựng ứng dụng trên cơ sở mã Optimism hoặc OP Stack.
Opcode (mã hoạt động) khác biệt
`tx.origin == msg.sender`
Trên Ethereum L1, tx.origin chỉ bằng msg.sender khi hợp đồng thông minh được gọi trực tiếp từ tài khoản bên ngoài (EOA). Tuy nhiên, trên Lạc quan, tx.origin là nguồn gốc của Lạc quan, cũng có thể là EOA. Tuy nhiên, đối với tin nhắn từ L1, tin nhắn từ hợp đồng thông minh trên L1 có thể xuất hiện trên L2, khi tx.origin == msg.origin. Điều này khó có thể tạo ra sự khác biệt đáng chú ý vì các hợp đồng thông minh L1 không thể thao túng trực tiếp trạng thái L2. Tuy nhiên, cũng có thể có các trường hợp cạnh mà chúng tôi chưa xem xét.
Nhận thông tin L1
Nếu bạn cần tương đương với khối L1 mới nhất, bạn có thể lấy nó từ hợp đồng L1Block. Hợp đồng được triển khai trước có tại địa chỉ 0×42000000000000000000000000000000000000000015. Bạn có thể lấy các tham số này bằng các hàm getter:
số: Số khối L1 mới nhất mà L2 biết.
dấu thời gian: Dấu thời gian của khối L1 mới nhất.
basefee: Phí cơ sở cho khối L1 mới nhất.
hash: Giá trị băm của khối L1 mới nhất.
SequenceNumber: Số lượng khối L2 trong kỷ nguyên (khi có khối L1 mới, kỷ nguyên sẽ thay đổi tương ứng).
Bí danh địa chỉ (Address Aliasing)
Với hành vi của mã lệnh CREATE, người dùng có thể tạo hợp đồng trên L1 và L2 chia sẻ cùng một địa chỉ nhưng có các mã byte khác nhau. Điều này có thể phá vỡ các giả định về niềm tin, vì một hợp đồng có thể được tin cậy trong khi một hợp đồng khác có thể không được tin cậy (xem bên dưới). Để tránh sự cố này, hoạt động của opcode ORIGIN và CALLER (tx.origin và msg.sender) hơi khác nhau giữa L1 và L2.
Giá trị của tx.origin được xác định như sau:
Giá trị msg.sender cấp cao nhất (được gọi là hợp đồng đầu tiên) luôn bằng tx.origin. Do đó, nếu giá trị tx.origin bị ảnh hưởng bởi các quy tắc được xác định ở trên, thì giá trị cấp cao nhất của msg.sender cũng sẽ bị ảnh hưởng.
Lưu ý rằng nói chung, không nên sử dụng tx.origin để xác thực. Tuy nhiên, đây là một vấn đề khác với bí danh địa chỉ, vì bí danh địa chỉ cũng ảnh hưởng đến msg.sender.
Tại sao địa chỉ bí danh là một vấn đề?
Vấn đề với hai địa chỉ nguồn giống hệt nhau (hợp đồng L1 và hợp đồng L2) là chúng tôi đang mở rộng niềm tin dựa trên địa chỉ. Có thể là chúng tôi muốn tin tưởng vào một trong các hợp đồng chứ không phải hợp đồng kia.
(1) Hacker Helena đã phân nhánh Uniswap để tạo sàn giao dịch của riêng mình (trên L2), được gọi là Hackswap.
Lưu ý: Thực tế có nhiều hợp đồng trên Uniswap, vì vậy mô tả này là một sự đơn giản hóa.
(2) Hacker Helena cung cấp tính thanh khoản cho Hackswap, điều này dường như mang lại cơ hội kinh doanh chênh lệch giá có lãi. Ví dụ: bạn có thể chi 1 DAI để mua 1,1 USDT. Cả hai đồng xu đều trị giá 1 đô la.
(3) Nimrod Naive biết rằng nếu điều gì đó có vẻ quá tốt để trở thành sự thật, thì nó có thể là như vậy. Tuy nhiên, anh ấy đã kiểm tra mã byte của hợp đồng Hackswap và xác minh rằng nó giống với Uniswap. Anh ấy coi điều này có nghĩa là hợp đồng có thể được tin cậy để hoạt động giống như Uniswap.
(4) Nimrod đã phê duyệt giao dịch 1000 DAI của hợp đồng Hackswap. Nimrod muốn gọi chức năng hoán đổi trên Hackswap và đã nhận được gần 1100 USDT.
(5) Trước khi giao dịch hoán đổi của Nimrod được gửi đến blockchain, Helena Hacker đã gửi một giao dịch từ hợp đồng L1 với cùng một địa chỉ Hackswap. Giao dịch đã chuyển 1000 DAI từ địa chỉ của Nimrod sang địa chỉ của Helena Hacker. Nếu giao dịch này đến từ cùng một địa chỉ với Hackswap trên L2, nó sẽ có thể chuyển 1000 DAI, vì Nimrod đã chấp thuận hoán đổi mã thông báo trên Hackswap ở bước trước.
Bất chấp sự ngây thơ của Nimrod, anh ta được bảo vệ vì Chủ nghĩa lạc quan sửa đổi tx.origin của giao dịch (cũng là msg.sender gốc). Giao dịch đến từ một địa chỉ khác, một địa chỉ không được chấp thuận.
Lưu ý: Có thể dễ dàng tạo hai hợp đồng khác nhau có cùng địa chỉ trên các chuỗi khác nhau. Nhưng gần như không thể tạo hai hợp đồng khác nhau với cùng số tiền được chỉ định, vì vậy Helena Hacker không thể làm điều đó.
khối
Có một số khác biệt trong cách tạo khối giữa L1 Ethereum và Optimism Bedrock.
(1) Đây là trạng thái lý tưởng. Nếu bất kỳ khối nào bị bỏ sót, nó có thể là bội số của số nguyên, chẳng hạn như 24 giây, 36 giây, v.v.
Lưu ý: Các giá trị tham số L1 Ethereum được lấy từ ethereum.org. Giá trị Optimism Bedrock được lấy từ tham số Optimism.
định mức mạng
Sự khác biệt giữa JSON-RPC
Cơ sở mã OP Stack sử dụng API JSON-RPC giống như Ethereum. Một số phương pháp bổ sung dành riêng cho ngăn xếp OP được giới thiệu.
Có hỗ trợ Pre-EIP-155 hay không
Các giao dịch trước EIP-155 không có ID chuỗi, có nghĩa là các giao dịch trên một chuỗi khối Ethereum có thể được phát lại trên các chuỗi khối Ethereum khác. Đây là một rủi ro bảo mật, vì vậy OP Stack không hỗ trợ các giao dịch Pre-EIP-155 theo mặc định.
chi phí giao dịch
Theo mặc định, chi phí giao dịch trên chuỗi OP Stack bao gồm phí thực hiện L2 và phí dữ liệu L1.