Chainlink 2022春季松黑客已於4月22日拉開帷幕!歡迎註冊!請查看此頁面以了解更多信息。
智能合約不能自己,這意味著他們需要在外部執行這家公司、黑客機合約來啟動它們自己的功能。 ),或者被遵守條件(如以太坊特定的條件),或者計算計算出的價格為(如貸款不足)執行。
在過去,會創建並維護他們自己的中心化或手動開發觸發智能合約的解決方案。然而,這實際上是開發者中心去組織執行區塊鏈應用程序的目的,並且如果化腳本化或手動觸發過程失敗,會出現睡不著的可能。
在本教程中,你將學習如何使用Chainlink Keepers 這種可靠的和去中心化的方式自動執行智能合約。
每個智能合約開發者都應該使用去中心化的自動化方案?
Chainlink保持三個智能合約簽約中心的新形式,使開發者能夠改變他們去構建和維護的App的一種新形式。去中心化智能合約有主要好處。
首先,有必要消除中心運行的任何化中心故障。目前,Chainlink Keeper 由節點組成的去化網絡管理器– 數據饋送管理器與維護者的數據饋送運行中,由運行節點和節點組成的超可靠節點相同,消除了點故障。
需要創建一個與上鍊的合約並註冊,就需要創建一個與上鍊的合約並註冊,就可以集成優化鏈的鏈。 DevOps 的工作,使開發者能夠專注於編寫更多優秀的代碼。
最後,通過使用Chainlink Keepers,開發者可以增強其協議的安全性。
開發者不再需要化發起交易時冒險暴露中心保管人的風險——鏈上網絡上的節點將簽署鏈上交易。
開始使用Chainlink Keepers
你可以通過兩個步驟用Chainlink Keepers自動化你的智能合約:
- 創建並部署一個與守護者互聯網的合約
- 在Chainlink Keepers應用程序上註冊該合約,以創建一個維護
在這些步驟完成後,Chainlink Keepers 將按照任務描述執行維護工作,而不需要進一步的輸入。
如果你是Solidity 的新手,我們建議在繼續之前先學習一些初級教程。本教程特別有用。我們現在將向你全面展示如何與Keeper的主題的視頻,觀看讓你更關注我們的主題。視頻教程。
寫如何與Keeper 連接的合約
與Keeper 的合約有一個檢查維護函數和一個執行維護函數,並帶有Chainlink Keepers 所要求的必要輸入和輸出。為了防止錯誤,我們將在指定我們的檢查維護和執行維護應該什麼時候使用Keeper 函數的接口。
導入與Keeper的接入接口
首先,將Keeper 兼容接口導入你的合同。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and // ./interfaces/KeeperCompatibleInterface.sol import "@chainlink/contracts/src/v0.8/KeeperCompatible.sol";
這個接口有兩個功能。
檢查維護函數
Chainlink Keepers 使用去化的網絡,在各個區塊中以安全和安全的方式在鏈下監控檢查維護功能,然後在治療的時間啟動條件鏈上,執行智能合約功能。
function checkUpkeep( bytes calldata checkData ) external returns ( bool upkeepNeeded, bytes memory performData );
檢查維護函數需要一個名字校驗數據的字節參數,該參數在Keepers應用程序上註冊維護這個值是可選的,可以在你的邏輯中使用,確定檢查維護是否返回真的。
檢查維護返回一個名為需要保養的布爾值。當為真時,這將調用執行維護它還返回字節格式的執行數據(任選的附加數據),如果需要保養,Keeper 應該調用執行維護要了解更多信息,請看開發者文檔。
執行維護函數
如果你的檢查維護的鏈下模擬確認預定義條件滿足(需要保養== 真 從 檢查維護),Keeper將向區塊鏈廣播交易,發布執行數據作為輸入執行執行維護函數。
function performUpkeep( bytes calldata performData ) external;
流輪的節點選擇過程可以自動阻止節點之間的天然氣價格拍賣,並能穩定你的合約的成本。
下面是一個來自Chainlink Keepers 用戶熵的合約翻譯片段,檢查維護檢查Entropfi預測遊戲是否要有效。
/** * @dev chainlink keeper checkUpkeep function to constantly check whether we need function call **/ function checkUpkeep(bytes calldata checkData) external override returns (bool upkeepNeeded, bytes memory performData) { PoolStatus currState = status.currState; uint256 lastUpdateTimestamp = status.lastUpdateTimestamp; uint256 durationOfGame = status.durationOfGame; uint256 durationOfBidding = status.durationOfBidding; if (currState == PoolStatus.Accepting && block.timestamp > lastUpdateTimestamp.add(durationOfBidding)) { upkeepNeeded = true; } else if (currState == PoolStatus.Locked && block.timestamp > lastUpdateTimestamp.add(durationOfGame)) { upkeepNeeded = true; } else { upkeepNeeded = false; } performData = checkData; }
Chainlink Keepers 將不斷調用檢查維護函數,如果需要保養為真,那麼偏差將執行執行維護函數。
/** * @dev once checkUpKeep been triggered, keeper will call performUpKeep **/ function performUpkeep(bytes calldata performData) external override { PoolStatus currState = status.currState; uint256 lastUpdateTimestamp = status.lastUpdateTimestamp; uint256 durationOfGame = status.durationOfGame; uint256 durationOfBidding = status.durationOfBidding; if (currState == PoolStatus.Accepting && block.timestamp > lastUpdateTimestamp.add(durationOfBidding)) { startGame(); } if (currState == PoolStatus.Locked && block.timestamp > lastUpdateTimestamp.add(durationOfGame)) { endGame(); } performData; }
從一些示例代碼開始
你是創建一個新的合同,或者已經部署了一個包含需要自動化的函數的合同,在Chainlink Keepers 開發者文檔中,有一些指南可以幫助你開始。
從這裡的示例合約下面的例子是一個簡單的期貨合約。
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; // KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and // ./interfaces/KeeperCompatibleInterface.sol import "@chainlink/contracts/src/v0.7/KeeperCompatible.sol"; contract Counter is KeeperCompatibleInterface { /** * Public counter variable */ uint public counter; /** * Use an interval in seconds and a timestamp to slow execution of Upkeep */ uint public immutable interval; uint public lastTimeStamp; constructor(uint updateInterval) { interval = updateInterval; lastTimeStamp = block.timestamp; counter = 0; } function checkUpkeep(bytes calldata /* checkData */) external override returns (bool upkeepNeeded, bytes memory /* performData */) { upkeepNeeded = (block.timestamp - lastTimeStamp) > interval; // We don't use the checkData in this example. The checkData is defined when the Upkeep was registered. } function performUpkeep(bytes calldata /* performData */) external override { //We highly recommend revalidating the upkeep in the performUpkeep function if ((block.timestamp - lastTimeStamp) > interval ) { lastTimeStamp = block.timestamp; counter = counter + 1; } // We don't use the performData in this example. The performData is generated by the Keeper's call to your checkUpkeep function } }
Chainlink Keepers 可以監控任何上或鏈下條件的狀態,如過去的流鏈接(如是否過去24 小時或過去的流量計算)(如是否被計算為通常時間不足?)鏈條件滿足,Chainlink Keepers會在鏈上提交交易,以觸發該函數的執行。
你也可以使用Chainlink Keepers 的實用合約,比如EthBalanceMonitor 合約或者這些例子。
如何將你的合同註冊為網絡上的維護
完成與Keeper的連接後,就可以在Chainlink Keepers應用程序點擊“註冊新的維護”。
關於如何註冊的詳細步驟指南,請參閱Chainlink 開發者文檔。
重要提示(對於非以太坊鏈):你的LINK(而不是ERC-677 標準的LINK(而不是ERC-20,這在很多上是通用的)進行充值。可以使用PegSwa 來將你的LINK 轉換為與ERC-67p 升級的版本。
註冊和批准後,您可以添加額外的資金,並在Chainlink Keepers 應用程序上查看您的維護的所有細節。
今天就開始用起來吧
現在你知道Chainlink Keepers 自動化你的智能合約是多麼容易使用,你可以開始集成器並解鎖大量的用例,如DEX限價單、跨鏈NFT構造、重新調整和重新平衡通證等。
訪問開發者文檔或加入不和諧了解更多內容。要討論集成問題,請點擊在這裡聯繫專家。
要了解更多信息,請訪問鏈環, 訂閱Chainlink 通訊,並在推特, YouTube和紅迪網上關注Chainlink。