-
Notifications
You must be signed in to change notification settings - Fork 1.7k
How to Run Keeper Jobs
De Clercq Wentzel edited this page Apr 27, 2022
·
9 revisions
First, you must have the latest version of the chainlink node installed and configured using the instructions above.
The following environment variables configure keeper jobs. They are all optional.
-
KEEPER_DEFAULT_TRANSACTION_QUEUE_DEPTH
- the number of keeper transactions of the same variety to keep in the queue at once - default 1 -
KEEPER_REGISTRY_SYNC_INTERVAL
- interval in which to perform a full sync of the keeper registry - default 30 min -
KEEPER_MINIMUM_REQUIRED_CONFIRMATIONS
- minimum number of confirmations before processing keeper logs - default 12 -
KEEPER_MAXIMUM_GRACE_PERIOD
- maximum number of blocks to wait after performing upkeep before resuming regular checks - default 100 -
KEEPER_REGISTRY_CHECK_GAS_OVERHEAD
- the amount of extra gas to send forcheckUpkeep
calls - default 200000 -
KEEPER_REGISTRY_PERFORM_GAS_OVERHEAD
- the amount of extra gas to send forperformUpkeep
transactions - default 300000 -
KEEPER_REGISTRY_SYNC_UPKEEP_QUEUE_SIZE
- the maximum number of upkeeps that can be synced in parallel - default 10
Start the node using chainlink local node
If you already know your node's eth address, you can skip this step.
- remotely login to your node using
chainlink admin login
- observe the keys using
chainlink keys eth list
- Copy the eth address of the key your node will be using for keeper jobs
- Make sure your account is funded!
You can also retrieve this information from the operator UI.
Your node's address must have already been added to the keeper registry contract.
Keeper jobs have the following spec format (v1.3.0):
type = "keeper"
schemaVersion = 3
name = "example keeper spec"
contractAddress = "0x0000000000000000000000000000000000000000"
fromAddress = "0x0000000000000000000000000000000000000000"
evmChainID = 4
observationSource = """
encode_check_upkeep_tx [type=ethabiencode
abi="checkUpkeep(uint256 id, address from)"
data="{\\"id\\":$(jobSpec.upkeepID),\\"from\\":$(jobSpec.fromAddress)}"]
check_upkeep_tx [type=ethcall
failEarly=true
extractRevertReason=true
evmChainID="$(jobSpec.evmChainID)"
contract="$(jobSpec.contractAddress)"
gas="$(jobSpec.checkUpkeepGasLimit)"
gasPrice="$(jobSpec.gasPrice)"
gasTipCap="$(jobSpec.gasTipCap)"
gasFeeCap="$(jobSpec.gasFeeCap)"
data="$(encode_check_upkeep_tx)"]
decode_check_upkeep_tx [type=ethabidecode
abi="bytes memory performData, uint256 maxLinkPayment, uint256 gasLimit, uint256 adjustedGasWei, uint256 linkEth"]
encode_perform_upkeep_tx [type=ethabiencode
abi="performUpkeep(uint256 id, bytes calldata performData)"
data="{\\"id\\": $(jobSpec.upkeepID),\\"performData\\":$(decode_check_upkeep_tx.performData)}"]
perform_upkeep_tx [type=ethtx
minConfirmations=0
to="$(jobSpec.contractAddress)"
from="[$(jobSpec.fromAddress)]"
evmChainID="$(jobSpec.evmChainID)"
data="$(encode_perform_upkeep_tx)"
gasLimit="$(jobSpec.performUpkeepGasLimit)"
txMeta="{\\"jobID\\":$(jobSpec.jobID)}"]
encode_check_upkeep_tx -> check_upkeep_tx -> decode_check_upkeep_tx -> encode_perform_upkeep_tx -> perform_upkeep_tx
"""
Call the name
whatever you want; contractAddress
is the address of the keeper registry; and fromAddress
is your node's eth address.