
Sau khi viết script cho Celestia: Có cảm giác rằng Cosmos chưa làm tốt nhiều việc
Tuyển chọn TechFlowTuyển chọn TechFlow

Sau khi viết script cho Celestia: Có cảm giác rằng Cosmos chưa làm tốt nhiều việc
Chắc chắn lúc đó Celestia đã không thực hiện các biện pháp đối phó với lưu lượng truy cập quy mô lớn, và việc cấu hình nút RPC cũng rất sơ sài.
Tác giả: Vụ Nguyệt, Geeker Web3
Vào ngày 17 tháng 12, tôi biết rằng sắp xuất hiện inscription CIAS trên Celestia, nên định vội vàng viết một script để farm inscription. Hiện tại, tôi có khá nhiều điều muốn phàn nàn về Celestia, hệ sinh thái Cosmos nơi nó thuộc về, cũng như bản thân sự kiện CIAS này.
Thực ra, việc viết một script farm inscription không khó, chủ yếu chia thành ba mô-đun: xây dựng ví, kết nối nút và phát tán giao dịch ồ ạt (flood transaction). Hai bước đầu tiên chỉ cần tra cứu tài liệu dành cho nhà phát triển của chuỗi mục tiêu là có thể nhanh chóng thực hiện được.
Tôi đã xem qua trang web chính thức và Github của Celestia, nhưng không tìm thấy bất kỳ ví dụ nào dành cho việc xây dựng ứng dụng người dùng do nhà phát triển thực hiện, phần lớn đều là tài liệu liên quan đến vận hành nút. Dĩ nhiên điều này có thể hiểu được, vì Celestia không phải là một blockchain hướng tới người dùng cuối (ToC). Celestia chỉ đề cập rất sơ sài rằng mình dựa trên Cosmos, và có thể tương tác với mạng chính thông qua CosmJS.
Tôi liền chuyển sang CosmJS. Nhưng mà, nói thật thì Cosmos làm tài liệu quá tệ. Tôi trực tiếp vào Github, theo lẽ thường thì các thư viện JS kiểu này thường có ví dụ sử dụng ngay trên Github. Nhưng hướng dẫn của nó lại nằm khuất trong một trang cấp hai, khi bấm vào và làm theo cấu hình, cuối cùng lại báo lỗi.
Lỗi này không phải do môi trường, mà vì hướng dẫn không được cập nhật đồng bộ với phiên bản, ví dụ tên class bị đổi nhưng hướng dẫn vẫn giữ nguyên, khiến một số ví dụ không chạy được. Tôi thử chuyển sang các phiên bản cũ của thư viện npm, nhưng vẫn có vài ví dụ không hoạt động, vật lộn một lúc rồi đành từ bỏ.
Sau đó tôi thử tìm kiếm trên Google, kết quả lại phát hiện tài liệu đúng nằm trên trang web chính chứ không phải Github — điều này khá vô lý. Một lần nữa, tại sao Github không cập nhật phần readme để trỏ tới hướng dẫn trên website?
Sau khi có được hướng dẫn đúng, tôi nhanh chóng hoàn thành hai bước tạo ví và kết nối nút, bắt đầu xây dựng mô-đun phát tán giao dịch ồ ạt. Mô-đun này nói đơn giản là một vòng lặp for xử lý ký giao dịch và gửi yêu cầu mạng. Tuy nhiên ở đây lại gặp thêm vấn đề:
Tất cả các phương thức giao dịch trong thư viện CosmJS đều chỉ xuất ra tham số của giao dịch, còn sequence thì không được công khai (sequence tương tự như nonce trên Ethereum, là bộ đếm giao dịch nhằm ngăn chặn tấn công replay; mỗi khi giao dịch được gửi đi, nonce và sequence sẽ tự động tăng thêm 1).

Sequence lại được lấy từ mạng khi thực hiện ký (sign), cùng với chainId và một số thông tin khác, trải qua sendTokens() -> signAndBroadCast -> sign(). Mỗi lần gửi giao dịch đều phải chờ phản hồi từ mạng sẽ ảnh hưởng đến tốc độ farm và tạo ra nhiều yêu cầu mạng thừa, điều này bất lợi cho việc phát tán giao dịch ồ ạt, cũng như việc tăng tốc hoặc hủy một giao dịch.

Chúng ta hãy so sánh với phương pháp gửi giao dịch trong Web3JS của Ethereum, nơi bạn có thể tự đặt nonce. Nhưng trong CosmJS thì không thể. Tôi vẫn cho rằng thiết kế của Ethereum hợp lý hơn nhiều, cho phép chỉ định trực tiếp nonce để hủy hoặc tăng tốc giao dịch. Nếu một giao dịch bị kẹt, bạn có thể tạo một giao dịch mới với cùng nonce để thay thế, hoặc cũng có thể tận dụng điều này cho việc farm.

Do thời gian gấp, cộng thêm vài hàm khác cần sửa đổi trong các thư viện, tôi quyết định không dùng Proxy để hook và ghi đè, mà trực tiếp chỉnh sửa luôn trong thư viện CosmJS.
Ý tưởng thực hiện flood transaction bằng script là dùng vòng lặp for liên tục khởi tạo giao dịch, tạo chữ ký và gửi đến nút RPC. Sau mỗi giao dịch, sequence/nonce tăng thêm 1, sau khi gửi 20 giao dịch thì bắt đầu lại một chu kỳ mới.
Sequence chỉ được lấy về cục bộ một lần duy nhất trước mỗi chu kỳ flood, không cần như mặc định trong CosmJS là cứ sau mỗi giao dịch lại phải gửi yêu cầu tới nút để lấy lại sequence. Còn chainId thì được cố định giá trị, không cần truy vấn lặp lại từ nút. (Ghi chú biên tập: số lần lặp ở đây được đặt khá thấp, rõ ràng tác giả chưa thực hiện quá hung hãn. Có người khi farm inscription trên Conflux từng đặt số lần lặp mỗi chu kỳ lên tới 1000, mỗi phút gửi khoảng 200 giao dịch khác nhau)

Cuối cùng, tôi có được một script Celestia khá thô sơ. Đêm 17 tháng 12, sau khi CIAS rút dây mạng, tôi thử nghiệm đơn giản script này và gửi đi vài trăm giao dịch. Đến rạng sáng 19 tháng 12 khi CIAS tiếp tục mở lại, tôi thực sự đã farm được một số CIAS (khoảng 1800 cái). Nhưng vẫn còn vài điểm cần phàn nàn:
-
Ngày 17 tháng 12, nút RPC của Celestia gặp vấn đề đồng bộ dữ liệu nghiêm trọng, chiều cao khối giữa các nút RPC khác nhau chênh lệch rất lớn, khi bạn yêu cầu lấy sequence tài khoản từ các nút, kết quả trả về hầu như không thống nhất, gây cực kỳ khó chịu. Trình duyệt khối của Celestia cũng không dùng được, gần như mù tịt. Có thể nói, dù mạng Celestia chưa sập và vẫn tạo được khối, nhưng có vẻ đã gần chạm giới hạn.
-
Cùng ngày, ban tổ chức CIAS nhận thấy Celestia sắp không chịu nổi, liền tuyên bố tạm thời vô hiệu hóa tất cả giao dịch mint inscription được ghi trên blockchain sau khối số 48460 — giống hệt cảnh "sàn giao dịch rút dây mạng". Thậm chí trang web chính thức của CIAS cũng sập.

-
Một số người cho rằng giao thức đồng thuận gốc của các chuỗi Cosmos xử lý đồng thuận khối rất kém, tôi không bình luận về điều này, nhưng rõ ràng động cơ rút dây mạng của CIAS tối hôm đó rất đáng suy ngẫm.
-
Ngày 17 tháng 12, rất khó chọn được một nút đồng bộ dữ liệu nhanh nhất, vì gần như tất cả các nút RPC đều bị quá tải, thường xuyên không phản hồi. Sau đó tôi thử viết thêm mã tự động chuyển đổi giữa các nút.
-
Định dạng inscription của CIAS không giống các loại inscription khác, ví dụ trong json của brc-20 mọi con số đều là chuỗi ký tự, còn trong cia-20 lại là kiểu số.

-
Chi phí cho mỗi inscription CIAS tối hôm đó tăng vọt lên mức cao nhất 1,5~2U, thậm chí có người chi tới 80U để farm một inscription. Phí cao như vậy phản ánh rõ ràng TPS bị giới hạn, người sáng lập Celestia từng tuyên bố có thể xử lý 10.000 giao dịch mỗi giây, rõ ràng là đang nói khoác.

Tổng kết lại, trải nghiệm đêm 17 tháng 12 có thể gói gọn trong một câu: Celestia rõ ràng chưa chuẩn bị sẵn sàng cho lượng truy cập lớn, và cấu hình nút RPC cũng rất sơ sài (khó tưởng tượng chỉ trong một giờ đã làm sập hàng chục nút RPC).
Tối 19 tình hình đã tốt hơn nhiều, ngoài việc phí gas tăng vọt thì các khía cạnh khác không có vấn đề lớn. Có thể nói Celestia, với tư cách là một mạng DA chuyên phân phối dữ liệu cho các nút nhẹ, tạm thời đã vượt qua thử thách, nhưng không biết sau này có còn hố nào khác hay không.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News












