Oracle แบบกระจายราคา
เมื่อผู้บริโภคร้องขอบริการ Oracle อาจไม่สามารถตอบสนองได้ทันเวลาเนื่องจากเหตุผลหลายประการ ส่งผลให้เกิดจุดล้มเหลวเพียงจุดเดียว ดังนั้น ChainLink จึงนำการออกแบบออราเคิลราคาแบบกระจายมาใช้เพื่อให้บริการแก่ผู้ใช้ ตัวอย่างเช่น บริการที่ให้ราคา BTC USD จะรวบรวมโอราเคิลราคา 31 รายการเพื่อให้บริการแก่ผู้ใช้
สามารถดูซอร์สโค้ดของสัญญาตัวรวบรวมได้บน Etherscan: https://etherscan.io/address/0xae74faa92cb67a95ebcab07358bc222e33a34da7#readContract
ในจำนวนนี้ โดยการเรียกวิธีเครื่องส่งสัญญาณในสัญญา คุณสามารถดูโอราเคิลนอกเครือข่ายทั้งหมดที่มีอยู่ในตัวรวบรวมได้
ออราเคิลนอกเครือข่ายแต่ละรายการสามารถให้ข้อมูลราคาเพื่อตอบสนองต่อคำขอจากผู้ใช้ในตัวรวบรวมได้ด้วยการเรียกใช้เมธอด transmit ออราเคิลนอกเครือข่ายเหล่านี้เป็นบัญชี EOA ที่ให้ข้อมูลราคาไม่เพียงแต่กับผู้รวบรวม BTC/USD เท่านั้น แต่ยังอาจให้ข้อมูลราคากับผู้รวบรวมอื่นๆ เช่น ETH/USD อีกด้วย
สัญญาแบบออนไลน์:
1. ก่อนอื่น ให้อ่านสถานะสัญญาปัจจุบันและดำเนินการตรวจสอบชุดหนึ่ง:
2. หลังจากผ่านขั้นตอนเหล่านี้ทั้งหมดแล้ว คุณสามารถทำการเตรียมงานบางส่วนได้:
3. จากนั้นใช้ ecrecover() เพื่อตรวจสอบข้อมูลลายเซ็นแต่ละรายการและตรวจสอบว่าค่าแฮชเป็นแฮชของ _report ในขณะเดียวกันก็จำเป็นต้องตรวจสอบว่าบทบาทของผู้ลงนามคือ Signer หรือไม่ และตรวจสอบการซ้ำซ้อนของลายเซ็น
4. สุดท้าย ตรวจสอบว่าข้อสังเกตเป็นไปตามลำดับหรือไม่ จากนั้นเลือกค่ามัธยฐานจากการสังเกตที่เรียงลำดับแล้ว และตรวจสอบให้แน่ใจว่าค่ามัธยฐานจะไม่เกินเกณฑ์บนและล่าง เมื่อทุกอย่างเรียบร้อยดีแล้ว ให้บันทึกคำตอบของออราเคิลใน s_transmissions นอกจากนี้จะต้องตรวจสอบคำตอบด้วย:
ที่นี่ หลังจากการโทรหลายครั้ง (โดยมีสัญญา Proxy อยู่ตรงกลาง) ในที่สุดวิธีการตรวจสอบของสัญญา UniswapAnchoredView (โอราเคิลราคาที่ใช้โดย Compound) จะถูกเรียก:
สิ่งสำคัญคือการเปรียบเทียบว่าค่าเบี่ยงเบนราคาที่กำหนดโดยออราเคิลจากทั้งสองฝ่ายนั้นอยู่ในช่วงหรือไม่:
การลงทะเบียนฟีด
แม้ว่าการใช้งานก่อนหน้านี้จะเรียบง่าย แต่หากคุณต้องการราคาของโทเค็นที่แตกต่างกัน คุณจะต้องดำเนินการ setPriceFeed สำหรับแต่ละโทเค็น ต้นทุนการจัดการนั้นค่อนข้างสูง และไม่ค่อยยืดหยุ่นสำหรับบางสถานการณ์ ในขณะนี้ คุณสามารถพิจารณาใช้วิธีการ Feed Registry เพื่อเข้าถึงได้
Feed Registry สามารถเข้าใจได้ง่ายๆ ว่าเป็นตัวรวบรวม PriceFeeds มีการรวม priceFeeds หลายรายการไว้ ด้วยสิ่งนี้ ผู้ใช้ไม่จำเป็นต้องตั้งค่า priceFeeds เอง และสามารถอ่านข้อมูลราคาโดยตรงผ่าน Feed Registry ดังแสดงด้านล่าง:
กลไกการป้อนราคา
ประการแรก ราคาในฟีดราคาจะได้รับจากการรวบรวมข้อมูลในหลายระดับ จริงๆ แล้ว มีชั้นการรวบรวมข้อมูลสามชั้น ได้แก่ การรวมแหล่งข้อมูล การรวมตัวดำเนินการโหนด และการรวมเครือข่ายออราเคิล
ข้อมูลราคาเดิมส่วนใหญ่มาจากแพลตฟอร์มการซื้อขายแบบรวมศูนย์ เช่น Binance, Huobi และ Coinbase เช่นเดียวกับแพลตฟอร์มการซื้อขายแบบกระจายอำนาจ เช่น Uniswap และ Sushi มีผู้ให้บริการบางรายที่เชี่ยวชาญในการรวบรวมข้อมูล (เช่น Amberdata และ Coingecko) ซึ่งรวบรวมข้อมูลราคาแบบดิบจากแพลตฟอร์มการซื้อขายเหล่านี้ และประมวลผลและรวมแหล่งข้อมูลเหล่านี้ เช่น การคำนวณถ่วงน้ำหนักตามปริมาณการซื้อขาย สภาพคล่อง และความแตกต่างของเวลา
นี่คือระดับแรกของการรวมข้อมูล การรวมแหล่งข้อมูล กุญแจสำคัญในการมีข้อมูลราคาที่เชื่อถือได้คือการมีการครอบคลุมตลาดอย่างครอบคลุมเพื่อให้แน่ใจว่าจุดราคาแสดงถึงการรวมกันที่ถูกต้องของสภาพแวดล้อมการซื้อขายทั้งหมด มากกว่าราคาของการแลกเปลี่ยนเพียงแห่งเดียวหรือไม่กี่แห่ง เพื่อป้องกันการจัดการข้อมูลและการเบี่ยงเบนของราคา
เลเยอร์ที่สองคือการรวมข้อมูลที่ทำโดย Chainlink Node Operators ผู้ดำเนินการโหนด Chainlink แต่ละรายจะมีหน้าที่หลักในการรันซอฟต์แวร์หลักของ Chainlink ที่ใช้ในการรับและเผยแพร่ข้อมูลตลาดภายนอกบนบล็อคเชน ผู้ดำเนินการโหนดจะรับข้อมูลราคาจากบริการรวบรวมข้อมูลอิสระหลายรายการและหาค่ามัธยฐานระหว่างข้อมูลเหล่านั้น โดยจะลบค่าผิดปกติและระยะเวลาหยุดทำงานของ API
เลเยอร์สุดท้ายคือการรวมเครือข่ายออราเคิลทั้งหมด มีหลายวิธีในการรวมข้อมูล แต่วิธีการรวมข้อมูลที่นิยมใช้มากที่สุดคือการใช้ค่ามัธยฐานของข้อมูลเมื่อจำนวนโหนดที่ตอบสนองถึงค่าที่ตั้งไว้ล่วงหน้า ตัวอย่างเช่น หากมีโหนดทั้งหมด 31 โหนด และค่าที่ตั้งไว้ล่วงหน้าคือ 21 นั่นก็คือ หลังจากได้รับการตอบกลับจากโหนด 21 โหนดแล้ว ค่ามัธยฐานของข้อมูลราคาของโหนดเหล่านี้จะถูกนำมาใช้เป็นราคาสุดท้าย อย่างไรก็ตาม ผลลัพธ์ราคาในแต่ละรอบจะไม่ได้รับการอัปเดตบนเครือข่าย ข้อมูลเหล่านี้จะได้รับการอัปเดตเมื่อตรงตามพารามิเตอร์ทริกเกอร์ 1 ใน 2 ตัว ได้แก่ เกณฑ์ค่าเบี่ยงเบนและเกณฑ์การเต้นของหัวใจ นอกจากนี้ค่าของพารามิเตอร์ทั้งสองนี้อาจแตกต่างกันสำหรับ PriceFeeds ที่แตกต่างกัน
โดยสรุปแล้ว การพยากรณ์ราคา Chainlink เข้าถึงได้ง่ายและมีความปลอดภัยค่อนข้างสูง อย่างไรก็ตาม เนื่องจากเกณฑ์การเบี่ยงเบนของกลไกการอัปเดตราคา การอัปเดตราคาจึงค่อนข้างช้า ซึ่งอาจใช้เวลาเพียงไม่กี่นาทีหรือหลายสิบนาที หรืออาจใช้เวลานานถึง 24 ชั่วโมง ดังนั้นโดยทั่วไปจึงเหมาะสำหรับแอปพลิเคชั่นที่ไม่ไวต่อการอัปเดตราคามากนัก นี่ก็เป็นข้อจำกัดของการพยากรณ์ราคา Chainlink เช่นกัน และไม่สามารถนำไปใช้ในทุกสถานการณ์ได้
บทความนี้เขียนโดย XiG (บัญชี X @SHXiGi ) ของทีม ZAN (บัญชี X @zan_team )