diff --git a/src/content/any-api/api-reference.mdx b/src/content/any-api/api-reference.mdx
index c4832f9e5c5..733d554e2c6 100644
--- a/src/content/any-api/api-reference.mdx
+++ b/src/content/any-api/api-reference.mdx
@@ -11,8 +11,8 @@ import AnyApiCallout from "@features/any-api/common/AnyApiCallout.astro"
@@ -20,23 +20,23 @@ or `Operator` [contracts](https://github.com/smartcontractkit/chainlink/blob/dev
### Methods
-| Name | Description |
-| :------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [setChainlinkOracle](#setchainlinkoracle) | Sets the stored address for the oracle contract |
-| [setChainlinkToken](#setchainlinktoken) | Sets the stored address for the LINK token |
-| [buildChainlinkRequest](#buildchainlinkrequest) | Instantiates a Request object with the required parameters |
-| [buildOperatorRequest](#buildoperatorrequest) | Instantiates a Request object with the required parameters. **Note** the oracle must be an `Operator` [contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol) |
-| [sendChainlinkRequest](#sendchainlinkrequest) | Sends the request payload to the stored address stored as chainlinkOracleAddress |
-| [sendChainlinkRequestTo](#sendchainlinkrequestto) | Sends a request to the oracle address specified |
-| [sendOperatorRequest](#sendoperatorrequest) | Sends the request payload to the stored address stored as chainlinkOracleAddress. **Note** the oracle must be an `Operator` [contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol) |
-| [sendOperatorRequestTo](#sendoperatorrequestto) | Sends a request to the oracle address specified. **Note** the oracle must be an `Operator` [contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol) |
-| [validateChainlinkCallback](#validatechainlinkcallback) | Secures the fulfillment callback to make sure it is only called by permissioned senders |
-| [addChainlinkExternalRequest](#addchainlinkexternalrequest) | Allows a Chainlinked contract to track unfulfilled requests that it hasn't created itself |
-| [cancelChainlinkRequest](#cancelchainlinkrequest) | Cancels Chainlink requests attempting to contact an unresponsive node |
-| [useChainlinkWithENS](#usechainlinkwithens) | Looks up the addresses of the LINK token and Oracle contract through ENS |
-| [updateChainlinkOracleWithENS](#updatechainlinkoraclewithens) | Updates the stored oracle address with the latest address resolved through ENS |
-| [chainlinkTokenAddress](#chainlinktokenaddress) | Returns the stored address of the LINK token |
-| [chainlinkOracleAddress](#chainlinkoracleaddress) | Returns the stored address of the oracle contract |
+| Name | Description |
+| :------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [setChainlinkOracle](#setchainlinkoracle) | Sets the stored address for the oracle contract |
+| [setChainlinkToken](#setchainlinktoken) | Sets the stored address for the LINK token |
+| [buildChainlinkRequest](#buildchainlinkrequest) | Instantiates a Request object with the required parameters |
+| [buildOperatorRequest](#buildoperatorrequest) | Instantiates a Request object with the required parameters. **Note** the oracle must be an `Operator` [contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol) |
+| [sendChainlinkRequest](#sendchainlinkrequest) | Sends the request payload to the stored address stored as chainlinkOracleAddress |
+| [sendChainlinkRequestTo](#sendchainlinkrequestto) | Sends a request to the oracle address specified |
+| [sendOperatorRequest](#sendoperatorrequest) | Sends the request payload to the stored address stored as chainlinkOracleAddress. **Note** the oracle must be an `Operator` [contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol) |
+| [sendOperatorRequestTo](#sendoperatorrequestto) | Sends a request to the oracle address specified. **Note** the oracle must be an `Operator` [contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol) |
+| [validateChainlinkCallback](#validatechainlinkcallback) | Secures the fulfillment callback to make sure it is only called by permissioned senders |
+| [addChainlinkExternalRequest](#addchainlinkexternalrequest) | Allows a Chainlinked contract to track unfulfilled requests that it hasn't created itself |
+| [cancelChainlinkRequest](#cancelchainlinkrequest) | Cancels Chainlink requests attempting to contact an unresponsive node |
+| [useChainlinkWithENS](#usechainlinkwithens) | Looks up the addresses of the LINK token and Oracle contract through ENS |
+| [updateChainlinkOracleWithENS](#updatechainlinkoraclewithens) | Updates the stored oracle address with the latest address resolved through ENS |
+| [chainlinkTokenAddress](#chainlinktokenaddress) | Returns the stored address of the LINK token |
+| [chainlinkOracleAddress](#chainlinkoracleaddress) | Returns the stored address of the oracle contract |
### Events
@@ -114,7 +114,7 @@ constructor(address _link)
### buildChainlinkRequest
Use `buildOperatorRequest` [function](#buildoperatorrequest) if the oracle is an `Operator`
-[contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+[contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).
{/* prettier-ignore */}
```solidity
@@ -151,7 +151,7 @@ is that `buildOperatorRequest` does not allow setting up the address of the call
is set to the address of the calling contract.
It is recommended to use `buildOperatorRequest` but make sure the oracle you are contacting is an `Operator`
-[contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+[contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).
{/* prettier-ignore */}
```solidity
@@ -181,7 +181,7 @@ function requestPrice()
### sendChainlinkRequest
Use `sendOperatorRequest` [function](#sendoperatorrequest) if the oracle is an `Operator`
-[contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+[contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).
{/* prettier-ignore */}
```solidity
@@ -213,7 +213,7 @@ function requestPrice()
### sendChainlinkRequestTo
Use `sendOperatorRequestTo` [function](#sendoperatorrequestto) if the oracle is an `Operator`
-[contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+[contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).
{/* prettier-ignore */}
```solidity
@@ -245,7 +245,7 @@ function requestPriceFrom(address _oracle)
This function is similar to `sendChainlinkRequest`[function](#sendchainlinkrequest).
It is recommended to use `sendOperatorRequest` but make sure the oracle you are contacting is an `Operator`
-[contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+[contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).
{/* prettier-ignore */}
```solidity
@@ -278,7 +278,7 @@ function requestPrice()
This function is similar to `sendChainlinkRequestTo`[function](#sendchainlinkrequestto).
It is recommended to use `sendOperatorRequestTo`, but make sure the oracle you are contacting is an `Operator`
-[contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+[contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).
{/* prettier-ignore */}
```solidity
@@ -421,7 +421,7 @@ constructor(){
@@ -445,7 +445,7 @@ function updateOracleAddressToLatest() public {
diff --git a/src/content/any-api/testnet-oracles.mdx b/src/content/any-api/testnet-oracles.mdx
index f3461ac0157..f4753c23391 100644
--- a/src/content/any-api/testnet-oracles.mdx
+++ b/src/content/any-api/testnet-oracles.mdx
@@ -21,7 +21,7 @@ To retrieve the LINK token address or get faucet details for your testnet of cho
## Operator Contracts
-Testnet [Operator contracts](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol) are deployed and maintained on the following networks:
+Testnet [Operator contracts](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol) are deployed and maintained on the following networks:
| Testnet | Oracle Address |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- |
diff --git a/src/content/architecture-overview/architecture-decentralized-model.mdx b/src/content/architecture-overview/architecture-decentralized-model.mdx
index 2a4c9d6735d..943323e9195 100644
--- a/src/content/architecture-overview/architecture-decentralized-model.mdx
+++ b/src/content/architecture-overview/architecture-decentralized-model.mdx
@@ -62,13 +62,13 @@ Offchain applications can also consume data feeds. See the Javascript and Python
Proxy contracts are onchain proxies that point to the aggregator for a particular data feed. Using proxies enables the underlying aggregator to be upgraded without any service interruption to consuming contracts.
-Proxy contracts can vary from one data feed to another, but the [`AggregatorProxy.sol` contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/dev/AggregatorProxy.sol) on Github is a common example.
+Proxy contracts can vary from one data feed to another, but the [`AggregatorProxy.sol` contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/dev/AggregatorProxy.sol) on Github is a common example.
### Aggregator
An aggregator is the contract that receives periodic data updates from the oracle network. Aggregators store aggregated data onchain so that consumers can retrieve it and act upon it within the same transaction.
-You can access this data using the Data Feed address and the [`AggregatorV3Interface` contract](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol).
+You can access this data using the Data Feed address and the [`AggregatorV3Interface` contract](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol).
Aggregators receive updates from the oracle network only when the **Deviation Threshold** or **Heartbeat Threshold** triggers an update during an aggregation round. The first condition that is met triggers an update to the data.
diff --git a/src/content/ccip/supported-networks/index.mdx b/src/content/ccip/supported-networks/index.mdx
index 3f2c918ff63..f71e9fd1dc1 100644
--- a/src/content/ccip/supported-networks/index.mdx
+++ b/src/content/ccip/supported-networks/index.mdx
@@ -2,6 +2,7 @@
section: ccip
date: Last Modified
title: "CCIP Supported Networks"
+isIndex: true
---
Click on the following links to find the latest configuration for Chainlink CCIP:
diff --git a/src/content/chainlink-automation/guides/log-trigger.mdx b/src/content/chainlink-automation/guides/log-trigger.mdx
index 02bb7aa8878..7d42c9aa1dc 100644
--- a/src/content/chainlink-automation/guides/log-trigger.mdx
+++ b/src/content/chainlink-automation/guides/log-trigger.mdx
@@ -78,7 +78,7 @@ Select **Log Trigger**.
Your upkeeps will be protected against logs that are emitted during a reorg.
-1. **Provide the address of your [Automation-compatible contract](/chainlink-automation/guides/compatible-contracts)** that you want to automate. In this case, we will paste the address of `CountWithLog.sol`. This contract must follow the format of the [ILogAutomation interface](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/interfaces/ILogAutomation.sol) to ensure Automation nodes can interact with your contract as expected.
+1. **Provide the address of your [Automation-compatible contract](/chainlink-automation/guides/compatible-contracts)** that you want to automate. In this case, we will paste the address of `CountWithLog.sol`. This contract must follow the format of the [ILogAutomation interface](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/interfaces/ILogAutomation.sol) to ensure Automation nodes can interact with your contract as expected.
diff --git a/src/content/chainlink-automation/reference/automation-contracts.mdx b/src/content/chainlink-automation/reference/automation-contracts.mdx
index 48a81e0b50a..b2fd12ef411 100644
--- a/src/content/chainlink-automation/reference/automation-contracts.mdx
+++ b/src/content/chainlink-automation/reference/automation-contracts.mdx
@@ -9,25 +9,25 @@ whatsnext: { "Automation Architecture": "/chainlink-automation/concepts/automati
Automation Nodes use the following contracts. You can find them in the [Chainlink repository](https://github.com/smartcontractkit/chainlink/tree/develop/contracts/src/v0.8/automation). For details about how to use them, visit the [Creating Compatible Contracts](/chainlink-automation/guides/compatible-contracts) guide. To understand the logic behind these contracts, visit the [Architecture](/chainlink-automation/concepts/automation-architecture) page.
-- [`AutomationCompatible.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/AutomationCompatible.sol): Imports the following contracts:
- - [`AutomationBase.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/AutomationBase.sol): Enables the use of the `cannotExecute` modifier. Import this contract if you need for this modifier. See the [`checkUpkeep` function](/chainlink-automation/reference/automation-interfaces#checkupkeep-function) for details.
+- [`AutomationCompatible.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/AutomationCompatible.sol): Imports the following contracts:
+ - [`AutomationBase.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/AutomationBase.sol): Enables the use of the `cannotExecute` modifier. Import this contract if you need for this modifier. See the [`checkUpkeep` function](/chainlink-automation/reference/automation-interfaces#checkupkeep-function) for details.
- [`AutomationCompatibleInterface.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/interfaces/AutomationCompatibleInterface.sol): The interface to be implemented in order to make your contract compatible. Import this contract for type safety.
## AutomationRegistry.sol
-[`AutomationRegistry2_1.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/v2_1/KeeperRegistry2_1.sol): The registry contract that tracks all registered Upkeeps and the Automation Nodes that can perform them. _Note_: As Chainlink Automation continues adding new functionalities, a new **Automation Registry** is deployed and the contract address may change.
+[`AutomationRegistry2_1.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/v2_1/KeeperRegistry2_1.sol): The registry contract that tracks all registered Upkeeps and the Automation Nodes that can perform them. _Note_: As Chainlink Automation continues adding new functionalities, a new **Automation Registry** is deployed and the contract address may change.
## AutomationRegistrar.sol
-[`AutomationRegistrar2_1.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/v2_1/AutomationRegistrar2_1.sol): The Registrar contract governs the registration of new Upkeeps on the associated `AutomationRegistry` contract. Users who want to register Upkeeps by directly calling the deployed contract have to call the Transfer-and-Call function on the respective ERC-677 LINK contract configured on the Registrar and ensure they pass the correct encoded function call and inputs.
+[`AutomationRegistrar2_1.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/v2_1/AutomationRegistrar2_1.sol): The Registrar contract governs the registration of new Upkeeps on the associated `AutomationRegistry` contract. Users who want to register Upkeeps by directly calling the deployed contract have to call the Transfer-and-Call function on the respective ERC-677 LINK contract configured on the Registrar and ensure they pass the correct encoded function call and inputs.
## UpkeepTranscoder.sol
-[`UpkeepTranscode4_0.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/dev/automation/2_1/UpkeepTranscoder4_0.sol) allows the conversion of upkeep data from previous Automation registry versions 1.2, 1.3, and 2.0 to registry 2.1.
+[`UpkeepTranscode4_0.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/v2_1/UpkeepTranscoder4_0.sol) allows the conversion of upkeep data from previous Automation registry versions 1.2, 1.3, and 2.0 to registry 2.1.
## AutomationForwarder.sol
-[`AutomationForwarder.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/v2_1/AutomationForwarder.sol) is a relayer that sits between the registry and the customer's target contract. The purpose of the forwarder is to give customers a consistent address to authorize against that stays consistent between migrations. The Forwarder also exposes the registry address, so that users who want to programatically interact with the registry can do so. The `forward` function in this contract is called by the registry and forwards the call to the target.
+[`AutomationForwarder.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/AutomationForwarder.sol) is a relayer that sits between the registry and the customer's target contract. The purpose of the forwarder is to give customers a consistent address to authorize against that stays consistent between migrations. The Forwarder also exposes the registry address, so that users who want to programatically interact with the registry can do so. The `forward` function in this contract is called by the registry and forwards the call to the target.
## CronUpkeepFactory.sol
diff --git a/src/content/chainlink-automation/reference/automation-interfaces.mdx b/src/content/chainlink-automation/reference/automation-interfaces.mdx
index 88905085804..79c0ed65a65 100644
--- a/src/content/chainlink-automation/reference/automation-interfaces.mdx
+++ b/src/content/chainlink-automation/reference/automation-interfaces.mdx
@@ -26,7 +26,7 @@ Your Automation-compatible contracts may use the following interfaces. You can f
## AutomationCompatibleInterface
-Custom logic upkeeps need to use the [`AutomationCompatibleInterface.sol`](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/interfaces/AutomationCompatibleInterface.sol) interface. Click on one of the functions below to understand its parameters and limits.
+Custom logic upkeeps need to use the [`AutomationCompatibleInterface.sol`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/automation/interfaces/AutomationCompatibleInterface.sol) interface. Click on one of the functions below to understand its parameters and limits.
| Function Name | Description |
| --------------- | ------------------------------------------------------------------------------------ |
diff --git a/src/content/chainlink-functions/getting-started.mdx b/src/content/chainlink-functions/getting-started.mdx
index 7c4c19fc1e8..f016dd41b13 100644
--- a/src/content/chainlink-functions/getting-started.mdx
+++ b/src/content/chainlink-functions/getting-started.mdx
@@ -230,7 +230,7 @@ Chainlink Functions is capable of much more than just retrieving data. Try one o
-- To write a Chainlink Functions consumer contract, your contract must import [FunctionsClient.sol](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/dev/1_0_0/FunctionsClient.sol) and [FunctionsRequest.sol](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/dev/1_0_0/libraries/FunctionsRequest.sol). You can read the API references: [FunctionsClient](/chainlink-functions/api-reference/functions-client) and [FunctionsRequest](/chainlink-functions/api-reference/functions-request).
+- To write a Chainlink Functions consumer contract, your contract must import [FunctionsClient.sol](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol) and [FunctionsRequest.sol](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol). You can read the API references: [FunctionsClient](/chainlink-functions/api-reference/functions-client) and [FunctionsRequest](/chainlink-functions/api-reference/functions-request).
These contracts are available in an NPM package so that you can import them from within your project.
diff --git a/src/content/chainlink-nodes/contracts/forwarder.mdx b/src/content/chainlink-nodes/contracts/forwarder.mdx
index 769ec4bcf8b..0935f4cb096 100644
--- a/src/content/chainlink-nodes/contracts/forwarder.mdx
+++ b/src/content/chainlink-nodes/contracts/forwarder.mdx
@@ -14,7 +14,7 @@ In the EVM world, [externally-owned account](https://ethereum.org/en/developers/
To solve these challenges, we introduced two major features that will allow node operators to set up different transaction-sending strategies more securely while lowering their infrastructure costs:
- Chainlink nodes support multiple EOAs.
-- [Forwarder](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/AuthorizedForwarder.sol) contracts allow a node operator to manage multiple EOAs and make them look like a single address. If you use a web2 analogy, forwarder contracts act like a reverse proxy server where the user is served by the same address and does not see which server the traffic is coming from. To do so, nodes call the [forward](#forward) function on the forwarder contract.
+- [Forwarder](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/AuthorizedForwarder.sol) contracts allow a node operator to manage multiple EOAs and make them look like a single address. If you use a web2 analogy, forwarder contracts act like a reverse proxy server where the user is served by the same address and does not see which server the traffic is coming from. To do so, nodes call the [forward](#forward) function on the forwarder contract.
Combining multiple EOAs and forwarder contracts allows greater flexibility and security in terms of design:
@@ -25,7 +25,7 @@ Combining multiple EOAs and forwarder contracts allows greater flexibility and s
## API Reference
-The forwarder contract inherits [AuthorizedReceiver.sol](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/AuthorizedReceiver.sol) and [ConfirmedOwnerWithProposal.sol](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/ConfirmedOwnerWithProposal.sol). Read the [Receiver](/chainlink-nodes/contracts/receiver) and [Ownership](/chainlink-nodes/contracts/ownership) API references to learn more.
+The forwarder contract inherits [AuthorizedReceiver.sol](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/AuthorizedReceiver.sol) and [ConfirmedOwnerWithProposal.sol](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/ConfirmedOwnerWithProposal.sol). Read the [Receiver](/chainlink-nodes/contracts/receiver) and [Ownership](/chainlink-nodes/contracts/ownership) API references to learn more.
### Methods
diff --git a/src/content/chainlink-nodes/contracts/operator.mdx b/src/content/chainlink-nodes/contracts/operator.mdx
index 9d92605a2c3..5e769ef5088 100644
--- a/src/content/chainlink-nodes/contracts/operator.mdx
+++ b/src/content/chainlink-nodes/contracts/operator.mdx
@@ -8,7 +8,7 @@ import { Aside } from "@components"
Oracles must deploy an onchain contract to handle requests made through the LINK token (Read [Basic Request Model](/architecture-overview/architecture-request-model) to learn more).
-When the _Basic Request_ model was introduced, node operators had to deploy [Oracle contracts](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.4/Oracle.sol). However, these come with some limitations, and soon, we introduced [operator contracts](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol).
+When the _Basic Request_ model was introduced, node operators had to deploy [Oracle contracts](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.4/Oracle.sol). However, these come with some limitations, and soon, we introduced [operator contracts](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.7/Operator.sol).