Tiêu đề gốc: "Thiên đường hacker của Cheese Wizard - Người đầu tiên thực hiện chuỗi khối hard fork Trò chơi》
Nguồn gốc: Dappreview
Vào ngày 14 tháng 10, Cheeze Wizards đã được ra mắt trên mạng chính Ethereum. Chưa đầy 24 giờ, người chơi @samczsun đã báo cáo với quan chức rằng có một lỗi nghiêm trọng trong hợp đồng trò chơi, sử dụng lỗi này có thể khiến bạn trở nên bất khả chiến bại. Cheeze Wizards sau đó đã quyết định áp dụng giải pháp phân nhánh để bảo vệ quyền lợi của người dùng. Cheeze Wizards đã sửa lỗi và triển khai một hợp đồng thông minh mới, đồng thời 178 ETH bị mất từ tổng giải thưởng đã được bù đắp, nhưng CW đã không đóng cửa trò chơi được đề cập mà thay vào đó biến nó thành thiên đường của hacker.

Lỗi của Dugu Qiufei
Trước tiên, hãy xem một trận đấu Zhi Magician bình thường diễn ra như thế nào:
1. Người chơi A thách đấu người chơi B
2. Người chơi B chấp nhận và phục tùng nước đi
3. Người chơi A phản ứng và thực hiện nước đi
4. Người chơi A tiết lộ nước đi
5. Người chơi B tiết lộ nước đi
6. Hợp đồng thông minh xác định kết quả trận chiến
7. Hoạt ảnh đấu tay đôi được tạo trên cheezewizards.com, người chơi có thể xem kết quả
Hãy xem liệu người chơi B có sử dụng The phương thức đấu tay đôi sau lỗi "Death Ring":
1. Người chơi A thách đấu người chơi B
2. Người chơi B chấp nhận và thực hiện nước đi
3. Người chơi A phản hồi và thực hiện nước đi
4. Người chơi A tiết lộ nước đi
5. Người chơi B cố tình hết thời gian mà không để lộ nước đi (90 phút)
6. Người chơi B ác tâm gọi hàm ResolveTimedOutDuel (rTOD), biến cả hai đấu thủ thành người chơi A, kết quả là Người chơi A bị lỗi vừa là người thắng vừa là kẻ thua
Cuộc gọi độc hại: hàm giải quyếtTimedOutDuel (WIZARD-A, WIZARD-A)
Cuộc gọi thông thường: hàm giải quyếtTimedOutDuel (WIZARD-A, WIZARD-B)
Không Rất khó để tìm hiểu.Sự khác biệt giữa hai người là ở bước 5, người chơi B, người được cho là đã tiết lộ nước đi, đã sử dụng chiến thuật trì hoãn để hết thời gian, sau đó ác ý gọi chức năng trên (một chức năng để giải quyết vấn đề chạy hết thời gian đấu tay đôi) để đạt được chiến thắng chắc chắn. Tin vui là lỗi này không làm hỏng toàn bộ trò chơi. Là một người chơi bình thường, bạn có thể gần như Không bị ảnh hưởng dưới bất kỳ hình thức nào. Và trong khi các phương pháp chiến đấu bẩn thỉu nêu trên được phép tồn tại, Giải đấu Pháp sư vẫn có thể tiếp tục. Tên chính thức là Cheeze Wizard: Chưa tiệt trùng. Trừ khi...đây là phần thú vị. Lưu ý: Phiên bản Magician chưa được khử trùng không phù hợp với tất cả người chơi. Người tham gia cần phải nhận thức đầy đủ về những rủi ro. Nhiều người chơi sẽ chạy các tập lệnh tự động để đảm bảo rằng họ kích hoạt phương pháp rTOD trước tiên, cho dù là bên trung thực hay không trung thực. Người chơi cần suy nghĩ xem mình có đủ can đảm để chơi trò chơi vui nhộn này hay không. Vì vậy, hãy tìm cách phù hợp với mình và đến tham gia vào phiên bản Chi Magic chưa được tiệt trùng. Cuối cùng, hợp đồng thông minh thực hiện một Chuyển giao năng lượng, hãy coi hợp đồng là chuyển toàn bộ năng lượng cho Chimage chiến thắng, sau đó tiêu hao năng lượng của Chimage thua cuộc. Tuy nhiên, vì cả wiz1 và wiz2 đều trỏ đến một chỉ số (#1000), #1000 năng lượng của Wiz trước tiên sẽ tăng gấp đôi... và sau đó bị tiêu hao hết. Rất may, lỗi này có thể dễ dàng khắc phục bằng cách thêm một câu lệnh yêu cầu đơn giản ở đầu hàm để đảm bảo rằng hai ID ChiMage là khác nhau. Địa chỉ gốc: https://mp.weixin.qq.com/s/N8_5pPu4bc8cj5JLD_vzvg p> 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
span> p>
Lời gọi hàm ác ý sẽ làm cạn kiệt năng lượng của Zhi Magician A. Người chơi A bị đánh giá là tiêu cực, nhưng Zhi Magic Division B cũng sẽ không hoạt động. Lúc này, người chơi B gọi lại ResolveTimedOutDuel(WIZARD-B, WIZARD-B) để khắc phục trạng thái lỗi.
Lúc này, việc năng lượng của Pháp sư A đã biến mất không thể thay đổi được, còn Pháp sư B thì bình an vô sự . (Lưu ý khi khai thác lỗi này, năng lượng không được chuyển từ A sang B). Tất nhiên, bên thứ ba ác ý cũng có thể gọi hợp đồng rTOD để tiêu diệt năng lượng của Pháp sư A và không nhất thiết phải do người chơi B kích hoạt.
Hợp đồng thông minh của Cheeze Wizards đã được thiết kế cẩn thận để sau khi phát hành, không có cách nào để rút tiền thắng cược (hoặc thay đổi trạng thái của bất kỳ hợp đồng nào). giải đấu) ). Do đó, cách duy nhất để giải quyết lỗi này là triển khai một hợp đồng mới.
Đã có 150 địa chỉ ví trong hợp đồng được đề cập, với tổng giá trị là 175 ETH. Bây giờ 40.000 đô la đã bị khóa trong hợp đồng đó, chiến thắng giải đấu là cách duy nhất để lấy số tiền đó theo logic chiến đấu hiện tại.
Tin xấu là một số Chimage hiện có số hiệu 6133 bị ảnh hưởng. Trò chơi chính thức cung cấp Txhash để người chơi tham khảo:
https://etherscan.io/tx/0x0d497ea959406909edad945d332d0aa1ed2a41273c694ad385910720af2f86f3

Cái gọi là phiên bản chưa được khử trùng đề cập đến hợp đồng thông minh Cheeze Wizards được Dapper Labs triển khai vào Phiên bản ngày 14 tháng 10 năm 2019 . Phiên bản chưa được dọn dẹp chứa lỗi nói trên, có thể bị những người chơi độc hại lợi dụng để khai thác sức mạnh của người chơi thông thường, đặc biệt là những người sử dụng giao diện web để truy cập trò chơi. Nhưng các quan chức của Cheeze Wizards cho biết lỗi này sẽ khiến trò chơi trở nên thú vị hơn đối với một số người chơi kỹ thuật thích làm thủ thuật.
Một lỗi có gì "thú vị"?
Như đã đề cập ở trên, có vẻ như Người chơi A luôn là nạn nhân. Họ thực hiện các động tác trò chơi đã gửi trước đó theo đúng quy tắc và sau đó sức lực của họ không còn nữa. Tất nhiên Người chơi B không thể hấp thụ những năng lượng này nhưng anh ta đã loại bỏ thành công đối thủ của mình để Người chơi A không thể tham gia trò chơi được nữa.
Người chơi B đã mạo hiểm khi không tiết lộ nước đi của mình. Theo quy định của Cheeze Wizards, anh ta không được tiết lộ các nước đi đã được gửi thành công. Nước đi này có nghĩa là tự động bị mất.
Tại thời điểm này, nếu người chơi A hoặc hệ thống gọi rTOD đúng cách trước khi người chơi B gọi phương thức rTOD một cách ác ý , gửi các tham số chính xác: chức năng giải quyếtTimedOutDuel(WIZARD-A, WIZARD-B), người chơi A sẽ chiến thắng và nhận được toàn bộ năng lượng của người chơi B!
Vậy là một lối chơi mới đã ra đời. Nếu người chơi xác định rằng đối thủ sẽ sử dụng lỗi để chống lại mình, thì người chơi có thể sử dụng đúng phương pháp gọi rTOD để lấy đi năng lượng của đối thủ. Chìa khóa thành bại nằm ở chỗ ai gọi rTOD trước (bạn bè DR lưu ý: ngay cả khi được gọi cùng lúc, các giao dịch có phí gas cao hơn sẽ được thợ mỏ đóng gói nhanh hơn).
Nhưng những người chơi trung thực có một lợi thế: khi thắng, họ có thể loại bỏ những người chơi không trung thực và hấp thụ năng lượng của họ. Ngay cả khi Người chơi không trung thực sẽ thắng, điều đó sẽ chỉ loại bỏ người chơi trung thực và không cho phép anh ta có thêm năng lượng.
Và đừng quên, Cheeze Wizards đã chính thức chạy một chương trình nền để theo dõi xem có bất kỳ động thái nào chưa được tiết lộ trong hơn 90 phút. Các trận đấu, sau khi được phát hiện, sẽ tự động kích hoạt phương pháp rTOD chính xác. 
Hãy đi sâu vào cấp độ mã.
Xem lỗi ở cấp độ mã
Điều đã xảy ra là trong trận chiến, hai người chơi đã đưa ra các chiêu thức cho nhau và một trong số họ cố tình hay vô ý không tiết lộ các chiêu thức mà mình tung ra. Lúc này, để người chơi khác kết thúc trận chiến kéo dài này, Cheeze Wizards cho phép người chơi thực hiện giao dịch "tiết lộ một chiều". Đây thực sự là một tình huống đặc biệt sẽ không gặp phải trong các game thông thường.
Lỗ hổng rTOD chỉ xảy ra trong một tình huống, trong khi chiến đấu. Một đấu thủ đã lộ nước đi và đấu thủ kia chưa lộ nước đi cho đến khi hết thời gian (90 phút). Khi chỉ có một bên tiết lộ nước đi và bên kia đợi đến khi hết thời gian, bất kỳ kẻ dùng ác ý nào cũng có thể gọi sai hợp đồng rTOD để đóng băng năng lượng của những người chơi trung thực.
Giả sử người chơi trung thực A đang sử dụng số #1000 Chi Magician và người chơi sử dụng số #2000 Chi Magician B chiến đấu, người chơi B dự định sử dụng lỗi "Death Bell". Cả hai pháp sư đều chọn nước đi của riêng mình để bước vào trận đấu. Người chơi A thể hiện nước đi của mình, trong khi người chơi B đợi trận đấu kết thúc và gọi giải quyếtTimedOutDuel(1000, 1000) . Chúng ta hãy xem một số mã trong hợp đồng thông minh:
require(wizardId1! = WizardId2, "Same Wizard 》)
Hợp đồng thông minh này đã trải qua quá trình đánh giá bảo mật chính thức bởi Sigma Prime và Cheeze Wizards tin rằng rằng không có Vấn đề nào khác có thể ngăn trận đấu diễn ra như mong đợi.
Sau khi xem điều này, bạn hẳn đã hiểu rằng việc chơi phiên bản chưa được tiệt trùng của Cheeze Wizards vẫn yêu cầu một ngưỡng kỹ thuật nhất định. . Nếu bạn là một hacker muốn lợi dụng kẻ xấu, hãy truy cập unp.cheezewizards.com. Người chơi thường xuyên vui lòng vẫn tham gia tại cheezewizards.com.