Keep3r Network: OpenZeppelin | defender
The goal with Keep3r is simple, create an agnostic, easy to implement, incentivization layer for routine ecosystem maintenance.
Keepers, as described in the documentation, are technical users, capable of implementing bots and/or scripts and running these in some scheduled manner (cronjobs, tasks managers).
With OpenZeppelin | defender, this is no longer a requirement. We will walk through how to set up a keeper in a few simple steps, earning passive rewards, and not needing to worry about maintenance again.
Prerequisites
- An OpenZeppelin | defender account, you can register here
- Registered as a keeper via Keep3r Network, you can follow the tutorial here
Step 1: Setup Relayer
Select Create Relayer
fill in a Name
and select Create
, that simple.
Step 2: Setup Autotask
Select Create Autotask
, choose a Name
for your task, select how often you would like it to execute 1
for 1 minute
, select your relayer
(created in the previous step, this is optional). And enter your code snippet. As example, lets look at UniswapV2Oracle;
const workableAbi = <contract ABI>;
const workableAddr = <contract address>;
const from = <from address>;const { ethers } = require("ethers");
const { DefenderRelaySigner } = require('defender-relay-client/lib/ethers');// Entrypoint for the Autotask
exports.handler = async function(credentials) {
const provider = ethers.getDefaultProvider('mainnet');
const signer = new DefenderRelaySigner(credentials, provider, { speed: 'fastest', from });
const contract = new ethers.Contract(workableAddr, workableAbi, signer);// Run work if needed
if (await contract.updateable()) {
const tx = await contract.work();
console.log(tx.hash);
}
}
For UniswapV2Oracle, there are two important calls;
contract.updateable()
returns a booleantrue | false
if callingcontract.work()
would be successful.contract.work()
which does the maintenance job and rewards KP3R
Below is an example transaction;
Save the Autotask, and we are done;
The task will execute every minute, call updateable()
and if it can update, it will call work
That simple.