ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

avatar
ZAN Team
1อาทิตย์ก่อน
ประมาณ 4015คำ,ใช้เวลาอ่านบทความฉบับเต็มประมาณ 6นาที
เมื่อผู้บริโภคร้องขอบริการ Oracle ออราเคิลอาจไม่ตอบสนองได้ทันเวลาเนื่องจากเหตุผลหลายประการ ส่งผลให้เกิดจุดล้มเหลวเพียงจุดเดียว...

Oracle แบบกระจายราคา

เมื่อผู้บริโภคร้องขอบริการ Oracle อาจไม่สามารถตอบสนองได้ทันเวลาเนื่องจากเหตุผลหลายประการ ส่งผลให้เกิดจุดล้มเหลวเพียงจุดเดียว ดังนั้น ChainLink จึงนำการออกแบบออราเคิลราคาแบบกระจายมาใช้เพื่อให้บริการแก่ผู้ใช้ ตัวอย่างเช่น บริการที่ให้ราคา BTC USD จะรวบรวมโอราเคิลราคา 31 รายการเพื่อให้บริการแก่ผู้ใช้

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

สามารถดูซอร์สโค้ดของสัญญาตัวรวบรวมได้บน Etherscan: https://etherscan.io/address/0xae74faa92cb67a95ebcab07358bc222e33a34da7#readContract

ในจำนวนนี้ โดยการเรียกวิธีเครื่องส่งสัญญาณในสัญญา คุณสามารถดูโอราเคิลนอกเครือข่ายทั้งหมดที่มีอยู่ในตัวรวบรวมได้

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

ออราเคิลนอกเครือข่ายแต่ละรายการสามารถให้ข้อมูลราคาเพื่อตอบสนองต่อคำขอจากผู้ใช้ในตัวรวบรวมได้ด้วยการเรียกใช้เมธอด transmit ออราเคิลนอกเครือข่ายเหล่านี้เป็นบัญชี EOA ที่ให้ข้อมูลราคาไม่เพียงแต่กับผู้รวบรวม BTC/USD เท่านั้น แต่ยังอาจให้ข้อมูลราคากับผู้รวบรวมอื่นๆ เช่น ETH/USD อีกด้วย

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

สัญญาแบบออนไลน์:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

1. ก่อนอื่น ให้อ่านสถานะสัญญาปัจจุบันและดำเนินการตรวจสอบชุดหนึ่ง:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

2. หลังจากผ่านขั้นตอนเหล่านี้ทั้งหมดแล้ว คุณสามารถทำการเตรียมงานบางส่วนได้:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

3. จากนั้นใช้ ecrecover() เพื่อตรวจสอบข้อมูลลายเซ็นแต่ละรายการและตรวจสอบว่าค่าแฮชเป็นแฮชของ _report ในขณะเดียวกันก็จำเป็นต้องตรวจสอบว่าบทบาทของผู้ลงนามคือ Signer หรือไม่ และตรวจสอบการซ้ำซ้อนของลายเซ็น

4. สุดท้าย ตรวจสอบว่าข้อสังเกตเป็นไปตามลำดับหรือไม่ จากนั้นเลือกค่ามัธยฐานจากการสังเกตที่เรียงลำดับแล้ว และตรวจสอบให้แน่ใจว่าค่ามัธยฐานจะไม่เกินเกณฑ์บนและล่าง เมื่อทุกอย่างเรียบร้อยดีแล้ว ให้บันทึกคำตอบของออราเคิลใน s_transmissions นอกจากนี้จะต้องตรวจสอบคำตอบด้วย:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

ที่นี่ หลังจากการโทรหลายครั้ง (โดยมีสัญญา Proxy อยู่ตรงกลาง) ในที่สุดวิธีการตรวจสอบของสัญญา UniswapAnchoredView (โอราเคิลราคาที่ใช้โดย Compound) จะถูกเรียก:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

สิ่งสำคัญคือการเปรียบเทียบว่าค่าเบี่ยงเบนราคาที่กำหนดโดยออราเคิลจากทั้งสองฝ่ายนั้นอยู่ในช่วงหรือไม่:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

การลงทะเบียนฟีด

แม้ว่าการใช้งานก่อนหน้านี้จะเรียบง่าย แต่หากคุณต้องการราคาของโทเค็นที่แตกต่างกัน คุณจะต้องดำเนินการ setPriceFeed สำหรับแต่ละโทเค็น ต้นทุนการจัดการนั้นค่อนข้างสูง และไม่ค่อยยืดหยุ่นสำหรับบางสถานการณ์ ในขณะนี้ คุณสามารถพิจารณาใช้วิธีการ Feed Registry เพื่อเข้าถึงได้

Feed Registry สามารถเข้าใจได้ง่ายๆ ว่าเป็นตัวรวบรวม PriceFeeds มีการรวม priceFeeds หลายรายการไว้ ด้วยสิ่งนี้ ผู้ใช้ไม่จำเป็นต้องตั้งค่า priceFeeds เอง และสามารถอ่านข้อมูลราคาโดยตรงผ่าน Feed Registry ดังแสดงด้านล่าง:

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

กลไกการป้อนราคา

ประการแรก ราคาในฟีดราคาจะได้รับจากการรวบรวมข้อมูลในหลายระดับ จริงๆ แล้ว มีชั้นการรวบรวมข้อมูลสามชั้น ได้แก่ การรวมแหล่งข้อมูล การรวมตัวดำเนินการโหนด และการรวมเครือข่ายออราเคิล

ซีรีส์ Chainlink Oracle (ส่วนที่ 2)

ข้อมูลราคาเดิมส่วนใหญ่มาจากแพลตฟอร์มการซื้อขายแบบรวมศูนย์ เช่น 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 )

บทความต้นฉบับ, ผู้เขียน:ZAN Team。พิมพ์ซ้ำ/ความร่วมมือด้านเนื้อหา/ค้นหารายงาน กรุณาติดต่อ report@odaily.email;การละเมิดการพิมพ์ซ้ำกฎหมายต้องถูกตรวจสอบ

ODAILY เตือนขอให้ผู้อ่านส่วนใหญ่สร้างแนวคิดสกุลเงินที่ถูกต้องและแนวคิดการลงทุนมอง blockchain อย่างมีเหตุผลและปรับปรุงการรับรู้ความเสี่ยงอย่างจริงจัง สำหรับเบาะแสการกระทำความผิดที่พบสามารถแจ้งเบาะแสไปยังหน่วยงานที่เกี่ยวข้องในเชิงรุก

การอ่านแนะนำ
ตัวเลือกของบรรณาธิการ