Tôi đã mở ba gói trong trình biên tập chính sách của Newton, vaults.fyi, RedStone, Chainalysis, để kiểm tra xem liệu một hành động vault có nên được phép thực thi hay không.
vaults.fyi trả về risk_score là 0.72. RedStone trả về divergence_bps là 38. Chainalysis trả về risk_score riêng của nó là "low", kèm theo cờ sanctioned được đặt là false.
Hai trong số ba phản hồi đó sử dụng đúng cùng một tên trường, risk_score, cho hai thứ hoàn toàn khác nhau. Một là xếp hạng sức khỏe vault dạng số. Cái còn lại là nhãn phân loại về các lệnh trừng phạt. Không có gì trong JSON của bất kỳ nhà cung cấp nào cảnh báo bạn trước, vì cả hai nhóm không xây dựng schema của họ khi biết rằng có nhóm còn lại tồn tại.
Nếu một bản gộp ngây thơ chỉ ghi cả hai phản hồi vào cùng một đối tượng, thì lần ghi thứ hai sẽ thắng. Ở Vaults.fyi, 0.72 bị thay thế lặng lẽ bằng "low". Chính sách vẫn tiếp tục chạy. Không có lỗi, không có cảnh báo, không có chữ đỏ nào ở đâu cả. Nó bắt đầu so sánh một ngưỡng với một giá trị mà giờ đây đã không còn tồn tại.
Tôi đi tìm xem Newton thực sự dừng lại ở đâu, vì rõ ràng là nó không để cho người viết file Rego tự nhận ra điều đó.
Mỗi pack sẽ đặt tên không gian (namespace) cho đầu ra của nó dưới pack id riêng trước khi mọi thứ được gộp. Điểm rủi ro của Vaults.fyi nằm ở data.wasm.vaultsfyi.risk_score. Của Chainalysis nằm ở data.wasm.chainalysis.risk_score, một địa chỉ hoàn toàn khác, dù tên trường giống hệt nhau. Giá trị sai lệch của RedStone nằm ở data.wasm.redstone.divergence_bps. Chạy Simulate đồng thời với cả ba, bảng dữ liệu đã gộp hiển thị đúng như vậy: ba đường dẫn tách biệt, không cái nào chạm vào cái nào.
Đó không phải là một quy tắc bảo nhà phát triển phải cẩn thận khi đặt tên. Đó chính là bản thân thao tác gộp từ chối không cho xảy ra va chạm, trước khi bất kỳ tác giả chính sách nào còn viết ra một phép so sánh nào.
Thứ ở lại trong tôi không phải là lỗi mà tôi đã không gặp. Mà là việc bản sửa chữa thực tế lại chẳng hề “hào nhoáng”. Không ai quảng bá các khóa JSON theo dạng được đặt tên trong không gian tên. Nhưng chính chi tiết đó nằm giữa một chính sách vault chặn đúng một hành động rủi ro, và một chính sách khác lặng lẽ chấp thuận nó chỉ vì hai nhà cung cấp không liên quan tình cờ thống nhất với cùng một từ.

