จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
ค่าออราเคิลล้าสมัยสำหรับการกระทำหนึ่งของผู้ใช้ข้อมูลเมื่อ age = consumerClock - sourceTimestamp มากกว่า maxAge ที่กำหนดไว้สำหรับการกระทำนั้น ราคาที่ไม่เปลี่ยนแปลงยังอาจเป็นข้อมูลปัจจุบัน ส่วนค่าที่เพิ่งเผยแพร่ก็ยังอาจผิดจากสภาพเศรษฐกิจ ผู้ใช้ข้อมูลจึงต้องปฏิเสธเวลาที่ไม่มีค่า อยู่ในอนาคต หรือคำตอบที่ไม่ถูกต้องก่อน แล้วจึงใช้นโยบายยอมรับที่เจาะจงกับฟีด สินทรัพย์ เชน เวลาทำการของตลาด และการกระทำ
รอบการอัปเดตตามเวลาและเกณฑ์ความเบี่ยงเบนเป็นตัวกระตุ้นการเผยแพร่ ไม่ใช่หลักประกันความสดใหม่หรือข้อตกลงระดับบริการ รายงานอาจล่าช้าหลังตัวกระตุ้นทำงาน และตลาดอาจเคลื่อนไหวต่ำกว่าเกณฑ์ความเบี่ยงเบนทั้งที่การกระทำต้องใช้อายุสูงสุดที่เข้มงวดกว่า ออราเคิลแบบดึงเพิ่มขอบเขตอีกชั้นหนึ่ง กล่าวคือผู้เรียกอาจต้องส่งข้อมูลอัปเดตที่ยืนยันแหล่งที่มาก่อนอ่าน และสัญญาต้องปฏิเสธข้อมูลที่เก่ากว่าขีดจำกัดที่ระบุ
บน L2 สถานะซีเควนเซอร์และระยะผ่อนผันหลังฟื้นตัวเป็นด่านแยกต่างหาก การผ่านด่านนี้ไม่ได้พิสูจน์ว่าราคาสินทรัพย์ยังใหม่ สถานะ L2 ถึงที่สุดแล้ว หรือผู้ใช้ทุกคนเข้าถึงได้เท่าเทียม ราคาแหล่งสำรองและราคาดีล่าสุดเป็นโหมดลดระดับบริการอย่างมีการควบคุม ไม่ใช่ค่าความจริง แหล่งข้อมูลและเส้นทางกู้คืนทุกเส้นจึงต้องกำหนดหน่วย เวลา ความเป็นอิสระ อำนาจ การกระทำที่อนุญาต และกฎกระทบยอด
กลไกการทำงาน
- ระบุเชน บล็อกและนาฬิกา สัญญาและการกระทำของผู้ใช้ข้อมูล พร็อกซีและแอกกรีเกเตอร์ของฟีด คู่สินทรัพย์และทศนิยม รุ่นอินเทอร์เฟซ การตั้งค่าแหล่งสำรอง และสถานะการอัปเกรดให้ชัดเจน
- อ่านค่าตอบกลับตามอินเทอร์เฟซที่ติดตั้งจริงและรองรับกรณีเรียกย้อนกลับหรือไม่มีข้อมูล ตรวจสอบคำตอบ สถานะหรือค่าความเชื่อมั่นเมื่อเกี่ยวข้อง รวมทั้ง
sourceTimestamp != 0และsourceTimestamp <= consumerClockก่อนลบค่า - บันทึกรอบการอัปเดต เกณฑ์ความเบี่ยงเบน เวลาทำการตลาด และการตั้งค่าเผยแพร่ แล้วกำหนด
maxAgeแยกสำหรับแต่ละการกระทำ ระบุขอบเขตให้ชัด เช่น ยอมรับage <= maxAgeและปฏิเสธage > maxAge - บน L2 ที่รองรับ ให้ตรวจสอบการเริ่มต้นและสถานะของฟีดซีเควนเซอร์ คำนวณเวลาหลังฟื้นตัวจากฟิลด์ที่เอกสารระบุ และบังคับใช้ระยะผ่อนผันที่กำหนด ก่อนตรวจความสดใหม่ของราคาแยกต่างหาก
- ติดตามทุกองค์ประกอบที่จำเป็นของราคาแบบประกอบ ราคาอัตราส่วน และราคาสำรอง ปรับทิศทางและหน่วยให้เป็นมาตรฐาน และจำกัดความสดใหม่ที่มีผลด้วยองค์ประกอบจำเป็นที่เก่าที่สุด ไม่ใช่เวลาล่าสุด
- กำหนดสถานะปกติ ลดระดับ และหยุดชั่วคราวแยกตามการกระทำ การกู้ใหม่ การสร้างสินทรัพย์ หรือการเพิ่มเลเวอเรจอาจถูกปิด ขณะที่ยังอนุญาตการชำระหนี้หรือเพิ่มหลักประกัน ทดสอบราคาล้าสมัย ราคาสำรอง และราคาหลังฟื้นตัวกับความเสี่ยง สภาพคล่อง และขีดความสามารถของผู้ชำระบัญชี
- เฝ้าติดตามการเปลี่ยนแปลงแหล่งข้อมูลและพร็อกซี ความล่าช้า อัตราการปฏิเสธ สถานะซีเควนเซอร์ ความต่างระหว่างแหล่ง และเวลาทำการตลาด พร้อมซ้อมเหตุขัดข้อง แหล่งสำรองล้มเหลว ราคากระโดดหลังฟื้นตัว การชำระบัญชีกระจุกตัว MEV การบันทึกหนี้สูญ และการกลับสู่โหมดปกติ
สำหรับอินเทอร์เฟซแบบ Chainlink ฟังก์ชัน latestRoundData() อาจแสดงรหัสรอบ คำตอบที่มีเครื่องหมาย เวลาเริ่ม เวลาปรับปรุง และฟิลด์รอบแบบเดิม API ปัจจุบันระบุว่า answeredInRound เลิกใช้แล้ว จึงไม่ควรนำการตรวจอสมการในอดีตมาเป็นกฎสากลในปัจจุบัน ต้องตรวจพร็อกซี แอกกรีเกเตอร์ และการติดตั้งจริง เวลาอัปเดตบอกเพียงว่าระบบปรับสถานะฟีดตามเอกสารเมื่อใด ไม่ได้หมายความว่าราคานั้นซื้อขายได้ทุกขนาด ส่วน block.timestamp ใน Solidity คือเวลาของบล็อกปัจจุบันภายใต้ข้อจำกัดฉันทามติ ไม่ใช่ออราเคิลเวลาภายนอก
ตัวอย่างคำนวณ
- ขอบเขตอายุสูงสุด กำหนด
consumerClock = 1,800,000,000และsourceTimestamp = 1,799,999,100จึงได้age = 900 seconds = 15 minutesนโยบายmaxAge = 600 secondsปฏิเสธเพราะเกิน300 secondsส่วนนโยบายmaxAge = 1,200 secondsยอมรับโดยเหลือระยะ300 secondsค่าจากฟีดเดียวกันจึงอาจใช้ได้กับการกระทำหนึ่งแต่ล้าสมัยสำหรับอีกการกระทำ - ตัวกระตุ้นไม่ใช่ความสดใหม่ ราคาที่เผยแพร่ล่าสุดคือ
100.00เกณฑ์ความเบี่ยงเบนคือ1%และรอบการอัปเดตคือ3,600 secondsหลัง2,700 secondsราคาตลาดที่สังเกตได้100.80ต่างเพียง0.8%จึงยังไม่เข้าเงื่อนไขตัวกระตุ้นตัวอย่าง เมื่อราคาเป็น101.20ความเบี่ยงเบนเท่ากับ1.2%และอาจเริ่มเผยแพร่ แต่ผู้ใช้ข้อมูลยังอ่าน100.00จนกว่ารายงานใหม่ที่ถูกต้องจะรวมอยู่บนเชน - ด่านสองชั้นบน L2 ฟีดรายงานว่าซีเควนเซอร์ทำงาน โดยมี
startedAt = 1,799,996,400,consumerClock = 1,800,000,000และgrace = 3,600 secondsเวลาที่ผ่านไปจึงเท่ากับ3,600 secondsพอดี ภายใต้นโยบายที่ปิดกั้นขณะelapsed <= graceการกระทำยังถูกปิดและจะเริ่มมีสิทธิ์เมื่อ3,601 secondsทั้งนี้ยังต้องผ่านการตรวจเวลาราคา คำตอบ และเงื่อนไขอื่นของผู้ใช้ข้อมูลแยกต่างหาก - ราคากระโดดหลังฟื้นตัว หากมีหลักประกัน
10 ETHหนี้12,000 USDและเกณฑ์ชำระบัญชี75%ราคาเก่า2,000 USD/ETHให้healthFactor = 10 * 2,000 * 0.75 / 12,000 = 1.25เมื่อราคากลับมาเป็น1,400 USD/ETHค่าจะเป็น0.875บัญชีจึงเข้าเงื่อนไขชำระบัญชีตามข้อมูลตัวอย่าง แต่การดำเนินการจริงยังขึ้นกับกฎโปรโตคอล สภาพคล่อง ผู้ชำระบัญชี ค่าแก๊ส ลำดับ และความพร้อมของเชน
ความเสี่ยง
- เลือกเชน ฟีด พร็อกซี แอกกรีเกเตอร์ คู่สินทรัพย์ หรือรุ่นอินเทอร์เฟซผิด
- ผู้ใช้ข้อมูลอ่านคำตอบโดยไม่มีเวลาอัปเดตหรือสถานะตามเอกสาร
- ไม่ปฏิเสธเวลาศูนย์ เวลาในอนาคต หรือไม่ป้องกันค่าติดลบจากการลบ
- อายุสูงสุดผ่อนปรนเกินไปสำหรับสินทรัพย์ การกระทำ เวลาตลาด หรือความผันผวน
- อายุสูงสุดเข้มงวดเกินไปจนทำให้บริการล้มเหลวหรือขัดขวางการลดความเสี่ยง
- เข้าใจรอบการอัปเดตว่าเป็นเส้นตายเผยแพร่ที่รับประกันหรือข้อตกลงระดับบริการ
- การเคลื่อนตัวหรือส่วนต่างฐานต่ำกว่าเกณฑ์สะสมโดยไม่กระตุ้นการเผยแพร่
- รายงานที่ถูกกระตุ้นล่าช้าเพราะแหล่งข้อมูล ผู้ลงนาม เครือข่าย ค่าแก๊ส ตัวส่งต่อ หรือเชนล้มเหลว
- นำการตรวจรอบที่เลิกใช้หรือเฉพาะการติดตั้งไปใช้กับทุกกรณี
- ไม่พบการเปลี่ยนแปลงฟีด พร็อกซี แอกกรีเกเตอร์ รอบเวลา เกณฑ์ความเบี่ยงเบน หรืออินเทอร์เฟซ
- ละเลยความหมายของตลาดปิด วันหยุด ตลาดพักการซื้อขาย หรือข้อมูลที่ยกยอดมา
- ราคาแบบประกอบหรืออัตราส่วนดูใหม่ ทั้งที่องค์ประกอบจำเป็นหนึ่งตัวล้าสมัย
- ละเลยสถานะซีเควนเซอร์ L2 สถานะยังไม่เริ่มต้น ล่าช้า หรืออ่านจากเครือข่ายผิด
- ไม่มีระยะผ่อนผัน ตั้งค่าผิด หรือผิดขอบเขตหนึ่งหน่วย
- สถานะซีเควนเซอร์ผ่าน แต่ราคาสินทรัพย์ยังล้าสมัยหรือใช้ไม่ได้
- ปะปนเวลา L1 เวลาบล็อก L2 เวลาสังเกต เวลาเผยแพร่ และเวลาจริง
- ไม่มีข้อมูลอัปเดตแบบดึง ข้อมูลเก่า ถูกเลือกเฉพาะ บิดเบี้ยว หรือมีเงินค่าธรรมเนียมไม่พอ
- ราคาสำรองหรือราคาดีล่าสุดล้าสมัย มีความสัมพันธ์ ใช้สเกลต่างกัน หรืออ้างอิงวนกลับ
- การเปิดเมื่อขัดข้องอนุญาตการกระทำไม่ปลอดภัย ส่วนการปิดทั้งหมดขวางการชำระหนี้ เพิ่มหลักประกัน หรือกู้คืนอย่างเป็นระเบียบ
- ราคากระโดด การชำระบัญชีกระจุกตัว MEV สภาพคล่องบาง การแย่งหยุดระบบ หรือการกระทบยอดหนี้สูญสร้างความเสียหายต่อเนื่อง
ความเข้าใจผิดที่พบบ่อย
- “รอบการอัปเดตรับประกันข้อมูลใหม่ทุกช่วงเวลา” นี่เป็นเพียงตัวกระตุ้นการอัปเดต การล้มเหลวของแหล่งข้อมูลหรือเชนยังทำให้เผยแพร่ล่าช้าได้
- “เวลาอัปเดตล่าสุดพิสูจน์ว่าราคาถูกต้องและซื้อขายได้” เวลาดังกล่าวพิสูจน์เฉพาะเวลาปรับปรุงตามเอกสาร ส่วนคุณภาพแหล่ง หน่วย ความเชื่อมั่น ความลึกตลาด และตรรกะผู้ใช้ข้อมูลยังแยกกัน
- “อายุสูงสุดค่าเดียวเหมาะกับทุกฟีดและการกระทำ” สินทรัพย์ เวลาตลาด เชน และการกู้ การชำระบัญชี การซื้อขาย และการชำระราคามีข้อกำหนดเรื่องความล่าช้าและความพร้อมต่างกัน
- “ซีเควนเซอร์ทำงานแล้วหมายถึงทุกการกระทำเริ่มต่อได้ทันที” ระยะผ่อนผันและความสดใหม่ของราคาเป็นคนละด่าน และนโยบายโปรโตคอลหรือเชนอาจเพิ่มเงื่อนไขอื่น
- “แหล่งสำรองหรือทำให้ทุกฟังก์ชันย้อนกลับปลอดภัยที่สุดเสมอ” แหล่งสำรองที่อ่อนแอตีราคาความเสี่ยงผิด ส่วนการปิดทั้งหมดอาจขวางผู้ใช้ไม่ให้ชำระหนี้หรือเพิ่มอัตราหลักประกัน
หัวข้อที่เกี่ยวข้อง
แหล่งข้อมูล
- Chainlink Data Feeds - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- Data Feeds API Reference - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- Developer Responsibilities - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- L2 Sequencer Uptime Feeds - Chainlink Documentation (เข้าถึงเมื่อ: 2026-08-13)
- How to Use Real-Time Data in EVM Contracts - Pyth Developer Hub (เข้าถึงเมื่อ: 2026-08-13)
- Best Practices - Pyth Developer Hub (เข้าถึงเมื่อ: 2026-08-13)
- Units and Globally Available Variables - Solidity Documentation (เข้าถึงเมื่อ: 2026-08-13)
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security (เข้าถึงเมื่อ: 2026-08-13)