礦工或驗證人是否需要為預言機服務支付 LINK 費用?
我將嘗試根據案例提出問題。
假設我只使用 1 個預言機(忽略鍊鍊接預言機的去中心化事實)執行
GET call to an API
返回布爾資訊(GET > bool) for 0.01 LINK.
以下程式碼行正在發生這種情況。有關更多資訊,請參閱文件。
function checkProof(string memory JobLocation, int customerId) public { Chainlink.Request memory req = buildChainlinkRequest(stringToBytes32(JOBID), address(this), this.fulfill.selector); req.add("get",JobLocation); req.add("path", "proof"); bytes32 requestId = sendChainlinkRequestTo(ORACLE_ADDRESS, req, ORACLE_PAYMENT); requestMapping[requestId] = customers[customerId].id; }
一旦 API GET 結果準備好,它就會呼叫以下函式。
function fulfill(bytes32 _requestId, bool _isProofCorrect) public recordChainlinkFulfillment(_requestId){ int value = requestMapping[_requestId]; customers[value]._proof = _isProofCorrect; }
當我作為 EOA 觸發此功能
checkProof
時,這會觸發 chainlink oracle(如果我錯了請停止)。由於呼叫該
checkProof
函式是狀態更改函式(非純),因此需要對其進行探勘以包含在下一個塊中。每個礦工都執行交易(呼叫 API)。**每個礦工都為預言機服務支付 LINK 費用嗎?**還是只有礦工節點(獲勝礦工)將 LINK 支付給預言機?
一旦區塊被挖出,該區塊的所有交易都需要被執行。
每個驗證者是否需要支付 LINK 才能再次觸發 API GET 呼叫以匹配結果?
讓礦工和驗證者進行這些 API 呼叫並不是區塊鏈本身可以做的事情,這實際上就是為什麼 Chainlink 首先如此重要。如果他們這樣做了,他們將永遠無法達成共識,因為當另一個驗證者/礦工開始回答時,API 很有可能會有所不同。
了解這一點很重要:
Chainlink 節點訂閱鏈上的事件日誌。當發出特定事件時,如 ChainlinkClient / Chainlinked 合約所定義,Chainlink 節點而不是礦工進行 API 呼叫。一旦 Chainlink 節點從 API 呼叫中獲得響應,它們就會通過呼叫該
fulfill
函式進行交易,並將數據放入該交易中。您可以在他們的架構概述中了解有關請求和接收 Chainlink 模型的更多資訊。
通過這種方式,礦工和驗證者可以通過驗證交易而不是數據本身來達成共識,就像他們在所有其他交易上達成共識一樣。
使用Price Feeds時,Chainlink 系統甚至會驗證數據,而不是區塊鏈本身。
那麼誰支付連結?
發出請求的智能合約向節點運營商支付連結。不是礦工或驗證者。