จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
ออราเคิลราคาเฉลี่ยถ่วงน้ำหนักตามเวลาสร้างราคาอ้างอิงจากข้อมูลสะสมในช่วงเวลาที่ระบุ จึงไม่มีสูตรสากลเพียงสูตรเดียว Uniswap v2 สะสมราคาส่วนเพิ่มแบบเชิงเส้นของพูลแยกตามแต่ละทิศทาง ผลต่างของค่าที่ปลายช่วงจึงให้ TWAP แบบเลขคณิต ส่วน Uniswap v3 สะสม tick ซึ่งเป็นพิกัดราคาแบบลอการิทึม ดังนั้น tick เฉลี่ยเลขคณิตจึงแปลงเป็นราคาเปรียบเทียบเฉลี่ยเรขาคณิต
ผลลัพธ์จะมีความหมายต่อเมื่อระบุเชน พูล การติดตั้ง ระดับค่าธรรมเนียม ลำดับโทเค็น ทิศทางสินทรัพย์ฐานและสินทรัพย์อ้างอิง ทศนิยม จุดต้นและปลาย เวลาที่ผ่านไป ประวัติที่บันทึกแล้ว และวิธีปัดเศษ การอ่านสำเร็จไม่ได้พิสูจน์มูลค่ายุติธรรมหรือความลึกที่ซื้อขายได้ หน้าต่างที่ยาวขึ้นลดน้ำหนักการบิดเบือนช่วงสั้นแต่เพิ่มความล่าช้า และไม่ป้องกันการบิดเบือนต่อเนื่อง ช่องว่างของสภาพคล่องแบบกระจุกตัว การควบคุมผู้เสนอหรือซีเควนเซอร์ การจัดระเบียบเชนใหม่ หรือกรณีที่มูลค่าที่ดึงออกจากผู้ใช้ข้อมูลสูงกว่าต้นทุนบิดเบือน
ความใหม่ของข้อมูลสังเกตและความใหม่ของตลาดเป็นคนละเรื่อง ค่าเฉลี่ยที่คำนวณตอนนี้อาจจงใจเก็บสภาวะราคาเก่าไว้ พูลที่ยังทำงานก็อาจมีสภาพคล่องบางหรือหลุดจากตลาดภายนอก ผู้ใช้ข้อมูลจึงต้องตรวจประวัติ สภาพคล่อง และความเบี่ยงเบน กำหนดขีดจำกัดตามการกระทำ และระบุพฤติกรรมเมื่อบริการลดระดับหรือหยุดชั่วคราวอย่างชัดเจน
กลไกการทำงาน
- ระบุเชนและบล็อก โรงงานและที่อยู่พูล รุ่นโปรโตคอลและระดับค่าธรรมเนียม
token0และtoken1ทศนิยม ทิศทางสินทรัพย์ฐานและสินทรัพย์อ้างอิง การกระทำของผู้ใช้ข้อมูล หน้าต่าง และมูลค่าที่มีความเสี่ยง - ระบุปริมาณสะสมและหน่วย ได้แก่
price0Cumulativeหรือprice1Cumulativeแบบเชิงเส้นใน v2,tickCumulativeใน v3 หรือสถิติที่โปรโตคอลอื่นจัดทำเอกสารไว้ ห้ามนำเลขคณิตจากการติดตั้งหนึ่งไปใช้กับอีกการติดตั้ง - ตรวจเวลาที่จุดต้นและปลาย เวลาที่ผ่านไปต้องเป็นบวก ประวัติเก่าสุดที่เริ่มบันทึก จำนวนช่องข้อมูลสังเกตปัจจุบัน และกฎการประมาณค่าระหว่างจุดหรือการคำนวณเสมือน
observationCardinalityNextคือความจุเป้าหมาย ไม่ใช่ประวัติที่บันทึกแล้ว - สำหรับ v2 ให้นำการเปลี่ยนแปลงของราคาสะสมหารด้วยวินาทีที่ผ่านไป แล้วปรับหน่วยเลขจุดคงที่และทศนิยมโทเค็น คำนวณทิศทางราคาแต่ละด้านแยกกัน เพราะ TWAP เลขคณิตด้านกลับโดยทั่วไปไม่ใช่ส่วนกลับของ TWAP ด้านไป
- สำหรับ v3 ให้เรียกอินเทอร์เฟซข้อมูลสังเกตตามเอกสาร นำการเปลี่ยนแปลง tick สะสมหารด้วยหน้าต่าง ปัดผลหารติดลบที่ไม่ลงตัวไปทางลบอนันต์ตาม
OracleLibraryแล้วแปลง tick เฉลี่ยเป็นราคาอ้างอิงที่ปรับหน่วยแล้วด้วยprice = 1.0001^tick - วัดสภาพคล่องที่ใช้งานในช่วง สภาพคล่องเฉลี่ยฮาร์มอนิก สภาพคล่องช่วงกว้าง ระดับค่าธรรมเนียม และสภาพคล่องตลาดภายนอก ทดสอบเส้นทางหนึ่งบล็อกและหลายบล็อก ค่าธรรมเนียม อาร์บิทราจ ลำดับ การปิดกั้น ขาดทุนจากการย้อนธุรกรรม การจัดระเบียบเชนใหม่ ความล่าช้า และมูลค่าที่ดึงจากผู้ใช้ข้อมูลได้
- เปรียบเทียบ TWAP กับราคาทันทีและแหล่งอ้างอิงอิสระภายใต้ขอบเขตความใหม่และความเบี่ยงเบนที่ชัดเจน เฝ้าติดตามประวัติ ช่วงสภาพคล่อง การอัปเกรดพูล และสภาวะเชน พร้อมซ้อมกรณีประวัติไม่พอ ความเบี่ยงเบน การหยุด แหล่งสำรอง การชำระบัญชี และการกู้คืน
Uniswap v2 เก็บค่าสะสมสองค่าตามทิศทางราคาและเพิ่มค่าตามเวลา Uniswap v3 เก็บข้อมูลสังเกตในบัฟเฟอร์วงกลม และสามารถประมาณค่าระหว่างข้อมูลสังเกตหรือสร้างค่าสะสมเสมือนสำหรับเวลาปัจจุบัน จุดปลายที่สร้างขึ้นเหล่านี้ถูกต้องตามเลขคณิตของโปรโตคอล แต่ไม่ได้พิสูจน์ว่ามีการซื้อขายในขณะนั้น การเพิ่มจำนวนช่องสร้างพื้นที่สำหรับข้อมูลในอนาคต ไม่ได้เติมประวัติย้อนหลัง
ตัวอย่างคำนวณ
- ราคาสะสม v2 หาก
C_start = 1,000,000 price-seconds,C_end = 1,360,000 price-secondsและelapsed = 3,600 secondsจะได้TWAP = (1,360,000 - 1,000,000) / 3,600 = 100 quote/baseจุดต้นและปลาย ทิศทาง สเกล และเวลาเป็นส่วนหนึ่งของผลลัพธ์ - กับดักส่วนกลับ ราคาด้านไปเท่ากับ
100เป็นเวลา900 secondsและ400เป็นเวลา900 secondsจึงมี TWAP เลขคณิตเท่ากับ250ราคาทันทีด้านกลับคือ0.01และ0.0025ค่าเฉลี่ยเลขคณิตเท่ากับ0.00625ซึ่งมีส่วนกลับเป็น160ไม่ใช่250การหาค่าเฉลี่ยกับการหาส่วนกลับสลับลำดับกันไม่ได้ - tick เฉลี่ยติดลบ กำหนด
tickCumulativeDelta = -39,601ในช่วง3,600 secondsการหารจำนวนเต็มมีเครื่องหมายของ Solidity ตัดผลเป็น-11และมีเศษ แต่ตัวช่วย v3 ปัดลงเป็นmeanTick = -12ราคาเรขาคณิตสัมพัทธ์คือ1.0001^-12 = 0.998800779636ความผิดพลาดเรื่องเครื่องหมายหรือการปัดเศษจะเอนเอียงด้านราคาอย่างเป็นระบบ - การเจือจางและความล่าช้า พูลอยู่ที่
100เป็นเวลา1,740 secondsและ400เป็นเวลา60 secondsภายในหน้าต่าง1,800-secondTWAP เลขคณิตแบบ v2 คือ(100 * 1,740 + 400 * 60) / 1,800 = 110ส่วนค่าเฉลี่ยเรขาคณิตแบบ v3 คือ100^(29/30) * 400^(1/30) = 104.7294122821ทั้งคู่ต่างจากราคาทันที400และต่างกันเอง โดยไม่มีค่าใดบอกต้นทุนบิดเบือนหรือขนาดที่ซื้อขายได้เพียงลำพัง
ความเสี่ยง
- ระบุเชน โรงงาน พูล ระดับค่าธรรมเนียม การติดตั้ง หรือสถานะการอัปเกรดผิด
- กลับทิศสินทรัพย์ฐานและสินทรัพย์อ้างอิง หรือ
token0กับtoken1 - ใช้ทศนิยมโทเค็น สเกลเลขจุดคงที่ หรือการปรับหน่วยราคาอ้างอิงผิด
- ถือว่าราคาเลขคณิต v2 กับราคาเรขาคณิต v3 เป็นสถิติเดียวกัน
- คำนวณ TWAP เลขคณิตด้านกลับเป็นส่วนกลับของ TWAP ด้านไป
- ใช้จุดปลายสะสม เวลาที่ผ่านไป ขอบเขตหน้าต่าง หรือบล็อกปัจจุบันผิด
- จัดการเวลาเป็นศูนย์ ติดลบ วนรอบ หรือเฉพาะการติดตั้งผิด
- ขอประวัติที่เก่ากว่าข้อมูลสังเกตที่เริ่มบันทึกเก่าสุด
- เข้าใจ
observationCardinalityNextว่าเป็นobservationCardinalityที่บันทึกข้อมูลแล้ว - เข้าใจข้อมูลที่ประมาณค่าหรือคำนวณเสมือนว่าเป็นธุรกรรมจริง
- ปัด tick เฉลี่ยติดลบเข้าหาศูนย์แทนที่จะไปทางลบอนันต์
- แปลง tick ช่วงจำนวนเต็ม ค่าล้น หรือปัดราคาอ้างอิงอย่างไม่ปลอดภัย
- สภาพคล่องที่ใช้งานในช่วงหรือสภาพคล่องฮาร์มอนิกบางเกินไปเมื่อเทียบกับความเสี่ยงที่ป้องกัน
- ไม่มี ถอนออก หรือไม่พิจารณาความลึกช่วงกว้างในการวิเคราะห์การบิดเบือน
- สภาพคล่องกระจายระหว่างพูล ระดับค่าธรรมเนียม เชน หรือตลาดที่มีความสัมพันธ์กัน
- หน้าต่างสั้นยังไวต่อการบิดเบือนหนึ่งบล็อก แบบอะตอม หรือชั่วคราว
- หน้าต่างยาวล่าช้าจากการกำหนดราคาใหม่ การหลุดตรึง หรือการย้ายสภาพคล่องจริง
- ผู้เสนอหลายบล็อก ซีเควนเซอร์ การปิดกั้น ความแออัด MEV หรือการจัดระเบียบเชนใหม่ลดการแก้ราคาหรือเพิ่มการควบคุม
- ถือว่า TWAP เป็นมูลค่ายุติธรรมที่สดใหม่หรือราคาซื้อขายได้ทุกขนาดโดยไม่ตรวจความเบี่ยงเบนและความลึก
- ความเสี่ยงของผู้ใช้ข้อมูลสูงกว่าต้นทุนบิดเบือน ขณะที่แหล่งสำรอง กลไกตัดวงจร การหยุด การชำระบัญชี หรือการกู้คืนไม่ปลอดภัย
ความเข้าใจผิดที่พบบ่อย
- “TWAP หมายถึงค่าเฉลี่ยเลขคณิตของราคาเสมอ” v3 เฉลี่ย tick จึงได้ราคาเปรียบเทียบเฉลี่ยเรขาคณิต
- “ราคาอ้างอิงด้านกลับเท่ากับหนึ่งหารด้วย TWAP ด้านไปเสมอ” สมมาตรนี้ใช้ไม่ได้กับราคาเชิงเส้นที่เฉลี่ยแยกกัน
- “หน้าต่างยาวขึ้นทำให้บิดเบือนไม่ได้” หน้าต่างดังกล่าวแลกความไวต่อการบิดเบือนช่วงสั้นกับความล่าช้า และยังได้รับผลจากการควบคุมต่อเนื่องหรือสภาพคล่องอ่อนแอ
- “การเพิ่มจำนวนช่องสร้างประวัติเพิ่มทันที” เป็นเพียงการเพิ่มความจุในอนาคต ข้อมูลสังเกตต้องเริ่มบันทึกภายหลัง
- “การอ่านออราเคิลล่าสุดสำเร็จพิสูจน์มูลค่าตลาดที่ยุติธรรมและซื้อขายได้” ความสำเร็จของอินเทอร์เฟซไม่ได้ยืนยันความใหม่ทางเศรษฐกิจ ความลึก ความเป็นอิสระ หรือความปลอดภัยของความเสี่ยงผู้ใช้ข้อมูล
หัวข้อที่เกี่ยวข้อง
แหล่งข้อมูล
- Uniswap v2 Core - Uniswap (เข้าถึงเมื่อ: 2026-08-13)
- Oracles - Uniswap Developers (เข้าถึงเมื่อ: 2026-08-13)
- Uniswap v3 Core - Uniswap (เข้าถึงเมื่อ: 2026-08-13)
- Price Oracles - Uniswap Developers (เข้าถึงเมื่อ: 2026-08-13)
- Oracle.sol - Uniswap v3 Core (เข้าถึงเมื่อ: 2026-08-13)
- OracleLibrary.sol - Uniswap v3 Periphery (เข้าถึงเมื่อ: 2026-08-13)
- Uniswap v3 TWAP Oracles in Proof of Stake - Uniswap Labs (เข้าถึงเมื่อ: 2026-08-13)
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security (เข้าถึงเมื่อ: 2026-08-13)