Solidity
如何保護我的 Chainlink oracle 實現方法?
背景:
我正在編寫一個繼承的契約,
ChainlinkClient
以便通過 oracle 作業發出 API 請求:function fetch() private returns (bytes32 requestId) { Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector); request.add("get", ...); return sendChainlinkRequestTo(oracle, request, fee); } function fulfill(bytes32 _requestId, uint256 _result) public recordChainlinkFulfillment(_requestId) { // Rely on returned data }
假設:
- 發出 oracle 請求時,
fulfill
方法必須是public
.public
任何其他合約都可以訪問方法。問題:
是什麼阻止了某人手動呼叫該
fulfill
方法?這是相關的,因為合約依賴於注入的數據fulfill
。如何保護合約免受無效數據的注入?我希望這個問題是我自己對預言機互動如何工作的誤解的結果!
您的假設是正確的,它需要公開,但在這種情況下修飾符可以提供幫助。ChainlinkClient 具有
recordchainlinkfulfillment
用於實現回調的修飾符。此修飾符指定只有被呼叫的原始 oracle 可以呼叫此函式,即您發送請求時定義的 oracle。
參考:chainlink 文件