Existing Job Example specs
This is an example v2 (TOML) job spec for returning gas price using etherscan in one Chainlink API Call. Note that the job :
- Uses an external adapter to consume the etherscan API: EtherScan External Adapter. Note that this is done using the bridge task:
type="bridge" name="etherscan"
. - Calls the
fulfillOracleRequest2
function. If you are a node operator, use an Operator contract with this job.
To test this job spec from a smart contract, see this Example.
type = "directrequest"
schemaVersion = 1
name = "Etherscan gas price"
maxTaskDuration = "0s"
contractAddress = "YOUR_ORACLE_CONTRACT_ADDRESS"
minIncomingConfirmations = 0
observationSource = """
decode_log [type="ethabidecodelog"
abi="OracleRequest(bytes32 indexed specId, address requester, bytes32 requestId, uint256 payment, address callbackAddr, bytes4 callbackFunctionId, uint256 cancelExpiration, uint256 dataVersion, bytes data)"
data="$(jobRun.logData)"
topics="$(jobRun.logTopics)"]
etherscanFast [type="bridge" name="etherscan" requestData="{\\"data\\": {\\"endpoint\\": \\"gasprice\\", \\"speed\\":\\"fast\\" }}"]
etherscanAverage [type="bridge" name="etherscan" requestData="{\\"data\\": {\\"endpoint\\": \\"gasprice\\", \\"speed\\":\\"medium\\" }}"]
etherscanSafe [type="bridge" name="etherscan" requestData="{\\"data\\": {\\"endpoint\\": \\"gasprice\\", \\"speed\\":\\"safe\\" }}"]
decode_log -> etherscanFast
decode_log -> etherscanAverage
decode_log -> etherscanSafe
gasPriceFast [type=jsonparse path="data,result"]
gasPriceAverage [type=jsonparse path="data,result"]
gasPriceSafe [type=jsonparse path="data,result"]
etherscanFast -> gasPriceFast
etherscanAverage -> gasPriceAverage
etherscanSafe -> gasPriceSafe
gasPriceFast -> encode_data
gasPriceAverage -> encode_data
gasPriceSafe -> encode_data
encode_data [type=ethabiencode abi="(bytes32 _requestId, uint256 _fastPrice, uint256 _averagePrice, uint256 _safePrice)"
data="{\\"_requestId\\": $(decode_log.requestId),\\"_fastPrice\\": $(gasPriceFast),\\"_averagePrice\\": $(gasPriceAverage),\\"_safePrice\\": $(gasPriceSafe)}"]
encode_tx [type=ethabiencode
abi="fulfillOracleRequest2(bytes32 requestId, uint256 payment, address callbackAddress, bytes4 callbackFunctionId, uint256 expiration, bytes calldata data)"
data="{\\"requestId\\": $(decode_log.requestId), \\"payment\\": $(decode_log.payment), \\"callbackAddress\\": $(decode_log.callbackAddr), \\"callbackFunctionId\\": $(decode_log.callbackFunctionId), \\"expiration\\": $(decode_log.cancelExpiration), \\"data\\": $(encode_data)}"]
submit_tx [type=ethtx to="YOUR_ORACLE_CONTRACT_ADDRESS" data="$(encode_tx)"]
encode_data -> encode_tx -> submit_tx
"""