Oracles

礦工或驗證人是否需要為預言機服務支付 LINK 費用?

  • December 4, 2020

我將嘗試根據案例提出問題。

假設我只使用 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 系統甚至會驗證數據,而不是區塊鏈本身。

那麼誰支付連結?

發出請求的智能合約向節點運營商支付連結。不是礦工或驗證者。

引用自:https://ethereum.stackexchange.com/questions/90764