Actions

Analytics eth feeds: Difference between revisions

From Chainlink Community Wiki

No edit summary
Line 2: Line 2:


=='''Ethereum OCR Feed Queries'''==
=='''Ethereum OCR Feed Queries'''==
These are queries to retrieve on-chain stats about Ethereum OCR feeds and node operator transmissions.
This query allows us to visualize Chainlink OCR feed activity and compare a single node operator's performance against the whole.


Full query can be found here: https://dune.com/queries/843986


<h4>'''Ethereum Mainnet: Total OCR Feeds (counter):'''</h4>
Lets break down the query to understand the data it is retrieving.
NOTE: Before continuing with the break down, it is recommended that you have a basic understanding of SQL language queries and how to interact with Ethereum smart contracts.
 
'''Helpful Resources:'''
* https://www.w3schools.com/sql/default.asp
* https://ethereum.org/en/developers/docs
 
<p>
<h4>'''Getting a list of all Chainlink OCR contracts:'''</h4>
 
In this subquery, generate a list of all contracts that a set of well-known node operators are transmitting to within the '''''ethereum."transactions"''''' table. In this case, the node operators chosen are Chainlayer, DexTrac, Fiews and Linkpool. The '''''substring''''' filter of ''''''\xc9807539'''''' is used to only retrieve transactions from the nodes with the Transmit method. Since each node operator will interact with a contract multiple times, only one occurrence of the contract address is needed in the final list. The '''''all_ocr_contracts''''' alias (can be changed to any desired name) will hold list of contracts for later use in the query.


<small><pre style="white-space:pre-wrap; width:100%; border:0px solid lightgrey; background:black; color:yellow;">
<small><pre style="white-space:pre-wrap; width:100%; border:0px solid lightgrey; background:black; color:yellow;">
-- **************************************************
    all_ocr_contracts AS (
-- (1) Within the ethereum."transactions" table, lookup the individual OCR contracts being transmitted to by nodes.
      SELECT
-- (2) Use a random mix of well-known node operators to get all deployed OCR feeds.
        DISTINCT("to")
-- (3) Filter by Transmit method (0xc9807539) transactions.
      FROM
-- **************************************************
        ethereum."transactions"
SELECT COUNT(DISTINCT("to"))
      WHERE
FROM ethereum."transactions" -- (1)
        "from" in (
WHERE
          '\xb976d01275b809333e3efd76d1d31fe9264466d0', -- DexTrac
    "from" in (
          '\xc74cE67BfC623c803D48AFc74a09A6FF6b599003', -- Chainlayer
        '\xb976d01275b809333e3efd76d1d31fe9264466d0', -- DexTrac
          '\x218B5a7861dBf368D09A84E0dBfF6C6DDbf99DB8', -- Fiews
        '\xc74cE67BfC623c803D48AFc74a09A6FF6b599003', -- Chainlayer
          '\xcC29be4Ca92D4Ecc43C8451fBA94C200B83991f6' -- LinkPool
        '\x218B5a7861dBf368D09A84E0dBfF6C6DDbf99DB8', -- Fiews
         )
        '\xcC29be4Ca92D4Ecc43C8451fBA94C200B83991f6' -- LinkPool
        AND substring("data":: bytea FROM 0 FOR 5):: bytea = '\xc9807539'
         ) -- (2)
    )
    AND
    substring("data"::bytea FROM 0 FOR 5)::bytea = '\xc9807539' -- (3)
</pre></small>
</pre></small>
</p>


<p>
<h4>'''Getting a list of Chainlink OCR contracts for a single node:'''</h4>


<h4>'''Ethereum Mainnet: Total Successful Transmissions by Month (chart):'''</h4>
As in the above section, generate a list of all contracts that a single node operator is transmitting to within the '''''ethereum."transactions"''''' table. In this case, the node operator chosen is DexTrac. The '''''substring''''' filter of ''''''\xc9807539'''''' is again used to only retrieve transactions from the nodes with the Transmit method. Since the node operator will interact with a contract multiple times, only one occurrence of the contract address is needed in the final list. The '''''dt_ocr_contracts''''' alias (can be changed to any desired name) will hold list of contracts for later use in the query.


<small><pre style="white-space:pre-wrap; width:100%; border:0px solid lightgrey; background:black; color:yellow;">
<small><pre style="white-space:pre-wrap; width:100%; border:0px solid lightgrey; background:black; color:yellow;">
SELECT
     dt_ocr_contracts AS (
"tx_date",
         SELECT
SUM("valid_runs") as "Transmits"
          DISTINCT("to")
FROM (
        FROM
    SELECT date_trunc('month', block_time) as tx_date, COUNT(CASE WHEN success = true THEN 1 END) as valid_runs
          ethereum."transactions"
     FROM ethereum."transactions"
    WHERE "to" IN (
         SELECT DISTINCT("to") FROM ethereum."transactions"
         WHERE
         WHERE
            "from" = '\xb976d01275b809333e3efd76d1d31fe9264466d0' AND
          "from" in (
            substring("data"::bytea FROM 0 FOR 5)::bytea = '\xc9807539'
            '\xb976d01275b809333e3efd76d1d31fe9264466d0' -- DexTrac
    ) AND
          )
    substring("data"::bytea FROM 0 FOR 5)::bytea = '\xc9807539' AND
          AND substring("data":: bytea FROM 0 FOR 5):: bytea = '\xc9807539'
    block_time >= '2020-08-08'
      )
    GROUP BY tx_date
    ORDER BY tx_date DESC
) x
GROUP BY "tx_date"
</pre></small>
</pre></small>
</p>

Revision as of 22:02, 26 May 2022

EthereumLogo.png

Ethereum OCR Feed Queries

This query allows us to visualize Chainlink OCR feed activity and compare a single node operator's performance against the whole.

Full query can be found here: https://dune.com/queries/843986

Lets break down the query to understand the data it is retrieving. NOTE: Before continuing with the break down, it is recommended that you have a basic understanding of SQL language queries and how to interact with Ethereum smart contracts.

Helpful Resources:

Getting a list of all Chainlink OCR contracts:

In this subquery, generate a list of all contracts that a set of well-known node operators are transmitting to within the ethereum."transactions" table. In this case, the node operators chosen are Chainlayer, DexTrac, Fiews and Linkpool. The substring filter of '\xc9807539' is used to only retrieve transactions from the nodes with the Transmit method. Since each node operator will interact with a contract multiple times, only one occurrence of the contract address is needed in the final list. The all_ocr_contracts alias (can be changed to any desired name) will hold list of contracts for later use in the query.

    all_ocr_contracts AS (
      SELECT
        DISTINCT("to")
      FROM
        ethereum."transactions"
      WHERE
        "from" in (
          '\xb976d01275b809333e3efd76d1d31fe9264466d0', -- DexTrac
          '\xc74cE67BfC623c803D48AFc74a09A6FF6b599003', -- Chainlayer
          '\x218B5a7861dBf368D09A84E0dBfF6C6DDbf99DB8', -- Fiews
          '\xcC29be4Ca92D4Ecc43C8451fBA94C200B83991f6' -- LinkPool
        )
        AND substring("data":: bytea FROM 0 FOR 5):: bytea = '\xc9807539'
    )

Getting a list of Chainlink OCR contracts for a single node:

As in the above section, generate a list of all contracts that a single node operator is transmitting to within the ethereum."transactions" table. In this case, the node operator chosen is DexTrac. The substring filter of '\xc9807539' is again used to only retrieve transactions from the nodes with the Transmit method. Since the node operator will interact with a contract multiple times, only one occurrence of the contract address is needed in the final list. The dt_ocr_contracts alias (can be changed to any desired name) will hold list of contracts for later use in the query.

    dt_ocr_contracts AS (
        SELECT
          DISTINCT("to")
        FROM
          ethereum."transactions"
        WHERE
          "from" in (
            '\xb976d01275b809333e3efd76d1d31fe9264466d0' -- DexTrac
          )
          AND substring("data":: bytea FROM 0 FOR 5):: bytea = '\xc9807539'
      )