# Existing Job Example specs
Source: https://docs.chain.link/chainlink-nodes/job-specs/direct-request-existing-job

> For the complete documentation index, see [llms.txt](/llms.txt).

This is an example v2 (TOML) job spec for returning gas price using [etherscan](https://docs.etherscan.io/api-endpoints/gas-tracker#get-gas-oracle) in one Chainlink API Call. Note that the job :

- Uses an [external adapter](/chainlink-nodes/external-adapters/external-adapters) to consume the etherscan API: [EtherScan External Adapter](https://github.com/smartcontractkit/external-adapters-js/tree/develop/packages/sources/etherscan). Note that this is done using the [bridge](/chainlink-nodes/oracle-jobs/all-tasks/#bridge-task) task: `type="bridge" name="etherscan"`.
- Calls the `fulfillOracleRequest2` function. If you are a node operator, use an [Operator contract](https://github.com/smartcontractkit/chainlink/blob/contracts-v1.3.0/contracts/src/v0.8/operatorforwarder/Operator.sol) with this job.

To test this job spec from a smart contract, see this [Example](/any-api/get-request/examples/existing-job-request).

```toml
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
"""

```