จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำด้านการลงทุนหรือความปลอดภัย ออราเคิลราคาที่ออกแบบไม่ดีอาจทำให้เกิดการชำระบัญชีผิดพลาด เงินกู้ที่มีหลักประกันไม่พอ และความเสียหายต่อโปรโตคอล
คำตอบโดยตรง
ไม่มีช่วงเวลา TWAP ที่ปลอดภัยสำหรับทุกกรณี ควรเลือก ช่วงเวลาที่สั้นที่สุดซึ่งยังทำให้การบิดเบือนที่มีกำไรเป็นไปได้ยากสำหรับพูลและโปรโตคอลนั้น แล้วตรวจว่าความล่าช้ายังยอมรับได้เมื่อราคาเคลื่อนไหวจริง ช่วงเวลาที่ยาวขึ้นมักบังคับให้ผู้โจมตีมีอิทธิพลต่อตลาดนานขึ้น แต่ก็เก็บราคาเก่าไว้ในค่าเฉลี่ยนานขึ้นด้วย และไม่อาจชดเชยสภาพคล่องต่ำ สภาพคล่องกระจุกตัวนอกเส้นทางราคา มูลค่าความเสี่ยงสูงเกินไป หรือการเชื่อมต่อที่ผิดพลาด
นี่คือการกำหนดงบความเสี่ยง ไม่ใช่การเลือกระหว่าง 5 นาที 30 นาที หรือ 1 ชั่วโมง โปรโตคอลควรบันทึกพูลต้นทาง วิธีหาค่าเฉลี่ย ค่าคลาดเคลื่อนและความล่าช้าสูงสุด มูลค่าที่ดึงออกได้ ต้นทุนการโจมตี ประวัติข้อมูล และพฤติกรรมสำรอง ต้องวิเคราะห์ใหม่เมื่อสภาพคล่อง แรงจูงใจ การสร้างบล็อก เพดานหลักประกัน หรือโครงสร้างตลาดเปลี่ยนไป
วิธีการทำงาน
ออราเคิลแบบตัวสะสมบันทึกราคาตามเวลา สำหรับตัวสะสมเลขคณิต ค่าเฉลี่ยจาก t1 ถึง t2 คือ:
TWAP(t1,t2) = (cumulativePrice(t2) - cumulativePrice(t1)) / (t2 - t1)
Uniswap v2 สะสมราคาที่จุดเริ่มต้นของแต่ละบล็อก และผู้ใช้เก็บค่าตัวสะสมสองค่า ส่วน Uniswap v3 เก็บค่าตัวสังเกต tick สะสม การแปลง tick เฉลี่ยจึงให้ค่าเฉลี่ย เรขาคณิต ถ่วงน้ำหนักตามเวลา วิธีเฉลี่ย ทิศทางราคา ความจุข้อมูล การปัดเศษ และการอัปเดตเป็นส่วนหนึ่งของข้อกำหนด อย่าถือว่า TWAP ทุกแบบเป็นค่าเฉลี่ยเลขคณิตของราคาสปอต
ใช้กระบวนการต่อไปนี้:
- กำหนดฟังก์ชันความเสียหายของผู้ใช้ราคา บันทึกผลต่อวงเงินกู้ การชำระบัญชี การสร้าง การไถ่ถอน หรือการชำระราคา และกำหนดความล่าช้ากับค่าคลาดเคลื่อนสูงสุดทั้งตลาดขึ้นและลง
- วัดสภาพคล่องที่ซื้อขายได้จริง จำลองเงินสำรอง ค่าธรรมเนียม และสภาพคล่องที่ทำงานตลอดเส้นทางราคาของการโจมตี TVL กับปริมาณล่าสุดเพียงอย่างเดียวไม่พิสูจน์ความต้านทาน
- จำกัดผลตอบแทนของผู้โจมตี รวมเพดานหลักประกันและเงินกู้ โบนัสการชำระบัญชี สถานะเปิด การประกอบกับโปรโตคอลอื่น และกำไรก่อนหยุด เปรียบเทียบต้นทุนกับมูลค่ารวมที่ดึงออกได้
- จำลองการโจมตีที่เป็นไปได้ ทดสอบการบิดเบือนหนึ่งและหลายบล็อก เงินทุนแบบแฟลช อำนาจผู้เสนอบล็อกหรือการจัดลำดับ อาร์บิทราจ back-running ความแออัด และต้นทุนปิดสถานะ งานวิจัยชี้ว่าสมมติฐานที่ต้นทุนเพิ่มเป็นเส้นตรงตามช่วงเวลาอาจล้มเหลวเมื่อผู้โจมตีแข็งแกร่งขึ้น
- ทดสอบช่วงเวลาที่เป็นตัวเลือก จำลองการกระโดดในอดีตและเส้นทางราคาฝ่ายตรงข้ามสำหรับแต่ละระยะ ตัดตัวเลือกที่เปิดให้บิดเบือนมีกำไรหรือให้ราคาล้าสมัยเกินรับได้
- เพิ่มมาตรการอิสระ ใช้เพดานความเสี่ยง การตรวจความเบี่ยงเบนเทียบแหล่งอิสระ ขีดจำกัดความเก่า อัตราหลักประกันแบบระมัดระวัง และนโยบายหยุดหรือสำรองที่ทดสอบแล้ว มาตรการเหล่านี้จำกัดความเสียหายแต่ไม่ทำให้แหล่งที่ไม่ปลอดภัยกลายเป็นปลอดภัย
ผลลัพธ์ใช้เฉพาะกับพูล ระดับค่าธรรมเนียม เชน การติดตั้ง คู่สินทรัพย์ และสถานะโปรโตคอลนั้น การคัดลอกช่วงเวลา 30 นาทีไม่ได้คัดลอกสภาพคล่องหรือขีดจำกัดความเสียหายของอีกโปรโตคอล
ตัวอย่าง
สมมติ TWAP เลขคณิตอย่างง่าย และราคาตลาดเปลี่ยนทันทีจาก 100 เป็น 70 แล้วคงที่ที่ 70 หลัง 15 นาที หน้าต่างเลื่อน 30 นาทีมีราคาแต่ละค่าค่าละ 15 นาที:
(15 x 100 + 15 x 70) / 30 = 85
เมื่อครบ 30 นาที ข้อมูลเก่า 100 จึงออกทั้งหมดและ TWAP ถึง 70 หน้าต่าง 5 นาทีถึง 70 หลัง 5 นาที แต่ผู้โจมตีก็ต้องคงการบิดเบือนสั้นลงเช่นกัน ในตลาดกู้ยืม การตีมูลค่าหลักประกันใกล้ 85 ขณะที่ราคาที่ซื้อขายได้ใกล้ 70 อาจทำให้ชำระบัญชีล่าช้าและเกิดหนี้เสีย ส่วนกรณีใช้อื่นอาจยอมรับค่าที่ช้ากว่าได้
ตัวอย่างนี้แสดงเฉพาะความล่าช้า ไม่ได้ประมาณต้นทุนการบิดเบือน และค่า 85 ใช้ไม่ได้กับค่าเฉลี่ยเรขาคณิต การตรวจจริงต้องเล่นซ้ำสูตรที่ถูกต้องพร้อมข้อมูลพูล สภาพคล่องที่ทำงาน ค่าธรรมเนียม ลำดับบล็อก และสถานะของโปรโตคอล
ความเสี่ยงและมาตรการควบคุม
- ช่วงเวลาสั้นเกินไป: บล็อกที่บิดเบือนเพียงไม่กี่บล็อกอาจทำให้โจมตีมีกำไร ควรเสริมแหล่งหรือตลาด ลดความเสี่ยง หรือใช้ราคาอ้างอิงที่หลากหลายขึ้น
- ช่วงเวลายาวเกินไป: ออราเคิลตามหลังการกระโดดจริง ทำให้ชำระบัญชีช้าเมื่อราคาลงหรือประเมินหลักประกันต่ำเมื่อราคาขึ้น วัดความล่าช้ากรณีเลวร้ายและใช้พารามิเตอร์ระมัดระวัง
- วัดสภาพคล่องผิด: TVL อาจไม่ทำงาน กระจุกตัว แบ่งข้างเดียว หรืออยู่นอกเส้นทางโจมตี ใช้ความลึกที่ซื้อขายได้ ณ tick และราคาที่เกี่ยวข้อง
- ข้อมูลสังเกตการณ์ล้มเหลว: ประวัติไม่พอ ข้อมูลเก่า ความจุไม่เริ่มต้น เวลา พูล หรือทิศทางผิดทำให้สูตรใช้ไม่ได้ ให้ revert หรือเข้าสู่สถานะปลอดภัยที่บันทึกไว้ อย่าแทนค่าเงียบๆ
- แบบจำลองผู้โจมตีไม่ครบ: สภาพคล่องแฟลช ผู้เสนอบล็อกต่อเนื่อง การจัดลำดับ และกำไรข้ามโปรโตคอลลดต้นทุนสุทธิ ต้องทดสอบภาวะกดดัน ไม่ถือว่า “ค่าธรรมเนียมคูณนาที” เป็นหลักฐาน
- ธรรมาภิบาลและตลาดเปลี่ยน: การย้ายสภาพคล่อง เปลี่ยนค่าธรรมเนียม เพิ่มหลักประกัน ขยายเพดาน อัปเกรด หรือเปลี่ยนเชนอาจทำให้ผลเดิมใช้ไม่ได้ ควรเฝ้าดูข้อมูลและตั้งเกณฑ์ทบทวน
- ระบบสำรองล้มเหลว: แหล่งอิสระอาจต่างด้านตลาด ทศนิยม ความล่าช้า และรูปแบบขัดข้อง ต้องระบุว่าจะหยุด ปฏิเสธ จำกัด หรือสลับเมื่อใด และทดสอบบนเชน
ก่อนใช้งาน ให้เผยแพร่หน่วย ทิศทางราคา วิธีเฉลี่ย ช่วงเวลา ประวัติขั้นต่ำ เกณฑ์พูล เพดานความเสี่ยง และพฤติกรรมเมื่อขัดข้อง หลังใช้งานให้เฝ้าดูความเบี่ยงเบนจากราคาอ้างอิงและข้อมูลเศรษฐกิจของแบบจำลองโจมตี
ความเข้าใจผิดที่พบบ่อย
- “ยิ่งยาวยิ่งปลอดภัยเสมอ” ระยะโจมตีอาจเพิ่ม แต่ความล่าช้าก็เพิ่ม และไม่แก้สภาพคล่องอ่อนแอหรือแบบจำลองไม่ครบ
- “TWAP 30 นาทีเป็นหลักประกันของอุตสาหกรรม” ระยะเวลาเป็นเพียงหนึ่งตัวแปร ร่วมกับความลึก สภาพคล่องที่ทำงาน ค่าธรรมเนียม บล็อก สูตร และมูลค่าความเสี่ยง
- “แฟลชโลนกระทบ TWAP ไม่ได้” มันตัดข้อจำกัดเงินทุนในธุรกรรม ผลขึ้นกับการเก็บตัวอย่าง ส่วนของหน้าต่างที่กระทบได้ และตรรกะรอบข้าง
- “TVL สูงแปลว่าต้นทุนบิดเบือนสูง” มีเพียงสภาพคล่องที่ซื้อขายได้บนเส้นทางราคาที่เกี่ยวข้องเท่านั้นที่ต้านธุรกรรมในแบบจำลองโดยตรง
- “TWAP คือราคาตลาดปัจจุบัน” มันเฉลี่ยสถานะบนเชนในอดีตของตลาดหนึ่ง จึงตั้งใจให้ล่าช้าและอาจไม่แทนตลาดโดยรวม
หัวข้อที่เกี่ยวข้อง
แหล่งที่มา
- Uniswap v2 Core - Uniswap (เข้าถึงเมื่อ: 2026-08-21)
- Uniswap v3 Core - Uniswap (เข้าถึงเมื่อ: 2026-08-21)
- Uniswap v3 TWAP Oracles in Proof of Stake - Uniswap Labs (เข้าถึงเมื่อ: 2026-08-21)
- TWAP Oracle Attacks: Easier Done than Said? - IEEE (เข้าถึงเมื่อ: 2026-08-21)