Nguồn ban đầu: Mạng Filecoin
Vào ngày 18 tháng 3 năm 2021, có thông báo rằng do quy trình từ xa của Filecoin Có là "lỗ hổng nghiêm trọng" trong mã gọi (RPC) và xảy ra "chi tiêu gấp đôi". Những tuyên bố này là không chính xác và rất sai lệch.
Nhóm Lotus đã điều tra kỹ lưỡng báo cáo và không tìm thấy vấn đề nào liên quan đến mạng Filecoin và mã API RPC. . Bản thân chuỗi không có vấn đề chi tiêu gấp đôi và không có lỗi trong mã API. Nền tảng giao dịch liên quan đã sửa các bản ghi giao dịch sai sót trong nền tảng giao dịch và đang xem xét logic xử lý nạp tiền trong hệ thống kế toán của họ để sửa việc sử dụng API.
Sự kiện Báo cáo —Đầu ngày hôm nay, nhóm Lotus đã nhận được lỗi trao đổi khi sử dụng API Lotus để tính toán số lần chuyển/gửi tiền trong mạng Filecoin. Lỗi sử dụng API xảy ra khi người dùng báo cáo với nền tảng giao dịch rằng tài khoản của họ đã bị hệ thống kế toán của nền tảng giao dịch ghi nhầm. Sự cố này đã được khắc phục trong hệ thống kế toán của sàn giao dịch - không có bản ghi trùng lặp nào trên chuỗi.
Hiểu lầm về API —Cốt lõi của vấn đề là việc sử dụng API kiểm tra trạng thái chuỗi của Lotus không đúng cách, API này xử lý nhiều thông báo tương tự khác với mong đợi. Việc hiểu sai kết quả đầu ra của API Lotus có thể khiến hệ thống kế toán tính cả tin nhắn gốc và tin nhắn thay thế là cùng một người gửi và người nhận. Cho đến nay, chúng tôi chỉ biết có một nền tảng giao dịch bị ảnh hưởng bởi vấn đề này.
Báo cáo sai sự thật trở thành bài báo Tiêu đề —Các tuyên bố không chính xác về "chi tiêu gấp đôi" trực tuyến lan truyền trên các kênh truyền thông xã hội và xuất hiện trong tiêu đề bài viết. Nội dung trong các báo cáo này đã được điều tra và xác định là thông tin sai lệch. Nhóm không tìm thấy vấn đề nào với mạng Filecoin hoặc mã API RPC. Sau khi tìm hiểu sự thật, nhiều đội và cơ quan truyền thông đang đính chính thông tin của họ.
Các nền tảng giao dịch bị ảnh hưởng—các nền tảng giao dịch có liên quan đã phát hiện ra việc sử dụng API không đúng này và đã thực hiện hành động ngay lập tức để ngừng gửi tiền, rút tiền và chuyển khoản. Kể từ đó, họ đã khôi phục giao dịch sai sót được đề cập (vì vậy không có khoản tiền nào bị mất trong sự cố này) và đang điều chỉnh việc sử dụng API Lotus để tuân thủ cách sử dụng được khuyến nghị.
Các trường hợp không thường xuyên —Các nền tảng giao dịch khác đã được cảnh báo và đang xem xét logic mã của họ để đảm bảo rằng chúng đúng không bị ảnh hưởng bởi sai lầm tương tự. Nhiều đánh giá trong số này đã được hoàn thành – theo như chúng tôi biết, hiện không có nền tảng giao dịch nào khác đang lạm dụng API theo cách này.
Nhóm Lotus —Nhóm Lotus đang tích cực làm việc với tất cả các nền tảng giao dịch để đảm bảo hành vi này được xử lý chính xác và Cải thiện Tài liệu API (https://github.com/filecoin-project/lotus/pull/5838) để đảm bảo rằng tất cả các nền tảng giao dịch khác kiểm tra chính xác trạng thái chuỗi của Filecoin.
Cộng đồng và Truyền thông —Một số nhóm đang làm việc cùng nhau để liên hệ với giới truyền thông nhằm làm rõ các chi tiết và sự thật về sự cố bị cáo buộc và giúp loại bỏ các thông báo lỗi.
Nhóm cộng đồng —Các thành viên cộng đồng cung cấp các cách để giúp các thành viên khác trong cộng đồng báo cáo vấn đề một cách chính xác và chu đáo, tránh gây bất ngờ Truyền bá thông tin sai lệch.
Tương tự Thông tin — Theo như nhóm Lotus biết thì vấn đề bắt nguồn từ hai tin nhắn có cùng thông tin chi tiết về người gửi/người nhận, cùng một mã định danh nhưng các tham số Gas khác nhau—được chứa trong cùng một bộ mẹo. Hai tin nhắn giống nhau như thế này rất phổ biến, ví dụ thay đổi phí gas của tin nhắn để thay thế tin nhắn sẽ tạo thành hai tin nhắn giống nhau như vậy. Những tình huống như vậy sẽ được mạng Filecoin xử lý một cách an toàn và chính xác và sẽ không dẫn đến hai lần chuyển tiền: một trong hai tin nhắn sẽ được thực thi và tin nhắn còn lại sẽ bị bỏ qua.
Việc sử dụng API không đúng —Tuy nhiên, theo Cách mọi người kiểm tra chuỗi, sẽ có vẻ như tin nhắn đã được xử lý hai lần. Cụ thể, nền tảng giao dịch được đề cập đã sử dụng cách xử lý trạng thái chuỗi không chính xác - gọi ChainGetBlockMessages trên mỗi khối của bộ mẹo và sau đó gọi StateGetReceipt trên các tin nhắn đó.
thông báo (một trong số đó được thực thi và thông báo còn lại bị bỏ qua), nó sẽ cung cấp kết quả giống nhau tạo ấn tượng rằng cả hai thông báo đều được thực thi. Đây thực sự là một hành vi phản trực giác, nhưng nó có chủ ý. Trường hợp sử dụng chính của StateGetReceipt là trong trình xử lý sự kiện (https://github.com/filecoin-project/lotus/blob/79a8ff04fd5362a367fd7d6469e5287a47baa571/chain/events/events_called.go#L586) được sử dụng trong quá trình xử lý giao dịch. Trong trường hợp một tin nhắn được thay thế, các mô-đun này không quan tâm liệu thông tin trả về có tương ứng với tin nhắn gốc hay tin nhắn được thay thế hay không - chúng chỉ muốn biết liệu tin nhắn đó có được thực thi thành công trên chuỗi hay không. Chúng tôi đã thêm nội dung làm rõ vào tài liệu tại đây: https:/ / /github.com/filecoin-project/lotus/pull/5838.
Sử dụng đúng API  ;—Hầu hết các nền tảng giao dịch đều sử dụng chính xác ChainGetParentMessages và ChainGetParentReceipts để tính toán những thông báo nào đã được thực thi trên chuỗi và những thông báo nào đã thành công. Đây là các API được chính Lotus sử dụng trong quá trình tính toán trạng thái chuỗi để đảm bảo rằng người dùng có thể phản ánh chính xác trạng thái chuỗi theo cách này. Việc thực thi StateReplay cho mỗi tin nhắn có thể thu được kết quả cuộc gọi hoàn chỉnh để người dùng có thể so sánh MsgCid trong InvocResult được trả về với CID của tin nhắn truy vấn. Đây là bước được khuyến nghị để các nền tảng giao dịch kiểm tra chính xác trạng thái chuỗi và giữ cho hệ thống báo cáo nội bộ của họ được đồng bộ hóa.
Bản gốc văn bản Nguồn
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia
