Oracle giá DeFi tổng hợp và công bố giá như thế nào?
Tìm hiểu cách nguồn oracle tổng hợp quan sát, cách heartbeat và ngưỡng độ lệch kích hoạt cập nhật, cách bên tiêu thụ kiểm tra đơn vị và độ mới, cùng những gì các biện pháp này không thể bảo đảm.
Trong hướng dẫn nàyOracle công bố giá tham chiếu, không phải giá khớp lệnh
Tóm tắt ngắn
Oracle giá DeFi đưa một tham chiếu bên ngoài vào hợp đồng thông minh. Trong mô hình push phổ biến, nhiều quan sát được tổng hợp thành báo cáo ngoài chuỗi, một báo cáo được công bố lên chuỗi và giao thức đọc câu trả lời mới nhất. Cài đặt độ lệch và heartbeat ảnh hưởng thời điểm gửi cập nhật; `decimals`, đơn vị yết giá, `updatedAt` và—trên một số L2—trạng thái sequencer quyết định bên tiêu thụ có nên dùng câu trả lời đó hay không. Các kiểm soát này giảm một số rủi ro cụ thể, nhưng không chứng minh giá là đúng, đủ mới cho mọi mục đích hay an toàn cho mọi giao dịch.
Oracle công bố giá tham chiếu, không phải giá khớp lệnh
Oracle đưa thông tin ngoài blockchain vào mã phải chạy bằng trạng thái trên chuỗi. Giao thức cho vay có thể dùng nguồn giá tài sản/đơn vị tiền tệ để định giá tài sản thế chấp; hợp đồng phái sinh có thể dùng tham chiếu được xác định để thanh toán hoặc áp giới hạn rủi ro. Hợp đồng đọc được con số đã ghi vào trạng thái của nó, nhưng không thể trực tiếp xem mọi sổ lệnh bên ngoài.
Từ “giá” che khuất nhiều phép đo khác nhau. Một nguồn có thể biểu thị giá một tài sản theo đồng tiền yết giá, tỷ lệ quy đổi do giao thức định nghĩa hoặc một đại lượng khác đã nêu rõ. Nó không nhất thiết là giá có thể bán một vị thế lớn. Tỷ lệ tức thời trong pool có thể khác giao dịch cuối ở sàn tập trung. Hướng dẫn swap DEX giải thích vì sao giá pool và giá khớp lệch nhau; hướng dẫn mark price và last price nói về một phân biệt khác giữa các thị trường.
Oracle cũng có nhiều thiết kế. Nguồn push ghi câu trả lời định kỳ lên hợp đồng để bên tiêu thụ đọc giá đã công bố mới nhất. Thiết kế pull có thể cung cấp báo cáo đã ký khi người dùng hoặc ứng dụng yêu cầu. Bài này tập trung vào nguồn push EVM phổ biến và dùng giao diện Chainlink được tài liệu hóa làm ví dụ, không khẳng định mọi giao thức DeFi dùng cùng nhà cung cấp hoặc quy tắc cập nhật.
Từ quan sát đến câu trả lời trên chuỗi
Trong thiết kế Offchain Reporting của Chainlink, các nút oracle trao đổi quan sát ngoài chuỗi và thống nhất một báo cáo. Một quorum ký báo cáo; một transmitter gửi báo cáo bằng giao dịch; aggregator xác minh chữ ký và đưa ra câu trả lời, mã vòng và dấu thời gian. Thiết kế được mô tả công bố trung vị của các quan sát đã báo cáo. Việc này giảm nhu cầu ghi từng quan sát thành giao dịch riêng, đồng thời giữ xác minh chữ ký trên chuỗi. Xem tài liệu Offchain Reporting.
Hợp đồng tiêu thụ thường không lặp lại toàn bộ quá trình tổng hợp. Nó gọi latestRoundData() tại địa chỉ proxy của nguồn và nhận dữ liệu vòng hiện tại. Chainlink khuyến nghị dùng địa chỉ proxy của nguồn được chọn; aggregator bên dưới proxy có thể thay đổi. Hướng dẫn đọc dữ liệu EVM và tài liệu API trình bày giao diện và giải thích vì sao địa chỉ nguồn khác nhau theo mạng.
Tổng hợp chỉ là một phần của chất lượng dữ liệu. Các nhà vận hành nút độc lập vẫn có thể dựa vào những sàn, nhà cung cấp dữ liệu hoặc quy ước thị trường trùng nhau. Trung vị có thể hạn chế ảnh hưởng của một quan sát ngoại lệ khi còn đủ quan sát hợp lệ, nhưng không thể tạo thanh khoản cho thị trường mỏng, sửa nhãn tài sản sai hoặc chứng minh tham chiếu phù hợp với nhu cầu của một giao thức cụ thể.

Heartbeat và độ lệch điều khiển nhịp công bố
Nhiều nguồn push kết hợp ngưỡng độ lệch với heartbeat. Ngưỡng độ lệch là mức phần trăm thay đổi so với câu trả lời đã công bố trước đó có thể kích hoạt báo cáo mới; heartbeat là điều kiện theo thời gian có thể yêu cầu cập nhật ngay cả khi giá chưa vượt ngưỡng. Thông số riêng từng nguồn như tài sản, mạng, ngưỡng độ lệch và heartbeat có trong danh mục Data Feeds hiện hành và trang địa chỉ nguồn.
Đây là cài đặt theo từng nguồn, không phải cam kết “cập nhật chính xác mỗi N giây”. Nếu giá chỉ dao động nhẹ, có thể chưa có cập nhật do độ lệch cho đến khi điều kiện heartbeat đến hạn. Nếu biến động mạnh vượt ngưỡng, báo cáo có thể được yêu cầu sớm hơn, nhưng thu thập dữ liệu, gửi báo cáo và đưa giao dịch vào khối còn phụ thuộc vận hành và mạng. Heartbeat mô tả điều kiện kích hoạt; nó không bảo đảm tham chiếu thị trường không bao giờ cũ hoặc cập nhật được ghi đúng một thời điểm cụ thể.
Ngưỡng cũng không cho biết giao thức chịu được biến động giá nào một cách an toàn. Thị trường cho vay có tài sản thế chấp biến động nhanh có thể cần giới hạn tuổi chặt hơn hoặc cách phản ứng rủi ro khác ứng dụng dùng tham chiếu ít biến động. Giao thức cần chọn tuổi tối đa và hành vi riêng, không coi cài đặt kích hoạt của nguồn là chính sách an toàn.
Giải mã câu trả lời, số thập phân và đơn vị yết giá
latestRoundData() trả về roundId, answer, startedAt, updatedAt và answeredInRound. Tài liệu API đánh dấu answeredInRound là đã lỗi thời. answer là số nguyên dạng fixed-point, không nhất thiết là số đô la có thể đọc ngay. Hãy đọc decimals() của nguồn cùng phần mô tả, rồi diễn giải cho đúng cặp tài sản và mạng đó. Ví dụ, nguồn BTC/USD giả định trả 6,725,000,000,000 với 8 chữ số thập phân của nguồn thì giá đã quy đổi là 67.250,00000000 USD cho mỗi BTC.
Số thập phân của nguồn và số thập phân của token biểu thị các đại lượng khác nhau. Số lượng ERC-20 có thể dùng 18 chữ số token, trong khi câu trả lời giá dùng 8 chữ số nguồn. Trước khi nhân, hợp đồng phải quy đổi từng giá trị theo đúng đơn vị. Giả định mọi nguồn đều có tám chữ số hoặc áp số thập phân của token cho câu trả lời oracle có thể làm sai phép tính nhiều bậc độ lớn.
Chiều của cặp giá cũng quan trọng như tỷ lệ. BTC/USD là số đô la cho mỗi bitcoin: nhân một BTC với câu trả lời sẽ ra giá trị đô la. USD/BTC có đơn vị nghịch đảo. Với cặp dẫn xuất, cần quy đổi cả hai nguồn rồi chia theo đúng thứ tự; ví dụ định danh giá của Chainlink tạo BTC/EUR từ BTC/USD và EUR/USD. Đồng thời xác minh địa chỉ, cặp, chuỗi và tài sản đúng với tài sản thế chấp hoặc nghĩa vụ dự kiến.
Kiểm tra dữ liệu cũ là quy tắc của ứng dụng
updatedAt ghi dấu thời gian cập nhật vòng gần nhất. Bên tiêu thụ có thể so sánh với thời gian khối hiện tại và từ chối câu trả lời cũ hơn tuổi tối đa do ứng dụng quy định. Tùy nguồn và giao thức, có thể kiểm tra thêm thời gian cập nhật khác không, câu trả lời dương cho nguồn giá tài sản có giá dương, hoặc nằm trong phạm vi dự kiến. Phạm vi hợp lệ phụ thuộc sản phẩm; giới hạn mã cứng có thể tự trở nên không an toàn khi thị trường đổi khác.
Xét thị trường cho vay giả định chấp nhận bốn đơn vị tài sản thế chấp với hệ số 75%. Nguồn có 8 chữ số thập phân và câu trả lời cuối là 200,000,000,000, tương đương 2.000 USD mỗi token. Hạn mức vay hiển thị là 4 × 2.000 × 75% = 6.000 USD. Giả sử thị trường đã giảm xuống 1.820 USD, tức 9%, trong khi nguồn minh họa có ngưỡng độ lệch 10% và heartbeat 60 phút. Có thể chưa điều kiện nào trong hai điều kiện kích hoạt báo cáo mới. Dùng giá 1.820 USD, cùng công thức cho 5.460 USD; câu trả lời cũ sẽ làm hạn mức trong ví dụ cao hơn 540 USD.
Nếu ứng dụng từ chối giá cũ hơn năm phút và vòng hiện tại đã cập nhật từ 20 phút trước, ứng dụng có thể chặn khoản vay mới thay vì dùng giá 2.000 USD. Kiểm tra đó không cập nhật nguồn; nó chỉ thay đổi hành động được phép khi dữ liệu vượt quá tuổi ứng dụng chấp nhận. Giao thức có thể phản ứng khác nhau với vay, rút, thanh lý và trả nợ, vì tạm dừng mọi hành động cũng gây tác hại. Những con số và ngưỡng ở đây hoàn toàn giả định để minh họa mối liên hệ, không phải cấu hình hiện tại hay khuyến nghị quản trị rủi ro.
Kiểm tra sequencer L2 xử lý một rủi ro gián đoạn khác
Trên L2, người dùng thường gửi giao dịch qua sequencer. Khi sequencer ngừng hoặc phục hồi, người dùng có thể không giao dịch bình thường, giao dịch bị trễ và chỉ được xử lý sau khi điều kiện thị trường đã đổi. Câu trả lời oracle L2 trông còn mới không chứng minh đường thực thi của ứng dụng đang hoạt động hay người dùng có cơ hội ngang nhau để hành động.
Chainlink tài liệu hóa L2 Sequencer Uptime Feed như một nguồn trạng thái riêng. Trong giao diện được mô tả, answer == 0 có nghĩa sequencer đang hoạt động và answer == 1 có nghĩa đã dừng. startedAt ghi thời điểm trạng thái đổi; ví dụ bên tiêu thụ kiểm tra trạng thái rồi chờ khoảng ân hạn do ứng dụng quy định sau khi khôi phục trước khi dùng nguồn giá. Phải xác minh địa chỉ và hành vi mạng chính xác của L2 đang sử dụng. Xem hướng dẫn L2 Sequencer Uptime Feed.
Khoảng ân hạn cho người dùng và hệ thống thời gian tiếp tục hoạt động; nó không bảo đảm dữ liệu thị trường được làm mới. Nó không có nghĩa mọi giao dịch đang chờ đã hoàn tất, giá đã chính xác hay ứng dụng có thể mở lại mọi hành động cùng lúc an toàn. Các L2 khác nhau về sequencer, giao dịch cưỡng bức, chuyển tiếp thông điệp và khôi phục; giao thức nên xử lý hành vi mạng đã công bố thay vì giả định mọi rollup gặp cùng một kiểu sự cố.
Các kiểm soát này không thể bảo đảm kết quả đúng hoặc công bằng
Quorum, trung vị, ngưỡng độ lệch, heartbeat, giới hạn tuổi và kiểm tra trạng thái sequencer trả lời những câu hỏi hẹp khác nhau. Chúng không bảo đảm thị trường nguồn có thanh khoản, quan sát đúng tài sản, nhà cung cấp dữ liệu độc lập hay trung vị phù hợp với quy mô giao dịch cụ thể. Dấu thời gian mới có thể đi kèm giá sai hoặc bị thao túng; trong khoảng yên ắng, giá cũ đôi khi vẫn gần thị trường.
Không điều kiện cập nhật nào xóa được khoảng trống thị trường. Giá có thể nhảy mạnh giữa các lần công bố, nguồn có thể không truy cập được, mạng tắc nghẽn, hoặc hợp đồng có lỗi ở bước quy đổi, chọn cặp, kiểm tra dữ liệu cũ hay thanh lý. Một số nguồn phụ thuộc một nguồn dữ liệu hoặc nhà cung cấp duy nhất cho loại dữ liệu cụ thể. Hướng dẫn chọn nguồn chất lượng của Chainlink yêu cầu bên tích hợp đánh giá thanh khoản và phụ thuộc của nguồn, đồng thời chuẩn bị cho giá cũ, trễ, thiếu hoặc bất thường.
Cầu dao và giới hạn có thể giới hạn một số hành động nhưng không dự đoán mọi trạng thái thị trường hợp lệ. Giới hạn quá chặt có thể chặn biến động hợp lệ; giới hạn quá rộng có thể không ngăn biến động nguy hiểm. Kiểm soát oracle không xóa rủi ro hợp đồng thông minh, quản trị, thanh khoản, cầu nối, tài sản thế chấp hoặc thanh lý. Giá oracle stablecoin cũng khác khả năng người nắm giữ quy đổi ngang giá; hướng dẫn depeg stablecoin giải thích những cơ chế khác đó.
Theo dõi toàn bộ đường đi của giá trước khi dựa vào nó
Với một giao thức, hãy xác định đúng chuỗi, proxy của nguồn, cặp tài sản, đồng tiền yết giá, số thập phân của câu trả lời và địa chỉ hợp đồng. Đối chiếu mô tả nguồn với tài sản dự định; kiểm tra danh sách địa chỉ được hỗ trợ thay vì sao chép địa chỉ từ mạng khác. Nếu mục đích cần giám sát kỹ, xem mô hình nguồn, quan sát gần nhất hoặc lịch sử cập nhật. Chainlink lưu ý aggregator có thể khác nhau giữa các mạng và mã nguồn cùng cấu hình cần được kiểm tra.
Tiếp theo, lần theo cách câu trả lời được dùng: chuyển đổi đúng số lượng token và đơn vị giá, xem updatedAt, xác định tuổi tối đa và tìm hiểu câu trả lời không hợp lệ bị từ chối, làm ứng dụng tạm dừng hay chỉ thay đổi một số thao tác. Trên L2, tìm nguồn uptime, cách diễn giải trạng thái, thời điểm phục hồi, khoảng ân hạn và cách xử lý giao dịch bị sequencer trì hoãn. Kiểm tra cả trường hợp nguồn cũ và sự cố/phục hồi trong logic hợp đồng thực tế.
Người đánh giá giao thức cho vay hoặc giao dịch nên đọc tài liệu và hành vi hợp đồng đã triển khai thay vì cho rằng tên oracle quen thuộc bao phủ mọi rủi ro. Hỏi giá nào dùng cho định giá, vay, thanh lý hoặc thanh toán; chuyện gì xảy ra khi nguồn cũ hay không truy cập được; ai được đổi thông số rủi ro. Chính đường đi của giá trong giao thức—không phải nhãn trên bảng điều khiển—quyết định một quan sát oracle tác động đến tài khoản như thế nào.
Câu hỏi thường gặp
Q1Heartbeat có nghĩa giá luôn mới trong khoảng đó không?
Không. Heartbeat là điều kiện theo thời gian trong thiết kế cập nhật của một nguồn, không bảo đảm việc công bố hay đưa giao dịch vào khối đúng thời điểm, cũng không khẳng định giá khớp thị trường trực tiếp. Hãy xem updatedAt và đặt chính sách độ mới phù hợp.
Q2Nguồn oracle dùng trung vị vẫn có thể sai không?
Có. Trung vị giảm ảnh hưởng của một số quan sát ngoại lệ, nhưng không sửa được vấn đề nguồn chung, thị trường mỏng hoặc bị thao túng, cặp tài sản sai hay logic tiêu thụ có lỗi. Tổng hợp chỉ là một kiểm soát trong thiết kế rủi ro lớn hơn.
Q3Nguồn uptime sequencer L2 có giống kiểm tra dữ liệu giá cũ không?
Không. Nguồn uptime báo trạng thái sequencer và thời điểm đổi trạng thái. Kiểm tra dữ liệu cũ so sánh updatedAt của vòng giá với thời gian hiện tại. Ứng dụng có thể cần cả hai cùng thời gian ân hạn sau khôi phục.
Nguồn và tài liệu đọc thêm
Báo lỗi
Chúng tôi sẽ soạn email kèm liên kết bài viết này. Mark chỉ nhận được báo cáo sau khi bạn gửi email
Kiểm tra nhanh
Đọc xong hướng dẫn? Hãy kiểm tra với 3 câu hỏi
Câu hỏi 01
Nguồn BTC/USD trả `6,725,000,000,000` với 8 chữ số thập phân. Giá sau khi quy đổi là bao nhiêu?
Chọn một đáp án để xem giải thích