Quy trình lấy dữ liệu off-chain thông qua Chainlink oracle diễn ra như sau:

Request and Response

Request

  1. Đầu tiên, contract gửi request đến một on-chain oracle contract (oracle contract).
  2. On-chain contract sẽ tạo ra một event có tên là OracleRequest. Event này sẽ được các off-chain oracle node (oracle node) lắng nghe và sẽ chứa các thông tin về request như sau:
    • Địa chỉ của oracle node.
    • Job ID, định danh cho request.
    • Callback function, cho biết những tác vụ mà oracle node cần thực hiện.

Quá trình request sử dụng một giao dịch.

Response

  1. Các oracle node sẽ xử lý request và trả về dữ liệu cho oracle contract.
  2. Cụ thể, oracle node sẽ truyền dữ liệu vào hàm fulfillOracleRequest của oracle contract.

Quá trình response sử dụng một giao dịch.

Minh họa quy trình:

Như vậy, cần phải có ít nhất hai giao dịch để thực hiện việc lấy dữ liệu. Kiến trúc sử dụng hai giao dịch này giúp ngăn chặn các cuộc tấn công brute force bởi vì kẻ tấn công cần phải sử dụng một lượng lớn gas để thực hiện (mỗi giao dịch tiêu thụ một lượng gas nhất định1).

Để sử dụng các oracle của Chainlink (trừ các data feed) thì chúng ta cần phải trả oracle gas, hay còn được biết đến là LINK (một loại token của Chainlink). Nói cách khác, khi thực hiện request, contract của chúng ta phải cung cấp một lượng LINK nhất định tùy thuộc vào mức giá của oracle mà ta đang sử dụng.

Tại sao chúng ta không áp dụng oracle gas fee cho các data feed?

Với data feed, toàn bộ các Chainlink node sẽ được request thay vì chỉ một như đối với request model. Tuy nhiên, chỉ cần duy nhất một thực thể khởi động việc gửi request cho các data feed và chúng ta sẽ được hưởng lợi từ việc đó. Các data feed được tài trợ bởi một nhóm các dự án sử dụng các data feed đó chẳng hạn như Aave, Compound, Synthetix.

Địa chỉ của LINK token ở trên Sepolia testnet: ChainLink Token (LINK) Token Tracker | Etherscan

Footnotes

  1. Xem thêm Gas.