Có một giao dịch trên Ethereum mà tôi không thể quên. Nó không phải là một vụ hack lớn, không phải flash loan, không phải reentrancy cổ điển. Nó chỉ là một giao dịch thất bại. Một giao dịch trị giá 2.1 triệu USD bị mắc kẹt vĩnh viễn trong một hợp đồng thông minh, vì một lỗi sai nhỏ đến mức nực cười: người gửi đã không để lại đủ gas cho việc cập nhật trạng thái. Khi tôi đọc trace, tôi thấy hàm withdraw() chỉ chờ để được gọi, nhưng không ai có thể gọi nó, bởi vì người duy nhất có quyền đó... chính là cái ví đã gửi tiền vào, và cái ví ấy đã bị khoá bởi một multisig do chính nạn nhân tạo ra. Đó là một vòng luẩn quẩn. Một lỗ hổng về mặt kinh tế và logic, không phải về mặt mã nguồn. Code is law? Chỉ khi không có lỗi logic.
Tôi đã audit hơn 200 hợp đồng thông minh, và tôi nhận ra một điều: các lỗ hổng nghiêm trọng nhất thường không đến từ lỗi cú pháp Solidity, hay reentrancy guard bị thiếu. Chúng đến từ sự tin tưởng mù quáng vào một cơ chế. Cụ thể ở đây, là sự tin tưởng vào tính "finality" (tính tất yếu) của một giao dịch Layer 1.
Khi tôi bắt đầu audit Layer 2, tôi thấy các nhóm dự án thường bỏ qua một chi tiết nhỏ: thời gian. Cụ thể là độ trễ giữa lúc một giao dịch được submit trên Layer 2 (bởi sequencer) và lúc nó được finalize trên Ethereum (bởi challenge period). Trong mắt họ, thứ tự giao dịch đã được sắp xếp, nên mọi thứ đều ổn. Nhưng tôi nhìn vào đó và thấy một khoảng trống chết người: "khoảng trống của niềm tin."
Trong một audit gần đây cho một zk-rollup mới, tôi phát hiện ra lỗ hổng trong cơ chế "forced inclusion." Dự án này tự hào về tính phi tập trung, cho phép người dùng gửi giao dịch trực tiếp lên Ethereum nếu sequencer từ chối. Nghe có vẻ an toàn, đúng không? Sai. Sai hoàn toàn.
Vấn đề nằm ở chi tiết: khi một user gửi một giao dịch "force" lên L1, họ phải trả phí gas. Nhưng trong contract code, cơ chế này không được thiết kế để đọc msg.value một cách chính xác trong một số trường hợp batch processing. Họ tin rằng sequencer sẽ luôn đóng gói các giao dịch này đúng cách. Nhưng tôi thấy, nếu một kẻ tấn công, giả làm sequencer, trả một phí gas rất thấp cho giao dịch "force