﻿---
title: "ออราเคิล TWAP"
description: "ออราเคิล TWAP สร้างราคาอ้างอิงถ่วงน้ำหนักตามเวลาจากข้อมูลสะสมที่เฉพาะกับโปรโตคอล ราคาเฉลี่ยเลขคณิตของ v2 และ tick เฉลี่ยของ v3 มีขอบเขตด้านคณิตศาสตร์ ประวัติ สภาพคล่อง และการบิดเบือนต่างกัน"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ออราเคิล TWAP

> จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้

<a id="answer"></a>

## คำตอบโดยตรง

ออราเคิลราคาเฉลี่ยถ่วงน้ำหนักตามเวลาสร้างราคาอ้างอิงจากข้อมูลสะสมในช่วงเวลาที่ระบุ จึงไม่มีสูตรสากลเพียงสูตรเดียว Uniswap v2 สะสมราคาส่วนเพิ่มแบบเชิงเส้นของพูลแยกตามแต่ละทิศทาง ผลต่างของค่าที่ปลายช่วงจึงให้ TWAP แบบเลขคณิต ส่วน Uniswap v3 สะสม tick ซึ่งเป็นพิกัดราคาแบบลอการิทึม ดังนั้น tick เฉลี่ยเลขคณิตจึงแปลงเป็นราคาเปรียบเทียบเฉลี่ยเรขาคณิต

ผลลัพธ์จะมีความหมายต่อเมื่อระบุเชน พูล การติดตั้ง ระดับค่าธรรมเนียม ลำดับโทเค็น ทิศทางสินทรัพย์ฐานและสินทรัพย์อ้างอิง ทศนิยม จุดต้นและปลาย เวลาที่ผ่านไป ประวัติที่บันทึกแล้ว และวิธีปัดเศษ การอ่านสำเร็จไม่ได้พิสูจน์มูลค่ายุติธรรมหรือความลึกที่ซื้อขายได้ หน้าต่างที่ยาวขึ้นลดน้ำหนักการบิดเบือนช่วงสั้นแต่เพิ่มความล่าช้า และไม่ป้องกันการบิดเบือนต่อเนื่อง ช่องว่างของสภาพคล่องแบบกระจุกตัว การควบคุมผู้เสนอหรือซีเควนเซอร์ การจัดระเบียบเชนใหม่ หรือกรณีที่มูลค่าที่ดึงออกจากผู้ใช้ข้อมูลสูงกว่าต้นทุนบิดเบือน

ความใหม่ของข้อมูลสังเกตและความใหม่ของตลาดเป็นคนละเรื่อง ค่าเฉลี่ยที่คำนวณตอนนี้อาจจงใจเก็บสภาวะราคาเก่าไว้ พูลที่ยังทำงานก็อาจมีสภาพคล่องบางหรือหลุดจากตลาดภายนอก ผู้ใช้ข้อมูลจึงต้องตรวจประวัติ สภาพคล่อง และความเบี่ยงเบน กำหนดขีดจำกัดตามการกระทำ และระบุพฤติกรรมเมื่อบริการลดระดับหรือหยุดชั่วคราวอย่างชัดเจน

<a id="mechanism"></a>

## กลไกการทำงาน

1. ระบุเชนและบล็อก โรงงานและที่อยู่พูล รุ่นโปรโตคอลและระดับค่าธรรมเนียม `token0` และ `token1` ทศนิยม ทิศทางสินทรัพย์ฐานและสินทรัพย์อ้างอิง การกระทำของผู้ใช้ข้อมูล หน้าต่าง และมูลค่าที่มีความเสี่ยง
2. ระบุปริมาณสะสมและหน่วย ได้แก่ `price0Cumulative` หรือ `price1Cumulative` แบบเชิงเส้นใน v2, `tickCumulative` ใน v3 หรือสถิติที่โปรโตคอลอื่นจัดทำเอกสารไว้ ห้ามนำเลขคณิตจากการติดตั้งหนึ่งไปใช้กับอีกการติดตั้ง
3. ตรวจเวลาที่จุดต้นและปลาย เวลาที่ผ่านไปต้องเป็นบวก ประวัติเก่าสุดที่เริ่มบันทึก จำนวนช่องข้อมูลสังเกตปัจจุบัน และกฎการประมาณค่าระหว่างจุดหรือการคำนวณเสมือน `observationCardinalityNext` คือความจุเป้าหมาย ไม่ใช่ประวัติที่บันทึกแล้ว
4. สำหรับ v2 ให้นำการเปลี่ยนแปลงของราคาสะสมหารด้วยวินาทีที่ผ่านไป แล้วปรับหน่วยเลขจุดคงที่และทศนิยมโทเค็น คำนวณทิศทางราคาแต่ละด้านแยกกัน เพราะ TWAP เลขคณิตด้านกลับโดยทั่วไปไม่ใช่ส่วนกลับของ TWAP ด้านไป
5. สำหรับ v3 ให้เรียกอินเทอร์เฟซข้อมูลสังเกตตามเอกสาร นำการเปลี่ยนแปลง tick สะสมหารด้วยหน้าต่าง ปัดผลหารติดลบที่ไม่ลงตัวไปทางลบอนันต์ตาม `OracleLibrary` แล้วแปลง tick เฉลี่ยเป็นราคาอ้างอิงที่ปรับหน่วยแล้วด้วย `price = 1.0001^tick`
6. วัดสภาพคล่องที่ใช้งานในช่วง สภาพคล่องเฉลี่ยฮาร์มอนิก สภาพคล่องช่วงกว้าง ระดับค่าธรรมเนียม และสภาพคล่องตลาดภายนอก ทดสอบเส้นทางหนึ่งบล็อกและหลายบล็อก ค่าธรรมเนียม อาร์บิทราจ ลำดับ การปิดกั้น ขาดทุนจากการย้อนธุรกรรม การจัดระเบียบเชนใหม่ ความล่าช้า และมูลค่าที่ดึงจากผู้ใช้ข้อมูลได้
7. เปรียบเทียบ TWAP กับราคาทันทีและแหล่งอ้างอิงอิสระภายใต้ขอบเขตความใหม่และความเบี่ยงเบนที่ชัดเจน เฝ้าติดตามประวัติ ช่วงสภาพคล่อง การอัปเกรดพูล และสภาวะเชน พร้อมซ้อมกรณีประวัติไม่พอ ความเบี่ยงเบน การหยุด แหล่งสำรอง การชำระบัญชี และการกู้คืน

Uniswap v2 เก็บค่าสะสมสองค่าตามทิศทางราคาและเพิ่มค่าตามเวลา Uniswap v3 เก็บข้อมูลสังเกตในบัฟเฟอร์วงกลม และสามารถประมาณค่าระหว่างข้อมูลสังเกตหรือสร้างค่าสะสมเสมือนสำหรับเวลาปัจจุบัน จุดปลายที่สร้างขึ้นเหล่านี้ถูกต้องตามเลขคณิตของโปรโตคอล แต่ไม่ได้พิสูจน์ว่ามีการซื้อขายในขณะนั้น การเพิ่มจำนวนช่องสร้างพื้นที่สำหรับข้อมูลในอนาคต ไม่ได้เติมประวัติย้อนหลัง

<a id="example"></a>

## ตัวอย่างคำนวณ

- **ราคาสะสม 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-second` TWAP เลขคณิตแบบ v2 คือ `(100 * 1,740 + 400 * 60) / 1,800 = 110` ส่วนค่าเฉลี่ยเรขาคณิตแบบ v3 คือ `100^(29/30) * 400^(1/30) = 104.7294122821` ทั้งคู่ต่างจากราคาทันที `400` และต่างกันเอง โดยไม่มีค่าใดบอกต้นทุนบิดเบือนหรือขนาดที่ซื้อขายได้เพียงลำพัง

<a id="risks"></a>

## ความเสี่ยง

- ระบุเชน โรงงาน พูล ระดับค่าธรรมเนียม การติดตั้ง หรือสถานะการอัปเกรดผิด
- กลับทิศสินทรัพย์ฐานและสินทรัพย์อ้างอิง หรือ `token0` กับ `token1`
- ใช้ทศนิยมโทเค็น สเกลเลขจุดคงที่ หรือการปรับหน่วยราคาอ้างอิงผิด
- ถือว่าราคาเลขคณิต v2 กับราคาเรขาคณิต v3 เป็นสถิติเดียวกัน
- คำนวณ TWAP เลขคณิตด้านกลับเป็นส่วนกลับของ TWAP ด้านไป
- ใช้จุดปลายสะสม เวลาที่ผ่านไป ขอบเขตหน้าต่าง หรือบล็อกปัจจุบันผิด
- จัดการเวลาเป็นศูนย์ ติดลบ วนรอบ หรือเฉพาะการติดตั้งผิด
- ขอประวัติที่เก่ากว่าข้อมูลสังเกตที่เริ่มบันทึกเก่าสุด
- เข้าใจ `observationCardinalityNext` ว่าเป็น `observationCardinality` ที่บันทึกข้อมูลแล้ว
- เข้าใจข้อมูลที่ประมาณค่าหรือคำนวณเสมือนว่าเป็นธุรกรรมจริง
- ปัด tick เฉลี่ยติดลบเข้าหาศูนย์แทนที่จะไปทางลบอนันต์
- แปลง tick ช่วงจำนวนเต็ม ค่าล้น หรือปัดราคาอ้างอิงอย่างไม่ปลอดภัย
- สภาพคล่องที่ใช้งานในช่วงหรือสภาพคล่องฮาร์มอนิกบางเกินไปเมื่อเทียบกับความเสี่ยงที่ป้องกัน
- ไม่มี ถอนออก หรือไม่พิจารณาความลึกช่วงกว้างในการวิเคราะห์การบิดเบือน
- สภาพคล่องกระจายระหว่างพูล ระดับค่าธรรมเนียม เชน หรือตลาดที่มีความสัมพันธ์กัน
- หน้าต่างสั้นยังไวต่อการบิดเบือนหนึ่งบล็อก แบบอะตอม หรือชั่วคราว
- หน้าต่างยาวล่าช้าจากการกำหนดราคาใหม่ การหลุดตรึง หรือการย้ายสภาพคล่องจริง
- ผู้เสนอหลายบล็อก ซีเควนเซอร์ การปิดกั้น ความแออัด MEV หรือการจัดระเบียบเชนใหม่ลดการแก้ราคาหรือเพิ่มการควบคุม
- ถือว่า TWAP เป็นมูลค่ายุติธรรมที่สดใหม่หรือราคาซื้อขายได้ทุกขนาดโดยไม่ตรวจความเบี่ยงเบนและความลึก
- ความเสี่ยงของผู้ใช้ข้อมูลสูงกว่าต้นทุนบิดเบือน ขณะที่แหล่งสำรอง กลไกตัดวงจร การหยุด การชำระบัญชี หรือการกู้คืนไม่ปลอดภัย

<a id="misconceptions"></a>

## ความเข้าใจผิดที่พบบ่อย

- **"TWAP หมายถึงค่าเฉลี่ยเลขคณิตของราคาเสมอ"** v3 เฉลี่ย tick จึงได้ราคาเปรียบเทียบเฉลี่ยเรขาคณิต
- **"ราคาอ้างอิงด้านกลับเท่ากับหนึ่งหารด้วย TWAP ด้านไปเสมอ"** สมมาตรนี้ใช้ไม่ได้กับราคาเชิงเส้นที่เฉลี่ยแยกกัน
- **"หน้าต่างยาวขึ้นทำให้บิดเบือนไม่ได้"** หน้าต่างดังกล่าวแลกความไวต่อการบิดเบือนช่วงสั้นกับความล่าช้า และยังได้รับผลจากการควบคุมต่อเนื่องหรือสภาพคล่องอ่อนแอ
- **"การเพิ่มจำนวนช่องสร้างประวัติเพิ่มทันที"** เป็นเพียงการเพิ่มความจุในอนาคต ข้อมูลสังเกตต้องเริ่มบันทึกภายหลัง
- **"การอ่านออราเคิลล่าสุดสำเร็จพิสูจน์มูลค่าตลาดที่ยุติธรรมและซื้อขายได้"** ความสำเร็จของอินเทอร์เฟซไม่ได้ยืนยันความใหม่ทางเศรษฐกิจ ความลึก ความเป็นอิสระ หรือความปลอดภัยของความเสี่ยงผู้ใช้ข้อมูล

<a id="related"></a>

## หัวข้อที่เกี่ยวข้อง

- [ผู้ดูแลสภาพคล่องอัตโนมัติ](/th/crypto/amm/)
- [การโจมตีออราเคิล](/th/crypto/oracle-attack/)
- [ราคาออราเคิลล้าสมัย](/th/crypto/oracle-price-staleness/)

<a id="sources"></a>

## แหล่งข้อมูล

- [Uniswap v2 Core](https://app.uniswap.org/whitepaper.pdf) - Uniswap (เข้าถึงเมื่อ: 2026-08-13)
- [Oracles](https://developers.uniswap.org/docs/protocols/v2/concepts/oracles) - Uniswap Developers (เข้าถึงเมื่อ: 2026-08-13)
- [Uniswap v3 Core](https://uniswap.org/whitepaper-v3.pdf) - Uniswap (เข้าถึงเมื่อ: 2026-08-13)
- [Price Oracles](https://developers.uniswap.org/docs/protocols/v3/concepts/price-oracles) - Uniswap Developers (เข้าถึงเมื่อ: 2026-08-13)
- [Oracle.sol](https://github.com/Uniswap/v3-core/blob/main/contracts/libraries/Oracle.sol) - Uniswap v3 Core (เข้าถึงเมื่อ: 2026-08-13)
- [OracleLibrary.sol](https://github.com/Uniswap/v3-periphery/blob/main/contracts/libraries/OracleLibrary.sol) - Uniswap v3 Periphery (เข้าถึงเมื่อ: 2026-08-13)
- [Uniswap v3 TWAP Oracles in Proof of Stake](https://blog.uniswap.org/uniswap-v3-oracles) - Uniswap Labs (เข้าถึงเมื่อ: 2026-08-13)
- [SC03:2026 Price Oracle Manipulation](https://scs.owasp.org/sctop10/SC03-PriceOracleManipulation/) - OWASP Smart Contract Security (เข้าถึงเมื่อ: 2026-08-13)

Source: https://wiki.fcontext.com/th/crypto/oracle-twap/index.mdx
