Hôm qua, tôi nhận được một tin nhắn từ đồng nghiệp: "Gas estimator trên testnet Plataberget báo sai 30%."
Đó là dấu hiệu đầu tiên. Không phải do lỗi code của họ, mà do bản nâng cấp Glamsterdam sắp tới của Ethereum. EF đã cảnh báo – "một số công cụ có thể ngừng hoặc sai kết quả." Nhưng cộng đồng đang phớt lờ nó.
Tôi mở Etherscan, check thử. Đúng thật. Gas price trả về khác hẳn với thực tế. Vấn đề không nằm ở RPC, mà nằm ở cách tính phí mới.
Context: Glamsterdam là gì?
Glamsterdam là tên mã của một bản nâng cấp giao thức L1 Ethereum, tập trung vào mô hình Gas. Theo thông báo chính thức, nó sẽ được triển khai qua một testnet riêng gọi là Plataberget, sau đó mới lan sang các testnet khác trước khi lên mainnet. Đây là quy trình chuẩn của Ethereum Foundation: cô lập rủi ro trước.
Nhưng vấn đề là, EF không đưa ra EIP cụ thể. Cộng đồng chỉ biết: "Gas model mới." Không có số hiệu, không có spec chi tiết. Điều này khiến các nhà phát triển công cụ không biết chuẩn bị gì.

Là một người đã từng audit hợp đồng Aragon và tự fork Uniswap v2, tôi hiểu rõ: thay đổi Gas model không đơn giản như update một tham số. Nó động đến cách transaction được xây dựng, cách fee được ước lượng, và cách các block được xử lý.
Core: Phân tích kỹ thuật – tại sao công cụ chết?
Hãy nhìn vào cấu trúc hiện tại. Ethereum sử dụng EIP-1559 với base fee và priority fee. Các thư viện như ethers.js, web3.js đều có hàm estimateGas() dựa trên công thức cũ. Nếu Glamsterdam thay đổi công thức tính base fee – ví dụ, chuyển từ exponential moving average sang một hàm phi tuyến khác – thì mọi ước lượng đều sai.
Tôi đã từng gặp trường hợp tương tự khi audit Aragon: một thay đổi nhỏ trong voting mechanism làm hỏng toàn bộ logic off-chain. Lần này, quy mô lớn hơn.
"40% URI tập trung – hãy gọi nó là điểm mù bảo mật" – tôi từng viết thế về BAYC. Giờ đây, tôi thấy một điểm mù tương tự: hầu hết các công cụ Gas estimator đều dùng hardcode tham số từ EIP-1559. Nếu Glamsterdam thay đổi đơn vị đo hoặc thêm một loại phí mới (phí dữ liệu, phí lưu trữ?), các công cụ này sẽ không tự động thích ứng.
Tôi đã tự viết một light client cho Celestia, và biết rằng việc thay đổi specification không có bản cập nhật đồng bộ sẽ dẫn đến lỗi phân mảnh. Các nhà cung cấp RPC (Infura, Alchemy) sẽ phải update backend. Các block explorer phải parse lại dữ liệu. Các ví như MetaMask, Trust Wallet phải release bản vá. Nhưng lịch sử cho thấy: không phải ai cũng vá kịp.
Tôi ước tính ít nhất 20% công cụ DeFi phổ biến sẽ gặp sự cố trong 48 giờ đầu sau mainnet nếu không có hành động. Confident: cao.
Contrarian: Góc nhìn ngược – "Testnet trước" không phải là tấm khiên
Nhiều người nói: "EF đã cho testnet riêng, rủi ro thấp." Sai.
Testnet Plataberget chỉ mới được tạo. Các nhà phát triển công cụ có thực sự test không? Theo kinh nghiệm của tôi, phần lớn developer chỉ test trên Sepolia hoặc Goerli. Họ không có thời gian chạy trên một testnet lạ. Họ sẽ test vào phút cuối, hoặc không test.

"Với dấu ngoặc kép, 'testnet bảo vệ' thực chất là 'chuyển trách nhiệm'" – EF đưa ra cảnh báo và yêu cầu dev tự test. Nhưng nếu công cụ của bạn hỏng, EF không chịu trách nhiệm. Đó là một cơ chế đổ lỗi hoàn hảo.
Thêm một điều: thị trường hiện đang giảm. Các đội ngũ đã cắt giảm nhân sự. Ai sẽ dành thời gian để viết lại Gas estimator? Họ đang lo sống sót.
Takeaway: Hành động ngay, không chờ đợi
Nếu bạn đang vận hành một dApp trên Ethereum, hãy làm ba việc: 1. Fork testnet Plataberget và chạy thử toàn bộ flow. 2. Kiểm tra thư viện web3 của bạn có hỗ trợ Gas model mới không. 3. Chuẩn bị fallback: dùng hardcoded gas limit thay vì ước lượng tự động.
Còn EF? Họ cần công bố EIP ngay lập tức. Giấu spec chỉ làm tăng hỗn loạn.
"Gas mới không phải là phép màu, nó là một mảnh ghép cần được kiểm tra từng dòng code." Tôi đã nói thế khi audit Uniswap v2 fork. Bây giờ vẫn thế.
Câu hỏi cuối: bạn có muốn là người đầu tiên phát hiện lỗi, hay là nạn nhân?