ออราเคิลราคา DeFi รวมและเผยแพร่ราคาอย่างไร
เรียนรู้การรวมข้อมูลสังเกตการณ์ เงื่อนไขอัปเดตจาก heartbeat และ deviation การตรวจหน่วยและข้อมูลเก่า ตลอดจนข้อจำกัดของการตรวจ sequencer บน L2
ในคู่มือนี้ออราเคิลเผยแพร่ค่าอ้างอิง ไม่ใช่ราคาที่รับประกันว่าจะซื้อขายได้
สรุปสั้น
ออราเคิลราคานำค่าอ้างอิงจากภายนอกเข้าสู่สมาร์ตคอนแทรกต์ ในรูปแบบ push feed ที่พบได้ทั่วไป ข้อมูลสังเกตการณ์หลายรายการนอกเชนจะถูกรวมเป็นรายงานที่ลงนาม เผยแพร่บนเชน แล้วโปรโตคอลอ่านคำตอบล่าสุด ค่าเบี่ยงเบนและ heartbeat มีผลต่อเวลาการเผยแพร่ ส่วนผู้ใช้ข้อมูลต้องตรวจ decimals หน่วยสกุลอ้างอิง `updatedAt` และสถานะ sequencer บน L2 บางเครือข่าย การควบคุมเหล่านี้ลดความเสี่ยงเฉพาะด้าน แต่ไม่ได้พิสูจน์ว่าราคาถูกต้อง ใหม่พอสำหรับทุกงาน หรือปลอดภัยสำหรับทุกธุรกรรม
ออราเคิลเผยแพร่ค่าอ้างอิง ไม่ใช่ราคาที่รับประกันว่าจะซื้อขายได้
ออราเคิลเชื่อมข้อมูลนอกบล็อกเชนเข้ากับโค้ดที่ทำงานบนเชน โปรโตคอลให้กู้อาจอ่านฟีดเพื่อประเมินหลักประกัน ส่วนสัญญาอนุพันธ์อาจใช้ค่าอ้างอิงเพื่อชำระราคาและควบคุมความเสี่ยง สัญญาอ่านค่าที่บันทึกในสถานะเชน แต่ไม่ได้ตรวจ order book ภายนอกทั้งหมดเพื่อเลือกว่าราคาใดยุติธรรมเอง
คำว่า “ราคา” อาจหมายถึงคู่สินทรัพย์กับสกุลเงินอ้างอิง อัตราแลกคืนที่โปรโตคอลกำหนด หรือค่าชนิดอื่น ไม่ได้หมายถึงราคาที่ขายสถานะขนาดใหญ่ได้โดยอัตโนมัติ อ่าน คู่มือผลกระทบด้านราคาและ slippage ของ DEX swap และ mark price เทียบกับราคาซื้อขายล่าสุด เพิ่มเติม บทความนี้เน้น push feed บน EVM ที่ใช้ทั่วไป ไม่ใช่กฎเดียวของ DeFi ทั้งหมด
ข้อมูลสังเกตการณ์กลายเป็นคำตอบบนเชนได้อย่างไร
ใน Offchain Reporting ของ Chainlink โหนดออราเคิลแลกเปลี่ยนข้อมูลสังเกตการณ์นอกเชนและตกลงเรื่องรายงาน ควอรัมลงนาม ผู้ส่งส่งธุรกรรม และ aggregator ตรวจลายเซ็นก่อนเปิดเผยคำตอบ หมายเลขรอบ และเวลา เอกสาร Offchain Reporting อธิบายว่าระบบเผยแพร่ค่ามัธยฐานของข้อมูลสังเกตการณ์อย่างไร
สัญญาผู้ใช้มักไม่รวมข้อมูลใหม่ทั้งหมด แต่เรียก latestRoundData() จากที่อยู่ proxy ของฟีด aggregator ที่อยู่หลัง proxy อาจเปลี่ยนได้ ตรวจเครือข่ายและฟีดใน คู่มือ EVM และ เอกสาร API โหนดจำนวนมากไม่ได้รับรองว่าแหล่งข้อมูลเป็นอิสระ เพราะอาจใช้ตลาดหรือผู้ให้บริการเดียวกัน

Heartbeat และ deviation กำหนดเงื่อนไขการเผยแพร่
push feed หลายรายการใช้ทั้งค่า deviation และ heartbeat การเปลี่ยนแปลงเป็นเปอร์เซ็นต์ที่กำหนดจากคำตอบล่าสุดอาจเรียกรายงานใหม่ ส่วน heartbeat อาจขออัปเดตเมื่อเวลาผ่านไปแม้ราคาไม่เปลี่ยนมาก รายการ Data Feeds ปัจจุบัน และ หน้าที่อยู่ของฟีด แสดงค่าตามสินทรัพย์ เครือข่าย และฟีด
นี่คือเงื่อนไขเฉพาะฟีด ไม่ใช่คำมั่นว่าจะอัปเดตทุก N วินาที การเปลี่ยนเล็กน้อยอาจไม่ถึงค่า deviation และรายงานที่ร้องขอยังต้องรวบรวม ส่ง และรวมเข้าในบล็อก heartbeat จึงไม่ได้รับรองเวลามาถึงที่แน่นอนหรือป้องกันข้อมูลเก่า โปรโตคอลต้องกำหนดอายุสูงสุดที่ยอมรับได้ตามความผันผวนและการใช้งาน
อ่าน answer, decimals และหน่วยสกุลอ้างอิงให้ถูกต้อง
latestRoundData() คืนหมายเลขรอบ answer, startedAt, updatedAt และ answeredInRound; เอกสาร API ระบุว่าฟิลด์สุดท้ายเลิกแนะนำแล้ว answer เป็นจำนวนเต็มแบบ fixed-point ไม่จำเป็นต้องเป็นจำนวนดอลลาร์ที่อ่านได้ทันที อ่าน decimals() และคำอธิบายของฟีดนั้น ตัวอย่างสมมติฟีด BTC/USD ที่มี 8 decimals และคืน 6,725,000,000,000 หมายถึง $67,250 ต่อ BTC
decimals ของฟีดกับ decimals ของโทเคนเป็นคนละหน่วย ปริมาณ ERC-20 อาจใช้ 18 decimals แต่คำตอบราคาใช้ 8 จึงต้องปรับสเกลแต่ละค่าตามหน่วยของตัวเองก่อนคูณ BTC/USD หมายถึงดอลลาร์ต่อบิตคอยน์ ส่วน USD/BTC เป็นหน่วยกลับกัน การคำนวณคู่ราคาอนุพันธ์ต้องปรับสเกลทั้งสองฟีดและหารตามลำดับที่ถูกต้อง ตัวอย่างเปลี่ยนหน่วยราคา แสดง BTC/EUR จาก BTC/USD และ EUR/USD
การตรวจข้อมูลเก่าเป็นกฎของแอปพลิเคชัน
updatedAt ระบุเวลาที่รอบล่าสุดอัปเดต ผู้ใช้ข้อมูลอาจเทียบกับเวลา block ปัจจุบันและปฏิเสธคำตอบที่เก่ากว่าอายุสูงสุดที่แอปกำหนด อาจตรวจเวลาไม่เป็นศูนย์ คำตอบเป็นบวกสำหรับสินทรัพย์ที่ควรมีราคาบวก และช่วงค่าที่สมเหตุผลตามฟีดด้วย ช่วงที่แคบเกินไปอาจปฏิเสธการเคลื่อนไหวของตลาดที่ถูกต้อง
สมมติตลาดกู้ยืมมีหลักประกัน 4 หน่วยและใช้สัดส่วน 75% คำตอบล่าสุด 200,000,000,000 ที่ 8 decimals เท่ากับ $2,000 ต่อหน่วย เพดานกู้คือ 4 × $2,000 × 75% = $6,000 หากตลาดลดเหลือ $1,820 คือปรับลง 9% เมื่อสมมติ deviation 10% และ heartbeat 60 นาที อาจยังไม่มีการร้องขอรายงานใหม่ หากใช้ราคาต่ำกว่า เพดานคือ $5,460
หากแอปปฏิเสธราคาที่เกิน 5 นาทีและรอบนี้เก่า 20 นาที แอปอาจหยุดการกู้ใหม่แทนการใช้ค่า $2,000 การตรวจนี้ไม่ได้อัปเดตฟีด แต่เปลี่ยนว่าการกระทำใดทำได้เมื่อข้อมูลเกินอายุที่ยอมรับได้ การกู้ ถอน ชำระบัญชี และคืนหนี้อาจตอบสนองต่างกัน เพราะการหยุดทุกอย่างก็สร้างความเสียหายได้เช่นกัน ตัวเลขและเงื่อนไขเป็นตัวอย่างสมมติ ไม่ใช่การตั้งค่าปัจจุบันหรือคำแนะนำ
การตรวจ sequencer L2 จัดการความเสี่ยงการหยุดทำงานอีกแบบ
บน L2 หลายแห่ง ผู้ใช้ส่งธุรกรรมผ่าน sequencer เมื่อหยุดทำงานหรือกลับมา ธุรกรรมอาจล่าช้า การใช้งานปกติสะดุด และคำสั่งค้างอาจดำเนินการหลังตลาดเปลี่ยนไปแล้ว คำตอบราคาที่ดูใหม่ไม่ได้พิสูจน์ว่าเส้นทางการดำเนินการพร้อมใช้งานหรือทุกคนเข้าถึงได้พร้อมกัน
Chainlink ระบุฟีดสถานะ sequencer L2 แยกต่างหาก: answer == 0 หมายถึงทำงาน และ answer == 1 หมายถึงหยุด startedAt บันทึกเวลาที่สถานะเปลี่ยน ตัวอย่างผู้ใช้ข้อมูลตรวจสถานะและรอ grace period ที่แอปกำหนดหลังกลับมาทำงานก่อนอ่านราคา ดูที่อยู่และพฤติกรรมเครือข่ายใน คู่มือ L2 Sequencer Uptime Feeds grace period ไม่ได้รับรองว่าราคาอัปเดตหรือธุรกรรมค้างเสร็จสิ้น
การควบคุมเหล่านี้ไม่รับประกันผลลัพธ์ที่ถูกต้องหรือยุติธรรม
ควอรัม มัธยฐาน deviation heartbeat อายุสูงสุด และสถานะ sequencer ตอบคำถามได้จำกัด ไม่ได้รับรองสภาพคล่อง การระบุสินทรัพย์ที่ถูกต้อง ความเป็นอิสระของผู้ให้ข้อมูล หรือราคาที่ซื้อขายได้สำหรับคำสั่งขนาดหนึ่ง เวลาอัปเดตใหม่อาจมาพร้อมค่าที่ผิดหรือถูกปั่น ข้อมูลเก่าอาจยังใกล้ตลาดในช่วงเงียบ
ไม่มี trigger ใดลบช่องว่างราคา ความแออัด หรือข้อผิดพลาดในการปรับสเกล เลือกคู่ ตรวจความใหม่ และชำระบัญชีได้ คำแนะนำเลือก Data Feeds คุณภาพ ให้ประเมินสภาพคล่องและการพึ่งพาแหล่งข้อมูล พร้อมออกแบบรับมือข้อมูลเก่า ล่าช้า หายไป หรือผิดคาด ความเสี่ยงของสัญญา governance bridge หลักประกัน และการชำระบัญชียังคงอยู่ ราคา oracle ของ stablecoin ก็ไม่รับรองการแลกคืนที่ par; อ่าน คู่มือ depeg
ติดตามเส้นทางราคาทั้งหมดก่อนพึ่งพา
ระบุ chain, feed proxy, คู่สินทรัพย์, สกุลเงินอ้างอิง, decimals ของ answer และที่อยู่สัญญา ตรวจว่าคำอธิบายตรงกับสินทรัพย์และอย่าคัดลอกที่อยู่จากเครือข่ายอื่น หากต้องติดตามใกล้ชิดให้ดูรูปแบบแหล่งข้อมูลและประวัติอัปเดต Chainlink ระบุว่า aggregator อาจต่างกันตามเครือข่าย จึงควรตรวจโค้ดและการตั้งค่า
จากนั้นติดตามว่า answer ถูกใช้อย่างไร: ปรับหน่วย ตรวจ updatedAt กำหนดอายุสูงสุด และตอบสนองต่อค่าที่ไม่ถูกต้อง บน L2 ให้ตรวจ uptime feed เวลา recovery grace period และธุรกรรมที่ล่าช้า ทบทวนกรณีข้อมูลเก่าและหยุด/กลับมาทำงานด้วย logic สัญญาจริง สำหรับความหมายของช่องราคา ดู mark price เทียบราคาซื้อขายล่าสุด
คำถามที่พบบ่อย
Q1heartbeat รับรองว่าราคาจะไม่เก่ากว่าช่วงเวลานั้นหรือไม่?
ไม่ใช่ นี่คือ trigger ตามเวลาในการออกแบบฟีด ไม่ได้รับรองเวลาที่แน่นอนในการเผยแพร่และรวมบล็อกหรือการตรงกับตลาดสด ให้ตรวจ updatedAt และกำหนดนโยบาย freshness ให้เหมาะสม
Q2ฟีด oracle แบบมัธยฐานยังผิดได้ไหม?
ได้ มัธยฐานลดผลของค่าผิดปกติบางส่วน แต่ไม่แก้ปัญหาแหล่งข้อมูลร่วม ตลาดบาง คู่ราคาผิด หรือบั๊กในตรรกะผู้ใช้ฟีด
Q3ฟีด uptime sequencer L2 เหมือนกับการตรวจราคาเก่าหรือไม่?
ไม่เหมือน ฟีด uptime รายงานสถานะ sequencer และเวลาเปลี่ยน ส่วนการตรวจความเก่าเทียบ updatedAt ของราคากับเวลาปัจจุบัน แอปอาจต้องใช้ทั้งสองอย่างและ grace period
แหล่งข้อมูลและการอ่านเพิ่มเติม
รายงานปัญหา
เราจะเตรียมอีเมลพร้อมลิงก์บทความนี้ Mark จะได้รับรายงานเมื่อคุณส่งอีเมลแล้วเท่านั้น
ตรวจสอบอย่างรวดเร็ว
อ่านคู่มือจบแล้ว ลองตอบคำถาม 3 ข้อ
คำถาม 01
ฟีด BTC/USD ที่มี 8 decimals คืน `6,725,000,000,000` ราคาหลังปรับสเกลเท่าไร?
เลือกคำตอบเพื่อดูคำอธิบาย