บทความนี้มาจาก: @Ehsan1579
แปลโดย|Odaily Star Daily(@OdailyChina); ผู้แปล| Ethan(@ethanzhang_web3

ดูจากหัวข้อเหตุการณ์เพียงอย่างเดียว อาจเข้าใจผิดว่าเป็นการโจมตีโดยใช้ช่องโหว่
แกนหลักของเหตุการณ์คือ: มีผู้คนแลก USDT มูลค่า 50.4 ล้านดอลลาร์สหรัฐ แต่ได้ AAVE มูลค่าเพียง 35,900 ดอลลาร์สหรัฐเท่านั้น
เมื่อฉันได้ยินเรื่องนี้ครั้งแรก ฉันรู้สึกตกใจอย่างมาก ดังนั้นฉันจึงตรวจสอบเหตุการณ์ทั้งหมดอย่างละเอียด: การติดตามการซื้อขาย เส้นทางของตัวแก้ปัญหา การเรียกใช้สัญญา อัตราสำรองในอดีต ข้อมูลการปิดรายการ กระบวนการของอะแดปเตอร์ รหัสอินเทอร์เฟซของ Aave SDK ของ CoW 闪电贷 และรหัสเส้นทางที่ใช้ตัดสินว่าข้อเสนอเป็น “สมเหตุสมผล” หรือไม่
นี่ไม่ใช่การโจมตีแบบแฮกเกอร์ โปรโตคอลหลักของ Aave ไม่มีข้อผิดพลาด CoW Settlement ไม่มีข้อผิดพลาด Uniswap ไม่มีข้อผิดพลาด SushiSwap ไม่มีข้อผิดพลาด การทำธุรกรรมนั้นถูกต้อง ลายเซ็นนั้นถูกต้อง และสัญญาทั้งหมดดำเนินการตามโค้ดอย่างเคร่งครัด อย่างไรก็ตาม มูลค่าทางเศรษฐกิจเกือบทั้งหมดถูกทำลาย เพียงเพราะเส้นทางที่อนุญาตให้ดำเนินการนั้นไร้เหตุผลอย่างยิ่ง
เครือข่ายหลักไม่มีปัญหา ปัญหาอยู่ที่เส้นทาง
ในมุมมองของฉัน การลดทอนเหตุการณ์นี้ให้เป็นเพียง “ข้อผิดพลาดของผู้ใช้” อย่างไม่เป็นทางการ ไม่ใช่ท่าทีที่เป็นกลางและรอบคอบ แน่นอนว่าผู้ใช้ได้ลงนามในคำสั่งซื้อแล้ว แต่ระบบซอฟต์แวร์ทั้งชุดกลับอนุญาตให้การดำเนินการเปลี่ยนหลักประกันที่เกี่ยวข้องกับมูลค่าใกล้เคียง 50 ล้านดอลลาร์สหรัฐ สามารถดำเนินการผ่านขั้นตอนการเสนอราคา การลงนาม การวางแผนเส้นทาง และการดำเนินการสุดท้ายได้อย่างสมบูรณ์ โดยทั้งหมดนี้ชี้ไปยังสระที่มีความคล่องตัวต่ำซึ่งมี AAVE เพียงประมาณ 331 เหรียญเท่านั้น สิ่งนี้ควรจะเป็นไปไม่ได้โดยสิ้นเชิง และอย่างน้อยควรได้รับการปิดกั้นอย่างเด็ดขาดโดยระบบก่อนถึงขั้นตอนการปิดการชำระเงิน
การติดตามแหล่งที่มาของข้อมูลการซื้อขาย
รายการซื้อขายผิดปกตินี้มีแฮช: 0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801f ซึ่งยืนยันบนบล็อกความสูง 24643151 ของ Ethereum Mainnet เมื่อวันที่ 12 มีนาคม 2026 โดยมีดัชนีรายการซื้อขายเป็น 1 ใช้แก๊สจำนวน 3780570 หน่วย และดำเนินการสำเร็จ ที่อยู่กระเป๋าเงินที่เป็นเจ้าของคำสั่งซื้อขายเริ่มต้นด้วย 0x98b9 ส่วนที่อยู่ของผู้แก้ปัญหา (ผู้ส่งรายการซื้อขาย) ที่ดำเนินการจริงเริ่มต้นด้วย 0x3980 และถูกทำเครื่องหมายเป็น tsolver ในข้อมูล CoW Contest
ก่อนอื่นต้องเข้าใจว่า นี่ไม่ใช่การแลกเปลี่ยน USDT เป็น AAVE ในระดับกระเป๋าเงินอย่างง่าย โทเค็นที่ขายคือ aEthUSDT ซึ่งเป็นหลักฐานการฝาก USDT ที่ให้ดอกเบี้ยบนแพลตฟอร์ม Aave ส่วนโทเค็นที่ซื้อคือ aEthAAVE ซึ่งเป็นหลักฐานการฝาก AAVE ที่ให้ดอกเบี้ยบนแพลตฟอร์ม Aave ดังนั้น นี่จึงเป็นการสลับสินทรัพย์ค้ำประกันบน Aave ผ่านระบบการชำระเงินของ CoW Protocol และกระบวนการอะแดปเตอร์สินเชื่อแบบฟลาชโลน
ก่อนการซื้อขาย กระเป๋าเงินนี้ถือครองประมาณ 50,432,693.075254 aEthUSDT และ 0 aEthAAVE หลังการซื้อขาย กระเป๋าเงินนี้เหลือเพียง 4.980399 aEthUSDT และได้รับ 327.241335505966487788 aEthAAVE จริงๆ แล้ว กระเป๋าเงินนี้ได้ขายตำแหน่งทั้งหมดเกือบหมด
เมตาดาต้าแสดงอย่างชัดเจนยิ่งขึ้นว่าการจัดเส้นทางนั้นเป็น “พิษ” ตั้งแต่ก่อนดำเนินการแล้ว คำสั่งซื้อมาจากการดำเนินการ aave-v3-interface-collateral-swap CoW API แสดงว่าเป็นคำสั่งขายที่ลงนามแล้ว ขณะที่เมตาดาต้าของแอปพลิเคชันระบุว่าเป็นการแลกเปลี่ยนหลักประกันแบบตลาดด้วยสปรีดอัจฉริยะ 121 จุดฐาน จำนวนเงินขายที่ลงนามคือ 50,432,688.41618 aEthUSDT จำนวนเงินซื้อขั้นต่ำที่ลงนามคือ 324.949260918413591035 aEthAAVE จำนวนเงินที่จ่ายจริงคือ 327.241335505966487788 aEthAAVE
นี่เป็นรายละเอียดที่สำคัญมาก คำสั่งซื้อนี้ไม่ได้คาดหวังว่าจะได้รับ AAVE นับพัน แล้วถูกทำลายไปโดยไม่ทราบสาเหตุในระหว่างทาง มันถูกออกแบบมาตั้งแต่ต้นเพื่อให้ได้ผลลัพธ์ประมาณสามร้อยกว่า AAVE
เส้นทางการล่มของทั้งหมด
เมื่อคุณติดตามการซื้อขายแล้ว กระบวนการทั้งหมดจะตรงไปตรงมาอย่างโหดเหี้ยม
การไหลเวียนของทุนระดับสูงสุดอิงอยู่บนสัญญาการตั้งtle GPv2Settlement ที่เริ่มต้นด้วย 0x9008 ก่อนหน้านั้น สัญญา HooksTrampoline ที่เริ่มต้นด้วย 0x60bf ได้ดำเนินการอนุญาต aEthUSDT เพื่ออนุญาตให้ตัวกลางคลัง CoW สามารถดึงสินทรัพย์ของผู้ใช้โดยไม่ต้องขอการอนุญาตแยกต่างหาก จากนั้น สัญญา GPv2VaultRelayer ที่เริ่มต้นด้วย 0xc92e ได้ดึง aEthUSDT จำนวน 50432688.41618 หน่วยจากกระเป๋าเงินของผู้ใช้เข้าสู่กระบวนการตั้งtle จนถึงขั้นตอนนี้ การดำเนินการทั้งหมดเป็นไปตามตรรกะปกติ
สัญญาการชำระเงินจากนั้นจะมอบสิทธิ์การดำเนินการ aEthUSDT ให้กับสัญญาช่วยที่ไม่ได้เปิดซอร์สซึ่งเริ่มต้นด้วย 0xd524 และเรียกใช้ผ่านฟังก์ชันเลือก 0x494b3137; สัญญาช่วยนี้จะส่งต่อสิทธิ์การดำเนินการให้กับสัญญาผู้ดำเนินการที่ไม่ได้เปิดซอร์สซึ่งเริ่มต้นด้วย 0x699c จนถึงขั้นนี้ ภาพรวมทั้งหมดของเส้นทางการทำธุรกรรมผิดปกติจึงถูกเปิดเผยอย่างสมบูรณ์
การเรียกใช้งานที่ถูกต้องครั้งแรกชี้ไปยังสัญญาคลัสเตอร์ Aave ที่เริ่มต้นด้วย 0x87870 โดยใช้ฟังก์ชัน withdraw (selector 0x69328dec) เพื่อทำลาย aEthUSDT และแลกคืน USDT พื้นฐานแบบดั้งเดิม จากนั้นเส้นทางจะถูกเปลี่ยนไปยังคลัสเตอร์การซื้อขาย Uniswap V3 ที่เริ่มต้นด้วย 0x4e68 สำหรับคู่ USDT/WETH ที่มีความลึก โดยแลก USDT ทั้งหมด 50432688.41618 หน่วย เป็น WETH จำนวน 17957.810805702142342238 หน่วย
ขั้นตอนการซื้อขายในระยะนี้ดำเนินไปอย่างปกติสมบูรณ์: อัตราแลกเปลี่ยนอยู่ที่ประมาณ 2808.4 USDT ต่อ 1 WETH ซึ่งสอดคล้องกับสถานการณ์ตลาดในขณะนั้น ไม่มีปัญหาด้านสภาพคล่อง ไม่มีข้อผิดพลาดในการคำนวณ และเส้นทางการซื้อขายขั้นแรกไม่มีความผิดปกติใดๆ
ปัญหาอยู่ที่การกระโดดครั้งที่สอง ทันทีที่คุณเห็นสต็อกสภาพคล่อง เรื่องที่เหลือก็หลีกเลี่ยงไม่ได้
หลังจากได้รับ WETH จำนวน 17957.810805702142342238 หน่วย ผู้ดำเนินการจะโอนเงินทั้งหมดไปยังสระการซื้อขาย SushiSwap V2 AAVE/WETH ที่ที่อยู่ 0xd75ea151a61d06868e31f8988d28dfe5e9df57b4
ฉันได้ตรวจสอบข้อมูลสต็อกสภาพคล่องย้อนหลังของสระการซื้อขายในขณะก่อนเกิดการซื้อขายผิดปกติ (บล็อกฮีทเทอร์ 24643150) ซึ่งสระมีเพียง:
331.631982538108027323 หน่วย AAVE, 17.653276196397688066 หน่วย WETH
นี่ไม่ใช่ข้อผิดพลาดในการป้อนข้อมูล แต่เป็นความจริงที่ไม่สามารถปฏิเสธได้
เส้นทางการซื้อขาย这条交易路由,将近 17958 枚 WETH 全部注入一个仅储备 17.65 枚 WETH、对应 AAVE 总库存仅 331.63 枚的微型交易池,输入的 WETH 体量竟是池内 WETH 储备的约 1017 倍。
นี่ไม่ใช่ปัญหาทั่วไปเช่น “จุดลื่นสูงเกินไป” หรือ “สภาพคล่องต่ำเล็กน้อย” แต่เป็นเส้นทางการดำเนินการคำสั่งตลาดที่ไร้เหตุผลอย่างรุนแรง ซึ่งบังคับให้สระ AMM แบบผลคูณคงที่ที่มีขนาดเล็กมาก รับคำสั่งซื้อขายที่มีขนาดใหญ่กว่าหลายพันเท่า
AMM แลกเปลี่ยนพอร์ตได้ดำเนินการตามอัลกอริทึมที่กำหนดไว้ ทำให้สต็อก AAVE ในพอร์ตแทบหมด
SushiSwap คู่การซื้อขายกระตุ้นเหตุการณ์แลกเปลี่ยน Core Swap: ผู้ดำเนินการโอนเข้า 17957.810805702142342238 หน่วย WETH แต่ได้รับคืนเพียง 331.305315608938235428 หน่วย AAVE หลังจากเสร็จสิ้นการซื้อขาย สภาพคล่องที่เหลือในสระนี้อยู่ที่ประมาณ:
0.326666929169791895 หน่วย AAVE, 17975.464081898540030304 หน่วย WETH
พูดง่ายๆ คือ ประมาณ 99.9% ของ AAVE ในสระถูกดึงออกหมดในหนึ่งขั้นตอน
ตามสินทรัพย์สำรองก่อนการซื้อขาย ราคา AAVE ที่ซ่อนอยู่ในสระอยู่ที่ประมาณ 149.50 ดอลลาร์สหรัฐ ราคาที่ผู้ใช้ดำเนินการจริงอยู่ที่ประมาณ 154,114.66 USDT ต่อ 1 AAVE ซึ่งต่างจากราคาสปอตก่อนการซื้อขายเกิน 1,000 เท่า
จากนั้น AAVE เหล่านี้จะถูกจัดหาคืนเข้าสู่กองทุน Aave โดยใช้ตัวเลือก 0x617ba037 ซึ่งคือ supply(address,uint256,address,uint16) ผลลัพธ์คือ aEthAAVE ที่ถูกสร้างขึ้นใหม่จะถูกส่งกลับไปยังสัญญาการชำระเงิน สัญญาการชำระเงินจะโอน aEthAAVE จำนวน 327.241335505966487788 ให้กับผู้ใช้ โดยเหลือ aEthAAVE ประมาณ 4.06398010297174764 ไว้ในสัญญาการชำระเงินเป็นส่วนเกินจากการชำระเงินของผู้ใช้
ดังนั้น การแจงยอดจึงไม่ได้บิดเบือนผลลัพธ์ที่ดีให้กลายเป็นผลลัพธ์ที่ไม่ดีอย่างกะทันหัน มันแค่ยืนยันผลลัพธ์ที่เส้นทางการสั่งซื้อได้สร้างขึ้นแล้วเท่านั้น
นี่คือจุดสำคัญที่ควรระบุให้ชัดเจน: ผลลัพธ์ที่เลวร้ายได้ถูก “กำหนดไว้ล่วงหน้า” ภายในกระบวนการรูทก่อนที่จะดำเนินการ
ในข้อมูลการเรียกใช้สัญญาช่วยที่ฝังอยู่ในเส้นทาง จำนวนเป้าหมายที่ซื้ออยู่ที่ประมาณ 331.272185078031026739 หน่วย จำนวนขั้นต่ำที่ผู้ใช้ตกลงไว้ในการซื้อคือ 324.949260918413591035 หน่วย และจำนวนที่จ่ายจริงคือ 327.241335505966487788 หน่วย ค่าหลักทั้งหมดถูกล็อกไว้ที่ระดับกว่าสามร้อยหน่วยของ AAVE ก่อนการ结算
This route was bad from birth.
ช่องโหว่อยู่ที่ไหน?
คำตอบคือ: กลไกการตรวจสอบแต่ละชั้นของระบบกำลังตรวจสอบมิติของข้อผิดพลาด
ระดับทั้งหมดตรวจสอบเพียงว่าการซื้อขายสามารถดำเนินการได้หรือไม่ ลายเซ็นถูกต้องหรือไม่ และจำนวนเงินไม่เป็นศูนย์ แต่แทบไม่มีการตรวจสอบระดับหลักว่าเส้นทางการซื้อขายมีความสมเหตุสมผลทางเศรษฐกิจหรือไม่ นี่คือรากฐานหลักของความล้มเหลวของกลไก
ข้อบกพร่องของรหัสเส้นทางการเสนอราคาสำหรับอินเทอร์เฟซอะแดปเตอร์ของ Aave
จุดผิดปกติของโค้ดที่ชัดเจนครั้งแรกปรากฏในกระบวนการเสนอราคาของ CoW adapter บนอินเทอร์เฟซของ Aave: ฟังก์ชันที่ใช้สำหรับแนบข้อมูลแอปพลิเคชันเฉพาะของ adapter เมื่อขอเสนอราคา ถูกปิดใช้งานอย่างบังคับ

ที่มา: rates.helpers.ts:93 และ adapters.helpers.ts:194
นี่หมายความว่าอินเทอร์เฟซของ Aave เมื่อขอ报价จาก CoW นั้น ไม่ได้แนบข้อมูลเมตาของ闪电贷และฮุกที่จะถูกเพิ่มเมื่อสั่งซื้อจริง กล่าวอีกนัยหนึ่ง สิ่งที่ถูกเสนอราคาไม่ได้เป็นสิ่งที่จะถูกดำเนินการอย่างสมบูรณ์ คำอธิบายในโค้ดยังระบุว่าจุดประสงค์ของฟังก์ชันช่วยนี้คือเพื่อให้การเสนอราคาของอะแดปเตอร์แม่นยำยิ่งขึ้น แต่ฟังก์ชันนี้กลับถูกปิดใช้งานอย่างถาวร
การตัดสินความสมเหตุสมผลของตรรกะการแข่งขันราคาของ CoW นั้นอ่อนแอเกินไป (ช่องโหว่หลัก)
ปัญหาที่สองและร้ายแรงที่สุดคือตรรกะการแข่งขันราคาของโปรโตคอล CoW: ในรหัสบริการสาธารณะของมัน ราคาใดๆ ที่มีค่า Gas เป็นบวกและจำนวนผลลัพธ์ไม่เป็นศูนย์ จะถูกพิจารณาว่าเป็น “ราคาที่สมเหตุสมผล”

ที่มา:quote.rs:31
สำหรับระบบเส้นทางที่จัดการคำสั่งซื้อที่มีตัวเลขแปดหลัก นี่คือนิยามของ “ความสมเหตุสมผล” ที่อ่อนแออย่างน่าตกใจ
ระบบไม่ได้เชื่อมต่อกับ oracle เพื่อตรวจสอบความสมบูรณ์ของราคา ไม่มีกลไกบล็อกการเสนอราคาที่เบี่ยงเบนจากราคาสปอตเกิน 500 เท่า ไม่มีการประเมินความเสี่ยงว่าเส้นทางจะดูดไหลเวียนในสระจนหมด และไม่มีการแจ้งเตือนเกี่ยวกับการไม่สมดุลอย่างรุนแรงระหว่างสภาพคล่องขั้นสุดท้ายกับขนาดคำสั่ง; ระบบจะยอมรับเฉพาะเมื่อผู้แก้ปัญหาส่งคืนเส้นทางที่สามารถดำเนินการได้และไม่เป็นศูนย์ ซึ่งเป็นช่องโหว่หลักของเหตุการณ์ครั้งนี้
ข้อบกพร่องของตรรกะการสร้างแบบจำลองสภาพคล่องของ Uniswap V2
คำถามที่สามเกี่ยวกับวิธีการจำลองสระสภาพคล่องสไตล์ Uniswap V2: รหัสใช้เพียงอัลกอริทึมผลคูณคงที่มาตรฐาน และปฏิเสธเฉพาะสถานการณ์ที่เป็นไปไม่ได้ในเชิงคณิตศาสตร์ เช่น สินทรัพย์ศูนย์ ค่าต่ำเกินไป หรือสินทรัพย์ล้นเกิน โดยไม่ตรวจสอบความเป็นไปได้ทางเศรษฐกิจ

ที่มา: pool_fetching.rs:118 และ pool_fetching.rs:153
รหัสนี้ไม่ได้ตรวจสอบว่าสภาพคล่องในสระมีเพียงพอสำหรับการดำเนินการตามเส้นทางที่ระบุหรือไม่ แต่เพียงตรวจสอบว่าการแลกเปลี่ยนนั้นถูกต้องตามคณิตศาสตร์หรือไม่ ดังนั้นแม้แต่สระขนาดเล็กที่มีสินทรัพย์ AAVE เพียง 331 ตัว ก็จะถูกพิจารณาว่าสามารถรับคำสั่งซื้อ WETH จำนวน 17,957 ตัวได้ เนื่องจากอัลกอริธึมผลคูณคงที่สามารถคำนวณผลลัพธ์ที่ไม่เป็นศูนย์ได้ แต่กลับไม่ได้พิจารณาเลยว่าผลลัพธ์นี้จะก่อให้เกิดการสูญเสียสินทรัพย์อย่างรุนแรง
การล้มเหลวครั้งที่สองของ SDK สำหรับสินเชื่อแบบฟ้าผ่าและกลไกการตรวจสอบคำสั่งซื้อ
จากนั้น 闪电贷 SDK ได้ผนึกข้อเสนอที่หมดอายุนี้ลงในโหลดการดำเนินการของคำสั่งและฮุก โดยไม่ได้ดำเนินการป้องกันความเสี่ยงเพิ่มเติมใดๆ

ถัดไป:

ที่มา: index.js:484 และ index.js:591
นี่คือเหตุผลที่ฉันพูดมาตลอดว่าเส้นทางนี้ “เสียตั้งแต่เกิด” ชั้นอะแดปเตอร์ไม่ได้ “ค้นพบ” จำนวนที่ผิดพลาดใหม่ในระหว่างการดำเนินการ มันได้ซีเรียลไลซ์จำนวนที่ผิดพลาดที่ถูกเสนอไว้ลงในข้อมูลฮุกและที่อยู่อินสแตนซ์ที่กำหนดไว้แล้ว ทันทีที่มีการเสนอจำนวนที่ผิดพลาด กลไกที่เหลือจะส่งต่อมันอย่างซื่อสัตย์
แม้แต่ตรรกะการตรวจสอบคำสั่งของ CoW ก็ไม่ได้ปกป้องผู้ใช้จริงๆ ที่นี่ เพราะมันตรวจสอบเพียงว่าคำสั่งเกินราคาตลาดเมื่อเสนอราคา แต่ไม่ได้ตรวจสอบว่าราคาเสนอเองนั้นไร้เหตุผลเมื่อเทียบกับสภาพคล่องจริง

ที่มา: order_validation.rs:694
นี่คือการตรวจสอบความสอดคล้อง หากคำเสนอราคาเองก็ไร้สาระอยู่แล้ว คำสั่งซื้อจะยังสามารถผ่านได้
กลไกเตือนหน้าผู้ใช้ไม่มีประสิทธิภาพ
อินเทอร์เฟซของ Aave มีการแจ้งเตือนการกระทบราคาสูง แต่มันไม่ใช่สวิตช์ปิดระบบแบบบังคับ เมื่อการสูญเสียมูลค่าเกิน 20% มันจะกลายเป็นกล่องเลือกยืนยัน

เมื่อผู้ใช้เลือกช่องทำเครื่องหมาย กำแพงก็ถูกลบออก:

ที่มา: helpers.ts:24 และ HighPriceImpactWarning.tsx:35
ดังนั้น แม้ว่าการซื้อขายครั้งนี้จะเกือบทำให้ทรัพย์สินทั้งหมดหมดไป ระบบก็ยังถือว่าเป็นการดำเนินการที่ต้องได้รับการยืนยันจากผู้ใช้ ไม่ใช่การซื้อขายที่มีความเสี่ยงสูงซึ่งระบบต้องปฏิเสธอย่างเด็ดขาด กลไกการแจ้งเตือนจึงสูญเสียบทบาทในการป้องกันความเสี่ยงไปอย่างสมบูรณ์
จากกลไกทั้งหมดที่ล้มเหลวข้างต้น ฉันไม่สามารถยอมรับข้อสรุปที่搪塞ว่า “นี่แค่ผู้ใช้โง่” ผู้ใช้ได้ทำการลงนามจริง แต่ระบบซอฟต์แวร์ทั้งชุดมีโอกาสหลายครั้งในการหยุดยั้งหายนะนี้ แต่ทุกระดับกลับทำเพียงการตรวจสอบพื้นฐาน แล้วตัดสินว่า “ไม่เป็นศูนย์ สามารถดำเนินการได้ และมีการลงนาม” ก่อนอนุญาตให้ผ่านไปโดยตรง สุดท้ายจึงก่อให้เกิดผลร้าย
เส้นทางไม่ได้ถูกดัดแปลง
ขั้นตอนนี้มีความสำคัญอย่างยิ่ง ช่วยตัดทอนการเดาผิดจำนวนมาก: ขั้นตอนอินเทอร์เฟซอย่างเป็นทางการของ Aave สำหรับ aave-v3-interface-collateral-swap จะคำนวณจำนวนเงินซื้อที่ปรับตามสไลด์ โดยใช้ข้อมูลราคา ค่าธรรมเนียมเครือข่าย ค่าธรรมเนียมพันธมิตร และค่าธรรมเนียมสินเชื่อแบบฟลาช ที่บรรทัดที่ 139 ของไฟล์ useSwapOrderAmounts.ts จากนั้นที่บรรทัดที่ 331 จะแปลงเป็นค่า buyAmountBigInt และต่อมาที่บรรทัดที่ 191 ของไฟล์ CollateralSwapActionsViaCoWAdapters.tsx จะดำเนินการลงลายเซ็นอย่างแม่นยำสำหรับจำนวนเงินนี้
สัญญาอะแดปเตอร์รุ่นต่อไปจะตรวจสอบว่าฟิลด์คำสั่งลายเซ็นตรงกับค่าที่เก็บไว้อย่างสมบูรณ์ที่บรรทัดที่ 141 ของไฟล์ AaveV3BaseAdapter.sol; สัญญาการตั้งtlement CoW จะบังคับใช้กฎขีดจำกัดที่ระบุในลายเซ็นที่บรรทัดที่ 337 ของไฟล์ GPv2Settlement.sol ดังนั้น ผลลัพธ์การดำเนินการบนโซ่จึงไม่เกินขอบเขตที่อนุญาตโดยคำสั่งลายเซ็น และสินทรัพย์ที่ผู้ใช้ได้รับจริงๆ ยังสูงกว่าขีดจำกัดต่ำสุดที่ระบุในลายเซ็น
สิ่งนี้เพียงพอที่จะพิสูจน์ว่าหายนะเกิดขึ้นก่อนการตั้งtlement ไม่ใช่ระหว่างกระบวนการตั้งtlement ข้อบกพร่องร้ายแรงของเส้นทางได้กำหนดผลลัพธ์ไว้แล้ว
ค่าที่หายไปไปอยู่ที่ไหน
การซื้อขายถัดไปในบล็อกเดียวกัน (เริ่มต้นด้วยแฮช 0x45388b0f) ได้ดำเนินการ arbitrage แบบ back-running บนสระ AAVE/WETH ของ SushiSwap ที่ถูกทำลาย โดยการซื้อขายผิดปกติได้เติมสระด้วย WETH ปริมาณมหาศาล แล้วดูด AAVE ออกไปเกือบทั้งหมด ก่อนที่ผู้ arbitrage จะขาย AAVE กลับเข้าสู่สระทันที เพื่อเก็บเกี่ยวมูลค่าส่วนเกินที่เกิดจากความไม่สมดุลของสภาพคล่อง
ในการดำเนินการ arbitrage ครั้งนี้ ได้ดึง WETH ประมาณ 17929.770158685933 หน่วย ตามด้วยการจ่าย ETH ประมาณ 13087.73 หน่วยให้กับผู้สร้างบล็อก และจ่าย ETH ประมาณ 4824.31 หน่วยให้กับที่อยู่ที่ดำเนินการ arbitrage
มูลค่าทางเศรษฐกิจทั้งหมดที่ผู้ใช้สูญเสีย จะถูกแปลงเป็นผลกำไรจากการทำ arbitrages MEV และรายได้ของผู้สร้างบล็อกภายในบล็อกเดียวกันเกือบในทันที
นอกจากนี้ การตรวจสอบลำดับเวลาที่ระดับบล็อกยืนยันว่า: ก่อนการซื้อขายไม่มีผู้ใดจงใจควบคุมสระการซื้อขายของ SushiSwap เพื่อหลอกลวงผู้ใช้ การเข้าถึงคู่การซื้อขาย AAVE/WETH เป็นครั้งแรกคือการซื้อขายผิดปกตินี้ (ดัชนีการซื้อขาย 1) ตามด้วยการซื้อขายถัดไป (ดัชนีการซื้อขาย 2) ที่ทำการปิดตำแหน่งครั้งแรกเพื่อทำกำไรจากความผิดปกติของราคาที่เกิดจากการซื้อขายนี้; การซื้อขายดัชนี 3 ก็เข้าถึงคู่การซื้อขายนี้ในกระบวนการฟื้นตัวของตลาด เส้นเวลาชัดเจนยืนยันว่า: การซื้อขายผิดปกตินี้สร้างราคาที่ผิดเพี้ยนอย่างรุนแรง และการซื้อขายตามมาได้รับผลกำไรโดยตรงจากความผิดเพี้ยนนี้
แล้วใครผิด?
หากคุณถามว่าโปรโตคอลหลักของ Aave V3 ล่มหรือไม่ คำตอบคือไม่ล่ม คลังทุนของ Aave ดำเนินการตามคำสั่งอย่างสมบูรณ์และเสร็จสิ้นกระบวนการรับคืน USDT และการฝาก AAVE อย่างปกติ
หากคุณถามว่าสัญญา GPv2Settlement ของ CoW ล่มหรือไม่ คำตอบคือไม่ล่ม การจัดการได้บังคับใช้คำสั่งซื้อที่มีลายเซ็นที่ถูกต้อง และจ่ายจำนวนเงินที่สูงกว่าขั้นต่ำที่ระบุในลายเซ็น
หากคุณถามว่าสัญญาคู่การซื้อขายของ Uniswap V3 หรือ SushiSwap ล่มหรือไม่ คำตอบก็คือไม่ได้ล่ม กลุ่มการซื้อขายทั้งสองประเภทดำเนินการกำหนดราคาตามกฎอัลกอริทึมของตนเอง
ความล้มเหลวเชิงระบบอย่างแท้จริง เกิดขึ้นที่ระดับการกำหนดเส้นทางและการควบคุมความเสี่ยงที่สูงกว่า:
ผู้รับผิดชอบหลักคือโมดูลการจัดเส้นทาง ข้อเสนอ และตัวแก้ปัญหาของ CoW Protocol: ระบบชุดนี้มีเกณฑ์การตัดสินว่า “เส้นทางที่เหมาะสม” นั้นอ่อนแอเกินไป อนุญาตให้คำสั่งซื้อขนาดหลายล้านดอลลาร์ไหลไปยังสระที่มีสภาพคล่องต่ำมาก เพียงเพราะเส้นทางสามารถดำเนินการได้และไม่เป็นศูนย์ ก็จะยอมรับโดยไม่คำนึงถึงความไม่สมเหตุสมผลทางเศรษฐกิจอย่างรุนแรง
ผู้รับผิดชอบรองคืออินเทอร์เฟซหน้าเว็บของ Aave: เมื่อขอ报价จากตัวปรับการเชื่อมต่อ ไม่ได้แนบข้อมูลแอปที่เกี่ยวข้องกับฮุก แต่ส่งผลลัพธ์ผิดพลาดตรงไปยังกระบวนการลงลายเซ็น และพึ่งพาเฉพาะการแจ้งเตือน cảnh báo โดยไม่มีกลไกปฏิเสธแบบบังคับ สำหรับธุรกรรมขนาดใหญ่สุดขั้วเช่นนี้ มาตรการควบคุมความเสี่ยงดังกล่าวไม่เพียงพอต่อการป้องกันความเสี่ยงอย่างเด็ดขาด
นี่คือความล้มเหลวอย่างรุนแรงในคุณภาพของการจัดเส้นทางการซื้อขายและมาตรการป้องกันความเสี่ยง ซึ่งทำให้การดำเนินการเปลี่ยนแปลงหลักประกันที่ถูกต้องตามกฎหมายและเป็นไปตามข้อบังคับ กลายเป็นเหตุการณ์สูญเสียสินทรัพย์อย่างหายนะ


