VI
← Tất cả bài viết

Glamsterdam thay đổi bài toán chi phí ứng dụng: tách tạo trạng thái khỏi ngân sách thực thi

Ethereum hoãn tiến trình fork Glamsterdam. Các nhóm cần kiểm tra chi phí lần đầu, phí được tài trợ và cách khôi phục khi lệnh gọi thất bại.

Chuyên mụcCông nghệTác giảOpen Market NotesLoạiBài viết
Hai đồng hồ vẽ tay mang biểu tượng bánh răng và trang sổ, ngăn cách bằng đường đỏ.

Ngày 6/11, Ethereum Foundation thông báo hoãn tiến trình hardfork Glamsterdam do vấn đề tương thích; Hoodi phải chờ giải quyết xong. Đây không phải thông báo kích hoạt mainnet. Thông báo của Foundation

Với nhóm sản phẩm, rủi ro nằm ở cả chi phí lẫn tính đúng đắn của nghiệp vụ. Thao tác của người dùng mới từng thành công có thể vượt ngân sách cũ. Thao tác thất bại từng khiến toàn bộ giao dịch hoàn tác có thể để lại bản ghi thất bại vĩnh viễn. Nhân mọi ngân sách gas với một hệ số chung không tạo ra báo giá chính xác, cũng không chứng minh luồng xử lý tiền hoặc thông điệp vẫn an toàn. Phân tích này dựa trên đề xuất và tài liệu thử nghiệm được đọc tính đến ngày 7/11; tham số và đặc tả vẫn có thể thay đổi.

Người dùng trả gì và một khối chứa được bao nhiêu công việc

EIP-8037 đề xuất đo riêng phần tạo trạng thái. Người dùng vẫn trả tổng gas thực thi và gas trạng thái, nhưng dung lượng khối và phép tính phí cơ sở của khối tiếp theo dựa trên giá trị lớn hơn trong hai chiều cộng dồn. Cơ chế này không tạo thị trường đấu giá riêng cho từng chiều, cũng không miễn phí lưu trữ trạng thái. Mục tiêu là hạn chế tăng trưởng trạng thái dài hạn, đồng thời giảm việc tạo trạng thái và thực thi cùng tranh một bộ đếm duy nhất. EIP-8037

Sự phân biệt đó làm thay đổi ý nghĩa của bảng theo dõi vận hành. Phí giao dịch ứng dụng thu hoặc trợ cấp và dung lượng thực thi mạng còn lại không thể tiếp tục được giải thích bằng cùng một số cộng dồn. Nếu coi gas cộng dồn trong biên nhận là mức độ tắc nghẽn khối, nhóm có thể đọc sai dung lượng: đề xuất phân biệt rõ gas đã trả trong biên nhận với chỉ số gas của khối. Từ đó, chúng tôi cho rằng dịch vụ tài trợ phí nên theo dõi riêng chi tiêu, tỷ lệ thao tác thành công và mức dùng tài nguyên, thay vì chỉ dựa vào gas mỗi khối để quyết định trợ cấp.

Lựa chọn kinh tế ở đây là giao thêm gánh nặng dữ liệu mà node phải giữ lâu dài cho bên tạo ra nó. Điều này có thể giúp mở rộng bền vững hơn, nhưng tập trung một phần chi phí vào triển khai và lần sử dụng đầu tiên. Chứa được nhiều công việc thực thi hơn và làm mỗi thao tác rẻ hơn là hai kết quả cần được kiểm chứng riêng.

Người dùng mới cần mô hình chi phí riêng

Theo dự thảo hiện tại, ghi một ô lưu trữ lạnh vốn bằng không thành giá trị khác không có phần trạng thái là 64 × 1.530, tức 97.920 gas. Cộng 2.100 cho truy cập và 10.000 cho ghi, tổng là 110.020. Đây chỉ là chi phí mô hình của một thao tác ghi cụ thể, không phải giá cả giao dịch chuyển tiền hay hệ số tăng chung cho mọi ứng dụng. EIP-8037, EIP-8038

Ví dụ, cùng điểm vào của lệnh chuyển token có thể đi theo đường trạng thái khác nhau khi cập nhật số dư của người đã giữ token và khi tạo ô số dư cho người lần đầu nhận token. Theo phân tích của chúng tôi, trợ cấp thu hút người dùng cố định dựa trên chi phí trung bình của giao dịch thành công sẽ che khuất khác biệt này. Các nhóm nên phát lại riêng các trường hợp nhận lần đầu, cấp quyền lần đầu, triển khai ví lần đầu và thao tác lặp lại, rồi kiểm tra biên lợi nhuận có đủ bù đường thực thi hợp lệ đắt nhất hay không.

Tránh tạo ô mới cũng chưa đủ. EIP-8038 điều chỉnh cả phí truy cập và ghi, nên cập nhật trạng thái sẵn có vẫn có thể đắt hơn. Xử lý theo lô có thể phân bổ bớt một số chi phí chung, nhưng nếu liên quan thêm tài khoản ngoài, proxy hoặc thử lại sau thất bại, mức tiết kiệm phải được chứng minh trên toàn bộ chuỗi gọi. Chỉ giảm số giao dịch chưa đủ để kết luận. EIP-8038

gasleft() không phải hóa đơn đầy đủ

Mô hình reservoir của EIP-8037 dành riêng một phần ngân sách cho việc tạo trạng thái. Opcode GAS, được Solidity cung cấp dưới tên gasleft(), chỉ báo gas_left, không gồm reservoir. Hủy việc tạo trạng thái còn có thể làm gas được hoàn lại ngay vào các quỹ gas. Vì thế, lấy hiệu hai lần đọc gasleft() không thể đại diện ổn định cho toàn bộ chi phí người dùng chịu, và cũng không thể mặc định chỉ số này luôn giảm. EIP-8037

Điều này liên quan trực tiếp đến relayer, bên tài trợ và hợp đồng thu phí trên chuỗi. Nếu logic thu phí coi hiệu đó là bằng chứng chi tiêu, nó có thể bỏ sót chi phí trạng thái hoặc gặp lỗi số học khi chỉ số tăng lại. Hướng thiết kế vững hơn là tách quy tắc thu phí đã được người dùng đồng ý, kết quả thực thi có thể kiểm chứng và đối soát ngoài chuỗi. Giới hạn phí có thể chặn mức lỗ, nhưng không biến phép đo sai thành đúng. Tài liệu kiểm toán chính thức đã đánh dấu việc tính phí bằng hiệu gasleft() là nội dung cần kiểm tra. Danh sách bất biến

Sai lầm đắt nhất có thể đến sau thất bại

Vấn đề khó thấy hơn là hợp đồng bên ngoài còn làm được gì sau khi lệnh gọi đích thất bại. Từ các quy tắc hoàn gas trong EIP-8037, chúng tôi suy luận một tình huống giả định cần kiểm thử: cơ chế hoàn gas trạng thái hoặc reservoir có thể cho phép một số trình xử lý thất bại chạy đến cuối. Giả sử một luồng trước đây hoàn tác toàn bộ vì không đủ gas ghi bản ghi thất bại có thể chuyển sang đánh dấu nhiệm vụ hoàn tất vĩnh viễn dù đích chưa thực thi. Điều cần chứng minh là quyền thử lại vẫn còn, chứ không chỉ hàm kết thúc mà không báo lỗi. Phân tích bảo mật

Do đó, kiểm thử quan trọng trước phát hành nên đi ngược từ kết quả nghiệp vụ: cố tình cấp thiếu gas cho lệnh gọi con, rồi kiểm tra quyền nhận, trạng thái thông điệp, nonce và điểm vào để thử lại. Lô xử lý bắt buộc phải bắt lỗi cần có đường khôi phục rõ ràng. Không nên suy ra nguyên nhân thất bại chỉ từ gas còn lại hoặc dữ liệu revert rỗng. Phân tích này không khẳng định mọi hợp đồng bắt lỗi đều có lỗ hổng; rủi ro phụ thuộc toàn bộ đường thực thi và trạng thái.

Khóa tạm thời cũng cần được xem xét riêng. Cờ chỉ dùng trong một giao dịch có thể được đánh giá để chuyển sang transient storage của EIP-1153, vốn bị xóa khi giao dịch kết thúc và phù hợp với một số trạng thái tạm giữa các lệnh gọi. Tuy nhiên, việc chuyển đổi vẫn cần kiểm tra ngữ cảnh proxy, hành vi hoàn tác và chống tái nhập. Số dư bền vững hoặc quyền phải tồn tại qua nhiều giao dịch không thuộc loại lưu trữ này. EIP-1153

Đưa kết quả vào tiêu chí nghiệm thu

Kế hoạch chuẩn bị thực tế là cố định phiên bản đặc tả thử nghiệm, bao phủ tài khoản mới và cũ, ô mới và cũ, ngân sách trạng thái đủ và thiếu, cùng đường thành công và hoàn tác. Việc kiểm tra phải gồm hợp đồng, bot và các thành phần quanh RPC. Hướng dẫn chính thức lưu ý phần mềm ngoài chuỗi cũng có thể bị ảnh hưởng; chỉ chạy lại kiểm thử đơn vị hợp đồng là chưa đủ. Kho kiểm toán chính thức

Nhóm sản phẩm cần làm rõ ngân sách có thể điều chỉnh, trần tài trợ phí và trách nhiệm khôi phục bất thường. Dự phòng ngân sách giúp người dùng hợp lệ tránh bị kẹt; trạng thái nghiệp vụ có thể khôi phục mới ngăn sai sót trở thành vĩnh viễn. Khoảng thời gian do Glamsterdam trì hoãn tạo ra là cơ hội thay ước lượng gas từ lịch sử bằng ràng buộc có thể kiểm chứng về cả chi phí lẫn kết quả thất bại. Vượt qua những bài kiểm tra này cần đi trước mọi lời hứa về phí thấp hơn hoặc thông lượng cao hơn.

Nội dung chỉ cung cấp thông tin, không cấu thành tư vấn đầu tư, pháp lý, thuế hoặc tài chính.