Actions

Direct request

From Chainlink Community Wiki

Revision as of 07:49, 7 April 2022 by Reggie (talk | contribs)

Direct request

Chainlink Price Feed History

We've broken the history out into contract-based milestones.

  • Direct Request / Runlog (DR)
  • Flux Monitor (FM)
  • Offchain Reporting (OCR)
  • ??? (what could be next)

If we have left anything out, please feel free to reach out and help contribute to this wiki.

 

Price Feeds: Direct Request / Runlog (DR)

<a href="https://docs.chain.link/docs/jobs/types/direct-request/">Official Chainlink Docs for Direct Request</a>

The first iteration, and quite possibly the most adaptive, of Chainlink contract was the Direct Request, also referred to as Runlog, model.

This deployment methodology was not specifically designed for price feeds, rather it was designed to enable a wide range of data to be provided on-chain.
As such, it was easy to deploy and maintain, but it was not able to scale efficiently.
Once DeFi protocols started seeing significant levels of adoption, the number of Price Feeds as well as the rate at which they updated started to increase rapidly.

This section will cover the history of the Direct Request Price Feeds, using the first ever contract ( ETH / USD) as the example.

 

The First Ever Price Feed: ETH / USD 

The original ETH / USD Price Feed was deployed at address <a href="https://etherscan.io/address/0x79febf6b9f76853edbcbc913e6aae8232cfb9de9#readContract">0x79fEbF6B9F76853EDBcBc913e6aAE8232cFB9De9</a> at transaction address <a href="https://etherscan.io/tx/0x9f2791fdc6b1654d593d3ce99a025c0da375541334e26d4ea9215c9cac8a933b">0x9f2791fdc6b1654d593d3ce99a025c0da375541334e26d4ea9215c9cac8a933b</a>.

The first three node operators were Fiews, LinkPool, and Chainlink. Fiews and Link Pool were community members that had made contributions to the Chainlink network before the mainnet launch.

Runlog contracts, also referred to as Direct Request contracts, require that an on-chain request be sent to each Chainlink Node Operator (how this operates is covered in more detail in the RunLog section of the wiki).

As a result of this requirement, the Chainlink Deviator / Utility Node was built. This Chainlink Node had just one purpose; to monitor the price of ETH / USD.  When the price of ETH / USD deviated above a specified threshold, a request was sent to each Node Operator's Oracle.sol contract. This then triggered a job run on each of the Nodes, which resulted in an updated price on-chain.

 

Direct Request Operation

The timeline for these events is as follows:

 

If you are a more visual person, the below diagram may make more sense.

An important note, is that the diagram shows just one Chainlink Node, the ETH / USD price feed used three upon launch, then moved to support nine node operators.

<figure class="image image_resized" style="width:27.55%;"><img src="/eth-usd/runlog-diagram.png"></figure>

 

Once all of the above took place, the price feed for ETH / USD was updated.

 

Price Feeds: Limitations of Direct Request / Runlog

While the Direct Request model was proven to be reliable and supports many more use cases beyond Price Feeds , it was not able to scale very well, and had a single point of failure – the Deviator / Utility Node.

 

Issues with Scaling

Each Chainlink Price Feed, with just three Node Operators, required at least 6 on-chain transactions.

This started exposing potential issues once Chainlink moved each Price Feed from three Node Operators up to nine, we saw that number of on-chain transactions increase to 18 for each update, for each price pair.

In times of high market volatility, such as <a href="https://www.coindesk.com/markets/2020/03/12/bitcoin-hits-10-month-low-below-6k-as-stocks-plunge-in-massive-sell-off/">Black Thursday</a>, we saw many people competing with Chainlink Node Operators to get transactions included in blocks.  This resulted in exorbitant transaction fees and very high levels of network congestion.

 

We can see that the Ethereum community was not enjoying the fact that they were competing with the Deviator / Utility node for blockspace.

<figure class="image"><img src="https://wiki.dextrac.com/eth-usd/screenshot_at_2022-02-21_10-55-52.png"></figure>

 

In addition to the number of transactions per-update, we also see that the Deviator / Utility Node is required to send a single request to each Node Operator's Oracle.sol contract.

This was another major cost for operating the Price Feeds, while also being a single point of failure.

 

Issues with Redundancy

With the initial deployment of the Price Feeds, Chainlink was required to manage and maintain the Deviator / Utility Node.

In this model, it was the only way to push requests to the Node Operators to update the ETH / USD price.  If the Deviator / Utility Node went offline, ran out of funds, or was rendered inoperable in any way, the Price Feeds would be unable to update.

This was known to be a point of failure, and addressing it was the highest priority for the team at Chainlink.

The solution?
FluxMonitor.

Chainlink ecosystem resources

XXTEXTXX

Timeline

Date Media Author Title
N/A Official Docs Chainlink Direct Request Jobs: Official Chainlink Documentation
XXXX XXXX XXXX []

Educational

Date Media Author Title
XXXX XXXX XXXX []
XXXX XXXX XXXX []
XXXX XXXX XXXX []
XXXX XXXX XXXX []