Chainlink
確保只有 Keepers 可以呼叫我的合約的“performUpkeep”函式
我有一個 keeper performUpKeep 功能,它對任務至關重要,只有 keeper 可以呼叫,而不是一些隨機的第三方來更快地啟動契約。似乎 Chainlink 管理員在不斷變化,那麼我如何確保只有管理員呼叫合約?
理想情況下,您只需要驗證
checkUpKeep
是否返回 true,然後對輸入進行一些數據驗證,以確保它只能執行您想要的操作。根據chainlink github:
- @dev 這個方法的輸入不應該被信任, * 方法的呼叫者甚至不應該被限制在任何單一的系統資料庫中。* 任何人都應該能夠呼叫它,並且應該驗證輸入,不能保證 * 傳入的數據是從 checkUpkeep 返回的 performData。這 * 可能是由於惡意守門員、競速守門員或只是在 performUpkeep 交易等待確認時狀態更改而發生的。* 始終驗證傳入的數據。
不建議使用以下程式碼
如果你想忽略這個……(你不應該這樣做)但你可以
onlyKeepers
在你的函式中添加一個修飾符,performUpkeep
這樣只有 Keepers 系統資料庫才能呼叫你的合約。address public keepersRegistry = xxxxxx; modifier onlyKeepers() { require(msg.sender == keepersRegistry, "Ownable: caller is not keepers registry"); _; }
然後將您的功能包裝在其中。
function functionName() onlyKeepers { .... }