เข้าใจง่ายใน 5 ขั้นตอน ใช้ช่องโหว่ DeFi ทำกำไร 360,000 ดอลลาร์สหรัฐฯ อย่างไร
เมื่อเร็ว ๆ นี้ "แฮ็กเกอร์" ใช้ Flash Loan โดยมีค่าใช้จ่ายเกือบเป็นศูนย์ ดูรายละเอียดในหมายเหตุ 1] เงินกู้ที่ให้นั้นทำเงินได้ 360,000 ดอลลาร์สหรัฐในการทำธุรกรรมครั้งเดียว (ยังมีข้อโต้แย้งมากมายว่าเหตุการณ์นี้จัดอยู่ในประเภท "การโจมตีด้วยการแฮ็ก" หรือไม่ เพราะในทางเทคนิคแล้ว "แฮ็กเกอร์" นี้ไม่ได้ทำอะไรผิดกฎหมาย) . เมื่อพิจารณาจากจำนวนผลิตภัณฑ์ DeFi ที่เกี่ยวข้องกับเหตุการณ์ "แคร็ก" นี้ หากคุณต้องการทำให้ง่ายสำหรับผู้ที่มีความเข้าใจเบื้องต้นเกี่ยวกับ DeFi คุณต้องอธิบายรายละเอียดที่เกี่ยวข้องให้ชัดเจนที่สุด ในบทความนี้ ฉันจะแนะนำผู้อ่านทีละขั้นตอนผ่านการดำเนินการ "แคร็ก" และให้คำอธิบายเพิ่มเติมในบางขั้นตอนที่สำคัญ เพื่อจะได้รู้ลึกรู้จริงว่าเหตุการณ์นี้เกิดขึ้นได้อย่างไร แทนที่จะแค่ "รู้นิดหน่อย"
ข้อความ
ขั้นตอนที่ 1: เงินกู้ FlashLoan: ยืม 10,000 WETH จาก dydx
ข้อความ
ข้อความ
ขั้นตอนที่ 3: การซื้อขายด้วยเลเวอเรจ dZx: 1300 WETH เติมเงินในสัญญา dZx เลเวอเรจ 5 เท่าเป็นชอร์ต การดำเนินการเฉพาะสามารถเข้าใจได้ง่ายๆ ว่าเป็นการยืม 5637.623762 WETH จาก bZx และขายใน Uniswap ผ่าน KyberSwap และการขายจะกลายเป็น 51.345576 WBTC
ขั้นตอนนี้คือการทะลุผ่านราคาของ WETH/WBTC ใน Uniswap
ในเวลานั้น ราคาปกติของ WETH/WBTC อยู่ที่ประมาณ 0.025974 และการขายขั้นนี้โดยพื้นฐานแล้วราคาของ WETH/WBTC ใน Uniswap จะอยู่ที่ 0.00910747 เกือบสามครั้ง
ข้อความ
ขั้นตอนที่ 4: ธุรกรรม Uniswap: ใช้ 112 BTC ที่ยืมมาจาก Compound ในขั้นตอนที่ 2 เพื่อซื้อคืน ETH ใน Uniswap และซื้อคืนรวมเป็น 6871.4127388 ETH
ข้อความ
ขั้นตอนที่ 5: FlashLoan ส่งคืน: มี 3200 WETH ที่ไม่ได้ใช้ใน 10,000 WETH ที่ยืมโดย FlashLoan บวกกับ 6871 WETH ที่ซื้อคืนด้วย 112 WBTC ในขั้นตอนที่ 4 รวมเป็น 10071.4127388 WETH 10,000 WETH สำหรับการคืนเงินกู้ Flash มี 71.4127388 เหลืออยู่
ณ จุดนี้ การดำเนินการทั้งหมดสิ้นสุดลงแล้ว
ตราบใดที่ธุรกรรมเหล่านี้เกิดขึ้นภายในหนึ่งบล็อกไทม์ของ Ethereum และได้รับการบรรจุและยืนยันโดยบล็อกถัดไปของ Ethereum ธุรกรรมเหล่านี้จะถูกดำเนินการตามเวลาที่เริ่มต้น ประเด็นสำคัญ: เนื่องจากตรงตามเงื่อนไขของ Flash Loan และส่งคืนได้ภายในบล็อกเดียว ธุรกรรมของขั้นตอนทั้งหมดจึงสามารถรับรู้ได้
มาดูรายได้ของ Joe:
จาก 5 ขั้นตอนนี้ ดูเหมือนว่า Joe จะได้เพียง 71.4127388 WETH
แต่อย่าลืมว่า Joe ยังมีสองตำแหน่งใน Compound และ bZx
คนแรกคือการให้สินเชื่อจำนองใน Compound จำนอง 5500 WETH และให้ยืม 112 WBTC
อีกอันคือการซื้อขายโดยใช้มาร์จิ้นใน bZx โดยที่ 1300 WETH ถูกจดจำนองและขายชอร์ตด้วยเลเวอเรจ 5 เท่า มี 51.345576 WBTC ที่เหลืออยู่
เนื่องจาก bZx ใช้ราคา WETH/WBTC ใน Uniswap เป็นฟีดราคา และราคา WETH/WBTC ใน Uniswap ถูกควบคุมโดย Joe ดังนั้นตามความเข้าใจทั่วไป ตำแหน่งของ Joe ใน bZx ควรถูกชำระบัญชี แต่สถานการณ์จริงคือมีเพียง 51.345576 WBTC ที่ได้รับจากการดำเนินการขั้นตอนที่สามที่เหลืออยู่ในตำแหน่งนี้
เห็นได้ชัดว่าโจไม่ต้องการเพิกเฉยต่อตำแหน่งนี้ แม้ว่า 51.345576 WBTC ที่เหลือจะถูกหักออก (ในความเป็นจริง bZx ได้หัก 51.345576 WBTC แล้ว)
ส่วนตำแหน่งใน Compound โจสนใจมากกว่า ตามราคาปกติของ ETH/BTC ในขณะนี้คือประมาณ 0.025974 Joe ต้องการใช้เงินเพียง 4300 WETH จากตลาดเพื่อซื้อ 112 WBTC จากนั้นส่งคืนที่ Compound และคุณสามารถแลก 5500 WETH ได้ สิ่งนี้สามารถสร้างรายได้ประมาณ 1,200 WETH
ดังนั้นกำไรของ Joe ในการดำเนินการนี้ควรเป็น:
1200+ 71.4127388 = 1271.4127388 WETH。
ชื่อเรื่องรอง
แล้วปัญหาคืออะไร?
จากขั้นตอนโดยละเอียดข้างต้น ปัญหาอยู่ที่สัญญาซื้อขายมาร์จิ้นเลเวอเรจของ bZx
ก่อนอื่น bZx ใช้ราคาของ WETH/WBTC ใน Uniswap เป็นราคาฟีด และความลึกใน Uniswap ยังไม่เพียงพอ
ประการที่สอง มาร์จิ้นเลเวอเรจในการซื้อขาย bZx ไม่ว่าจะยาวหรือสั้น ตลาดสำหรับการซื้อหรือขายก็เป็น Uniswap กล่าวอีกนัยหนึ่ง bZx เองจะมีผลกระทบต่อราคาของ Uniswap
คำลงท้าย:
คำลงท้าย:
จุดประสงค์ของบทความนี้ไม่ใช่เพื่อวิจารณ์ช่องโหว่ของผลิตภัณฑ์ DeFi หลังเหตุการณ์ดังกล่าว หรือวิจารณ์แฮ็กเกอร์ที่เราเรียกว่าโจ
จุดประสงค์ของบทความนี้เป็นเพียงเพื่อให้ผู้เข้าร่วมทั่วไปในฟิลด์ cryptocurrency มีความเข้าใจเพิ่มเติมเกี่ยวกับตรรกะของผลิตภัณฑ์ DeFi และเข้าใจง่ายที่สุดเท่าที่จะเป็นไปได้
ในเวลาเดียวกัน ฉันหวังว่าทุกคนจะเห็นว่าต้นตอของเหตุการณ์นี้คืออะไร และนักพัฒนาควรเรียนรู้จากสิ่งนี้เมื่อออกแบบผลิตภัณฑ์ DeFi อื่นๆ
เพื่อให้เกิดการระเหิดมากขึ้น เหตุการณ์นี้ทำให้เกิดการถกเถียงกันในแวดวง DeFi ว่าจะตั้งค่าสิ่งที่เรียกว่า "สิทธิ์ของผู้ดูแลระบบ" สำหรับผลิตภัณฑ์ DeFi หรือไม่ บทความนี้ทำหน้าที่เป็นบทนำ และเราสามารถแบ่งปันเนื้อหาประเภทนี้กับชุมชน Cortex Chinese ต่อไปในอนาคต
CortexLabs หมายเหตุ 1: Flash Loan ชื่อแปลตามตัวอักษรภาษาจีนคือ Flash Loan "สินเชื่อแฟลช" เป็นวิธีการเริ่มต้นธุรกรรมหลายรายการบนแพลตฟอร์มการให้ยืม DeFi ที่แตกต่างกันภายในบล็อกเดียว นั่นคือ การให้ยืมซ้ำระหว่างสินทรัพย์และหนี้สินต่างๆ "Flash Loan" เป็นวิธีการกู้ยืมที่ไม่ต้องมีหลักประกันโดยมีเงื่อนไขว่าการออกและชำระคืนเงินกู้จะต้องเสร็จสิ้นในบล็อกเดียวกันของ Ethereum ตามความเร็วการผลิตบล็อกปัจจุบันของ Ethereum จะใช้เวลาประมาณ 13 วินาที


