Con dỗ bọn trẻ ngủ xong thì đã hơn 11 giờ rưỡi. Còn nửa tiếng nữa mà không muốn lướt điện thoại, tôi lật xem tài liệu về tầng thực thi của Dusk một lúc. Ban đầu định xem cho biết rồi ngủ luôn, nhưng lại mắc kẹt ở một chi tiết nên vẫn chưa ngủ được.
Piecrust là máy ảo thực thi hợp đồng thông minh của Dusk, dựa trên WASM—điểm này cũng giống như nhiều public chain mới, chẳng có gì đặc biệt. Điều đặc biệt nằm ở cách nó xử lý các phép toán mật mã: những thao tác nặng như tính toán băm (hash), kiểm chứng bằng chứng không kiến thức (zero-knowledge proof)… thay vì giao cho bytecode WASM chạy, nó lại biến chúng thành các hàm “host”, rồi gọi trực tiếp phần hiện thực cấp thấp viết bằng Rust để tính. Tức là code hợp đồng chạy các logic thông thường trong sandbox của máy ảo, nhưng hễ đụng tới tính toán mật mã nặng thì sẽ thoát khỏi sandbox để giao cho mã native xử lý; xong xuôi lại truyền kết quả về.
Cách tách ra như vậy thoạt nhìn là tối ưu kỹ thuật, nhưng nghĩ kỹ thì đó là điều “phải làm”. Nếu đặt khâu kiểm chứng bằng chứng không kiến thức vào một máy ảo dạng thông dịch, tổn hao hiệu năng sẽ chênh lệch theo bậc độ lớn, đặc biệt là với Dusk—một chain mặc định chạy theo lộ trình giao dịch bảo mật. Hầu như giao dịch nào cũng phải chạy qua bước kiểm chứng này; nếu phần đó chậm, throughput cả chuỗi sẽ bị bóp chết. Việc chuyển phần tốn tài nguyên nhất ra khỏi sandbox để chạy bằng code native về bản chất là tìm một lối đi trung gian giữa hai mục tiêu: “tính toán Turing-complete của hợp đồng” và “không để tính toán riêng tư kéo sập hiệu năng”.
Chỗ khiến tôi mắc lại là: giao diện để gọi những hàm host này do ai định nghĩa, và liệu sau này có mở rộng được không? Nếu mỗi lần thêm một loại nguyên ngữ mật mã mới lại phải sửa mã lõi của máy ảo, thì số lượng loại nguyên ngữ mật mã người phát triển có thể dùng—ít nhiều sẽ bị nhịp cập nhật của đội core “ghìm cổ”, chứ không phải được mở để hệ sinh thái tự do mở rộng. Điều này có phần mâu thuẫn với câu chuyện của public chain rằng “tính Turing-complete và nhà phát triển tự do phát huy”—chỉ là mâu thuẫn bị giấu ở tầng thấp, bình thường không cảm nhận được.
Nghĩ tới đây thì tôi chẳng còn tâm trí lật tiếp nữa, ghi lại trước đã, rồi khi có cơ hội sẽ kiểm tra rốt cuộc phần hàm host được mở đến mức nào.
Các bạn nghĩ sao: việc tách các phép tính mật mã cốt lõi khỏi sandbox để chạy native theo kiểu “ưu tiên hiệu năng” này, liệu cái giá phải trả có lớn hơn so với vẻ bề ngoài không?
@Dusk #dusk $DUSK
Piecrust là máy ảo thực thi hợp đồng thông minh của Dusk, dựa trên WASM—điểm này cũng giống như nhiều public chain mới, chẳng có gì đặc biệt. Điều đặc biệt nằm ở cách nó xử lý các phép toán mật mã: những thao tác nặng như tính toán băm (hash), kiểm chứng bằng chứng không kiến thức (zero-knowledge proof)… thay vì giao cho bytecode WASM chạy, nó lại biến chúng thành các hàm “host”, rồi gọi trực tiếp phần hiện thực cấp thấp viết bằng Rust để tính. Tức là code hợp đồng chạy các logic thông thường trong sandbox của máy ảo, nhưng hễ đụng tới tính toán mật mã nặng thì sẽ thoát khỏi sandbox để giao cho mã native xử lý; xong xuôi lại truyền kết quả về.
Cách tách ra như vậy thoạt nhìn là tối ưu kỹ thuật, nhưng nghĩ kỹ thì đó là điều “phải làm”. Nếu đặt khâu kiểm chứng bằng chứng không kiến thức vào một máy ảo dạng thông dịch, tổn hao hiệu năng sẽ chênh lệch theo bậc độ lớn, đặc biệt là với Dusk—một chain mặc định chạy theo lộ trình giao dịch bảo mật. Hầu như giao dịch nào cũng phải chạy qua bước kiểm chứng này; nếu phần đó chậm, throughput cả chuỗi sẽ bị bóp chết. Việc chuyển phần tốn tài nguyên nhất ra khỏi sandbox để chạy bằng code native về bản chất là tìm một lối đi trung gian giữa hai mục tiêu: “tính toán Turing-complete của hợp đồng” và “không để tính toán riêng tư kéo sập hiệu năng”.
Chỗ khiến tôi mắc lại là: giao diện để gọi những hàm host này do ai định nghĩa, và liệu sau này có mở rộng được không? Nếu mỗi lần thêm một loại nguyên ngữ mật mã mới lại phải sửa mã lõi của máy ảo, thì số lượng loại nguyên ngữ mật mã người phát triển có thể dùng—ít nhiều sẽ bị nhịp cập nhật của đội core “ghìm cổ”, chứ không phải được mở để hệ sinh thái tự do mở rộng. Điều này có phần mâu thuẫn với câu chuyện của public chain rằng “tính Turing-complete và nhà phát triển tự do phát huy”—chỉ là mâu thuẫn bị giấu ở tầng thấp, bình thường không cảm nhận được.
Nghĩ tới đây thì tôi chẳng còn tâm trí lật tiếp nữa, ghi lại trước đã, rồi khi có cơ hội sẽ kiểm tra rốt cuộc phần hàm host được mở đến mức nào.
Các bạn nghĩ sao: việc tách các phép tính mật mã cốt lõi khỏi sandbox để chạy native theo kiểu “ưu tiên hiệu năng” này, liệu cái giá phải trả có lớn hơn so với vẻ bề ngoài không?
@Dusk #dusk $DUSK
性能优先没毛病,安全上有原生代码审计反而更放心
0%
开放性被牺牲了,长期看会限制生态自由扩展
0%
得看宿主函数接口设计得开不开放,现在下结论太早
0%
0 phiếu bầu • Cuộc bỏ phiếu đã kết thúc