<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>WatchData</title>
        <link>https://paragraph.com/@gr0wth</link>
        <description>WatchData - API service for WEB 3.0.

</description>
        <lastBuildDate>Sat, 25 Jul 2026 03:27:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>WatchData</title>
            <url>https://storage.googleapis.com/papyrus_images/062e0a36d0354bf4478e82217881a1cfa26d6b5d6b4fcd7f9d7b9afe394b0000.png</url>
            <link>https://paragraph.com/@gr0wth</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[How can i get transfers using  watch_getTransfersByAddress?]]></title>
            <link>https://paragraph.com/@gr0wth/how-can-i-get-transfers-using-watch-gettransfersbyaddress</link>
            <guid>QyE92gJyprc0nc9jE4Sp</guid>
            <pubDate>Thu, 10 Mar 2022 15:50:06 GMT</pubDate>
            <description><![CDATA[Hello builders!If you have ever tried to get data on translations, you probably had to handle numerous block calls for a long time 😡 We at WatchData 👀 can give you the ability to simplify this approach and get this data in 1 API call you only need to know the address you want to track. With our data you can create many different services, such as your monitoring service (pictured below):Looks interesting?Well, let&apos;s look at the capabilities of the watch_getTransfersByAddress endpoint. ...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/55a4de3076a9d74bb4e46a49e4f65b15647ef060fb834e50bda010cc2dcc10be.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-hello-builders" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Hello builders!</h3><p>If you have ever tried to get data on translations, you probably had to handle numerous block calls for a long time 😡</p><p>We at WatchData 👀 can give you the ability to simplify this approach and get this data in 1 API call you only need to know the address you want to track. With our data you can create many different services, such as your monitoring service (pictured below):</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fb1af67e5b2fc8210343904e809b7de9b1677fc9aa0f7ca2ad365a14efe17624.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-looks-interesting" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Looks interesting?</h2><p>Well, let&apos;s look at the capabilities of the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/structured-data/transfers-new/watch_gettransfersbyaddress-new">watch_getTransfersByAddress</a> endpoint. To learn more, visit our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/34BlWNq">Documentation</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0ced46ea35de0a892a55a7ccb90e438401d2d79b7614922216fc9797ca2b744d.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>All you have to do is make a request and get information on how ETH and ERC20 transfers are received.</p><h3 id="h-lets-now-look-at-an-example-of-how-it-all-works" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Let&apos;s now look at an example of how it all works.</h3><p>Open the API client, we processed the request through Postman. If you&apos;re having trouble, check out our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/34BlWNq">Quick start guide</a> on how to get started with our API.</p><p>Request:</p><pre data-type="codeBlock" text="{
    &quot;id&quot;: 1,
    &quot;method&quot;: &quot;watch_getTransfersByAddress&quot;,
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;params&quot;: [
        {
        &quot;addresses&quot;: &quot;0xc7d15E3aE9442baD3E0B3689b835fDd035479B52&quot;,
        &quot;transferDirection&quot;: &quot;to&quot;,
        &quot;fromBlock&quot;: 1,
        &quot;offset&quot;: 0,
        &quot;limit&quot;: 100
    }
    ]
}
"><code><span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"method"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"watch_getTransfersByAddress"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"jsonrpc"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2.0"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"params"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
        <span class="hljs-punctuation">{</span>
        <span class="hljs-attr">"addresses"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xc7d15E3aE9442baD3E0B3689b835fDd035479B52"</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"transferDirection"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"to"</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"fromBlock"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"offset"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"limit"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">100</span>
    <span class="hljs-punctuation">}</span>
    <span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span>
</code></pre><ul><li><p>For example you want to monitor your address for sending transactions . Suppose it is <code>0xc7d15E3aE9442baD3E0B3689b835fDd035479B52</code>.</p></li><li><p>To get the transfers that were received at the specified address, add the parameter: &quot;<code>transferDirection</code>&quot;: &quot;<code>to</code>&quot;, and to get the transfers that were sent from this address, add the parameter &quot;<code>transferDirection</code>&quot;: &quot;<code>from</code>&quot;.</p></li></ul><blockquote><p>By the way, in the &quot;<code>addresses</code>&quot; parameter you can use several address values to get more information in one query, for example &quot;<code>addresses</code>&quot;: [&quot;<code>0xc7d15E3aE9442baD3E0B3689b835fDd035479B52</code>&quot;,&quot;<code>0x6aE6d807E57964D5DaC79CF07D43AA0B458CB0dB</code>&quot;],</p></blockquote><p>Now we make <strong>1 request</strong> to the API and get information on all transfers of a given address.</p><p>Let&apos;s find out what we get in response.</p><p>Response:</p><pre data-type="codeBlock" text="{
    &quot;id&quot;: 1,
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;result&quot;: [
        {
            &quot;blockNumber&quot;: 12591647,
            &quot;blockTimestamp&quot;: &quot;2021-06-08T04:07:30&quot;,
            &quot;transactionIndex&quot;: 25,
            &quot;logIndex&quot;: null,
            &quot;contractAddress&quot;: null,
            &quot;transferType&quot;: &quot;trx&quot;,
            &quot;from&quot;: &quot;0xea674fdde714fd979de3edf0f56aa9716b898ec8&quot;,
            &quot;to&quot;: &quot;0xc7d15e3ae9442bad3e0b3689b835fdd035479b52&quot;,
            &quot;value&quot;: 100055406833350373
        },
        {
            &quot;blockNumber&quot;: 12664741,
            &quot;blockTimestamp&quot;: &quot;2021-06-19T12:13:15&quot;,
            &quot;transactionIndex&quot;: 19,
            &quot;logIndex&quot;: null,
            &quot;contractAddress&quot;: null,
            &quot;transferType&quot;: &quot;trx&quot;,
            &quot;from&quot;: &quot;0xea674fdde714fd979de3edf0f56aa9716b898ec8&quot;,
            &quot;to&quot;: &quot;0xc7d15e3ae9442bad3e0b3689b835fdd035479b52&quot;,
            &quot;value&quot;: 100050819506085117
        },
        {
            &quot;blockNumber&quot;: 12731449,
            &quot;blockTimestamp&quot;: &quot;2021-06-29T21:56:32&quot;,
            &quot;transactionIndex&quot;: 115,
            &quot;logIndex&quot;: null,
            &quot;contractAddress&quot;: null,
            &quot;transferType&quot;: &quot;trx&quot;,
            &quot;from&quot;: &quot;0xea674fdde714fd979de3edf0f56aa9716b898ec8&quot;,
            &quot;to&quot;: &quot;0xc7d15e3ae9442bad3e0b3689b835fdd035479b52&quot;,
            &quot;value&quot;: 100022202551483258
 ............................................................................
        }
    ]
}
"><code><span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"jsonrpc"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2.0"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"result"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
        <span class="hljs-punctuation">{</span>
            <span class="hljs-attr">"blockNumber"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12591647</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"blockTimestamp"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2021-06-08T04:07:30"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"transactionIndex"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">25</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"logIndex"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"contractAddress"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"transferType"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"trx"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"from"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xea674fdde714fd979de3edf0f56aa9716b898ec8"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"to"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xc7d15e3ae9442bad3e0b3689b835fdd035479b52"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"value"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">100055406833350373</span>
        <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
        <span class="hljs-punctuation">{</span>
            <span class="hljs-attr">"blockNumber"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12664741</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"blockTimestamp"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2021-06-19T12:13:15"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"transactionIndex"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">19</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"logIndex"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"contractAddress"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"transferType"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"trx"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"from"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xea674fdde714fd979de3edf0f56aa9716b898ec8"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"to"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xc7d15e3ae9442bad3e0b3689b835fdd035479b52"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"value"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">100050819506085117</span>
        <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
        <span class="hljs-punctuation">{</span>
            <span class="hljs-attr">"blockNumber"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12731449</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"blockTimestamp"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2021-06-29T21:56:32"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"transactionIndex"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">115</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"logIndex"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"contractAddress"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"transferType"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"trx"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"from"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xea674fdde714fd979de3edf0f56aa9716b898ec8"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"to"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xc7d15e3ae9442bad3e0b3689b835fdd035479b52"</span><span class="hljs-punctuation">,</span>
            <span class="hljs-attr">"value"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">100022202551483258</span>
 ............................................................................
        <span class="hljs-punctuation">}</span>
    <span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span>
</code></pre><p>We obtained a dataset that transmits information on transfers.</p><p>From these values, we can determine that the:</p><ul><li><p><code>transferType</code> &quot;<code>trx</code>&quot; - is the native ETH token transfer.</p></li><li><p><code>Value</code> - parameter gives the value with the uint256 format.</p></li></ul><p>To convert this value into a usable format, we need to divide it by <strong>10^18, because the decimals parameter at ETH = 18.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/50f286c3428c7acdeeacb70bd64e1c29425982e2e02aca4325201a76b75bf832.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>⚠️ For different tokens there is a different decimals parameter be careful!</strong></p><p>After processing the entire data set, we were able to get transfers that came and went from the address we specified. We have shown you just one example of how you can interact with a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/structured-data/transfers-new/watch_gettransfersbyaddress-new">watch_getTransfersByAddress</a> endpoint, try it yourself.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3CwltbD"><strong>Log in to WatchData</strong></a><strong>.</strong></p><p>Our API is available in a free format, you can read more about the limits here → <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/rate-limits">Documentation</a>.</p><ol><li><p>Join to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">our Discord server</a></p></li><li><p>Please leave your feedback in the #feedback channel. If you have any problems or you think that some functionality is not working correctly, we are waiting for your feedback.</p></li><li><p>Want a new feature or you miss some functionality, tell us about it in the #general channel. We are always open to your ideas!</p></li></ol><h2 id="h-helpful-links" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">HELPFUL LINKS</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/raw-data">Raw Data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/structured-data">Structured data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/Metrics-for-analysis-98dea0a697764bc6ae51643828449dc9">Metrics for analysis</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/For-Miners-70367c9705ae482c90674d070eedea61">For Miners</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Watchdata_web3">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
        <item>
            <title><![CDATA[How to connect to the Ethereum network using Web3.py]]></title>
            <link>https://paragraph.com/@gr0wth/how-to-connect-to-the-ethereum-network-using-web3-py</link>
            <guid>osScIbHhk2PZgMKtmgDq</guid>
            <pubDate>Thu, 10 Mar 2022 13:44:38 GMT</pubDate>
            <description><![CDATA[You can create Ethereum Applications in different programming languages. In this article, we will connect to the Ethereum network using Python. PreinstalledYou have Python (version >=3.5.3) and Pip3 installed on your system.Install web3.py (A Python wrapper for Ethereum node APIs).A text editorAdding web3.pyNote: We need Python version >=3.5.3 and install web3.py using pip3 install web3. Python and other library versions cause common installation problems. So if you face any problems, try set...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/177a4af9d8db85c129853593ad2d58f0a29b0a38521c40eb3713d20e4ed4d7ba.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>You can create Ethereum Applications in different programming languages. In this article, we will connect to the Ethereum network using Python.</p><p><strong>Preinstalled</strong></p><ul><li><p>You have Python (version &gt;=3.5.3) and Pip3 installed on your system.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum/web3.py">Install web3.py</a> (A Python wrapper for Ethereum node APIs).</p></li><li><p>A text editor</p></li></ul><h2 id="h-adding-web3py" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Adding web3.py</h2><p><strong>Note:</strong> We need Python version &gt;=3.5.3 and install web3.py using pip3 install web3.</p><p>Python and other library versions cause common installation problems. So if you face any problems, try <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://web3py.readthedocs.io/en/stable/troubleshooting.html">setting up a virtual environment and troubleshooting</a> the installation of web3.py.</p><h2 id="h-get-api-key-watchdata" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Get API Key WatchData</h2><p>To create an API key, you need to do the following steps: On the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://dashboard.watchdata.io/">Dashboard.watchdata.io</a> tab, click Create API key.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cdf367cdd3538e5c7bb3b21f353209aae9203efe89443e9c8941cd6f4eb3b5b3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Your API key will be automatically created.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/45840094b2965e87982e96188199aada872bae814ab966f41e0822938243bab3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Once you have created the API key, copy it and combine it with the HTTP provider&apos;s endpoint in this format:</p><pre data-type="codeBlock" text="https://ethereum.api.watchdata.io/node/jsonrpc?api_key=YOUR_API_KEY_HERE
"><code>https://ethereum.api.watchdata.io/node/jsonrpc?<span class="hljs-attr">api_key</span>=YOUR_API_KEY_HERE
</code></pre><p>For example:</p><pre data-type="codeBlock" text="https://ethereum.api.watchdata.io/node/jsonrpc?api_key=83ab245b-ae08-43a4-97db-85903d35652f
"><code>https://ethereum.api.watchdata.io/node/jsonrpc?<span class="hljs-attr">api_key</span>=<span class="hljs-number">83</span>ab245b-ae08-<span class="hljs-number">43</span>a4-<span class="hljs-number">97</span>db-<span class="hljs-number">85903</span>d35652f
</code></pre><h2 id="h-using-web3py" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Using web3.py</h2><p>We will use web3.py to get the last Ethereum block number. To do this we will use the code below.</p><pre data-type="codeBlock" text="from web3 import Web3
watchdata_url = &apos;https://ethereum.api.watchdata.io/node/jsonrpc?api_key=83ab245b-ae08-43a4-97db-85903d35652f&apos;
w3 = Web3(Web3.HTTPProvider(watchdata_url))
last_block_number = w3.eth.block_number
print(f&apos;last block number in eth = {last_block_number}&apos;)
"><code>from web3 import Web3
<span class="hljs-attr">watchdata_url</span> = <span class="hljs-string">'https://ethereum.api.watchdata.io/node/jsonrpc?api_key=83ab245b-ae08-43a4-97db-85903d35652f'</span>
<span class="hljs-attr">w3</span> = Web3(Web3.HTTPProvider(watchdata_url))
<span class="hljs-attr">last_block_number</span> = w3.eth.block_number
print(f'last block number in <span class="hljs-attr">eth</span> = {last_block_number}<span class="hljs-string">')
</span></code></pre><p><strong>Let&apos;s take a closer look at the code:</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e060cb34d16b2deeb1ae712ccca89b78b6f28f336752bb9525a55beee8468bca.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>In this code snippet, we import the web3.py library, declare a watchdata_url variable to which we assign the URL of our watchdata node in Ethereum. And then we create an instance of the web3 class with our watchdata_url.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0a9b1763605d31d512c235fdfe608cb1335beb3ab6ac8ea246b59f1814346b4a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>In this code snippet, we retrieve the last Ethereum block number using the w3.eth.blockNumber API and display it.</p><hr><p>That&apos;s it, you are connected via the Ethereum network using Python. You can also learn more about the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://web3py.readthedocs.io/en/stable/index.html">web3.py</a> APIs for building complicated applications on Ethereum.</p><p>At the moment, only sets of methods described in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/blockchain-apis/ethereum-api">Ethereum API documentation</a> are available from API interfaces, when working through WatchData node, and we are actively working on adding new methods.</p><hr><ol><li><p>Join to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3w4VlDz">our Discord server</a></p></li><li><p>Please leave your feedback in the #feedback channel. If you have any problems or you think that some functionality is not working correctly, we are waiting for your feedback.</p></li><li><p>Want a new feature or you miss some functionality, tell us about it in the #general channel. We are always open to your ideas!</p></li></ol><h4 id="h-helpful-links" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">HELPFUL LINKS</h4><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3CGCSOT">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3t6jMyH">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3w4VlDz">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3q1Rpjl">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
        <item>
            <title><![CDATA[A step-by-step guide on how to start using the WatchData Ethereum API]]></title>
            <link>https://paragraph.com/@gr0wth/a-step-by-step-guide-on-how-to-start-using-the-watchdata-ethereum-api</link>
            <guid>woZ35OuL8Kc6LBZFAqFS</guid>
            <pubDate>Sat, 05 Mar 2022 12:59:41 GMT</pubDate>
            <description><![CDATA[Hi, welcome to WatchData!If you&apos;ve never heard of us before, WatchData gives developers and enterprises easy and reliable access to Web3 tools and infrastructure. In this article, we will tell you how to get started with WatchData so you can connect to the Ethereum blockchain and get started building awesome applications. We&apos;ll take a look at:Registering an accountCreating an API KeyCreating API queries via PostmanStep One: RegisterThe first thing you need to do is go to WatchData.i...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ee80f5e5d7cb67bf61bc1538e8565dc1dd881db3d1835e41185e7d7331cacb1a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-hi-welcome-to-watchdata" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Hi, welcome to WatchData!</h3><p>If you&apos;ve never heard of us before, WatchData gives developers and enterprises easy and reliable access to Web3 tools and infrastructure. In this article, we will tell you how to get started with WatchData so you can connect to the Ethereum blockchain and get started building awesome applications.</p><p><strong>We&apos;ll take a look at:</strong></p><ul><li><p>Registering an account</p></li><li><p>Creating an API Key</p></li><li><p>Creating API queries via Postman</p></li></ul><h2 id="h-step-one-register" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step One: Register</h2><p>The first thing you need to do is go to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://WatchData.io">WatchData.io</a> and create an account. The only information needed to register your account is your email address.</p><p>First of all, you need to register.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8c98cef0fc867e6da7171200d8ebd578b36c13e368a3b4d4f157700b35e0c753.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Go to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.watchdata.io/signup">Sign Up</a> page and enter your email address.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b5eb22a6fa605dc09c0758b8cee7641c88a18b48ce9cb3e863e8353b92e88e1f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Go to your email client and click on the link in the email to confirm your registration.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/648d8d26b9d95cdcf6a52650ef7eb88787f7e1c0540564cfcaf936a2b2df0ddf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Click the button or the link and then go back to your original tab. You&apos;ll be automatically redirected to your personal <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.watchdata.io/">dashboard</a>.</p><h2 id="h-step-two-create-an-api-key" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Two: Create an API Key</h2><p>To create an API key, you need to do the following steps: On the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://Dashboard.watchdata.io">Dashboard.watchdata.io</a> tab, click Create API key.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cdf367cdd3538e5c7bb3b21f353209aae9203efe89443e9c8941cd6f4eb3b5b3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Your API key will be automatically created.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/45840094b2965e87982e96188199aada872bae814ab966f41e0822938243bab3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-three-create-api-queries-via-postman" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Three: Create API queries via Postman</h2><p>In the example, we&apos;ll show step-by-step instructions for sending some sample queries via Postman. In addition to Postman, you can use data from the WatchData API in any application, using post and curl queries.</p><p>First, after you get the API key you have to connect to the blockchain.</p><p><strong>The URL for Ethereum mainnet:</strong></p><p><code>https://ethereum.api.watchdata.io/node/jsonrpc</code></p><p><strong>The URL for Ropsten testnet:</strong></p><p><code>https://ropsten.api.watchdata.io/</code></p><p>Go to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.postman.com/">Postman</a> and create a new request.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c876651316d45941b178ac91e485fef628b2972046f1e05522b32083dcfde576.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The request type is POST, in the Request url field enter the address specified above. On the Headers tab in the Key field type in &quot;key_api&quot;, in the value field type in your API key.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0f25d29c6c762ef25193246474c4a23eae50eba7288ec7a9ff0d89f2bb161f09.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Now everything is ready to send a request and receive data from the API. For the example, we&apos;ll look at the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/blockchain-apis/ethereum-api/eth_blocknumber">eth_blockNumber</a> method first. Let&apos;s go to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/">documentation</a> and copy the body of the example POST request.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/479a3178444d700c308a1d95d6ba39291c3a3637c3b261138b1a80a8eda712c7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>In Postman select the Body tab, set Raw and JSON on it, insert the request, then click send.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4a23169d0f3333aaf6e71a9e980b7ab2494ac9f4438e7a99b4608d4d81fb8c18.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Then we can see the answer at the bottom of the page.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e731831b38a1cfde401a98542b61d7671c1db160524d0abf2af46453a055683.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>A similar example of the request sent and response received for the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/blockchain-apis/ethereum-api/eth_getblockbynumber">eth_getBlockByNumber</a> method. You can work in exactly the same way with any of the methods in our documentation.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e0ec9efcbd65ae08f3e5a7186d0ceb04d73c8cc08772d39abd9930e880c7b0cc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>You now know how to send requests and receive data from WatchData API :)</p><p>In addition, the WatchData API can be used by being integrated into web3 SDK&apos;s. Read an example of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x66d7281A6Ae2b7166cC47B777D5A969210827bb0/QfxTpMESSLY1jqGGOzeLo60ae2bpqfj4YagSNNFDI-s"><strong>how to use the WatchData API to connect to the Ethereum network via Web3.py</strong></a><strong>.</strong></p><p>If you have any questions on using the WatchData API you can always get help from the technical support via online chat on the website or in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">our discord</a>.</p><hr><ol><li><p>Join to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">our Discord server</a></p></li><li><p>Please leave your feedback in the #feedback channel. If you have any problems or you think that some functionality is not working correctly, we are waiting for your feedback.</p></li><li><p>Want a new feature or you miss some functionality, tell us about it in the #general channel. We are always open to your ideas!</p></li></ol><h4 id="h-helpful-links" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">HELPFUL LINKS</h4><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/raw-data">Raw Data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/structured-data">Structured data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/Metrics-for-analysis-98dea0a697764bc6ae51643828449dc9">Metrics for analysis</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/For-Miners-70367c9705ae482c90674d070eedea61">For Miners</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Watchdata_web3">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
        <item>
            <title><![CDATA[How eth_getLogs works?]]></title>
            <link>https://paragraph.com/@gr0wth/how-eth-getlogs-works</link>
            <guid>4bkG6olmp2CGf2oaphmH</guid>
            <pubDate>Thu, 03 Mar 2022 10:24:52 GMT</pubDate>
            <description><![CDATA[Hello everyone 🖖We continue our series of articles about our API and today we want to take a look at the often used eth_getLogs. eth_getLogs has a lot of useful options that developers often don&apos;t know about. Let&apos;s give you an example of how to work with this query. For more information about the request/response specifications for eth_getLogs, see our documentationWhat are Logs?Logs and events are used synonymously - smart contracts generate logs by triggering events, so logs prov...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/54da6e11a24811240143c2d959da04bc1289320c6cc46a955fcb16a642367f8a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-hello-everyone" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hello everyone 🖖</h2><p>We continue our series of articles about our API and today we want to take a look at the often used <strong>eth_getLogs</strong>.</p><p>eth_getLogs has a lot of useful options that developers often don&apos;t know about. Let&apos;s give you an example of how to work with this query.</p><p>For more information about the request/response specifications for <code>eth_getLogs</code>, see our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/blockchain-apis/ethereum-api/eth_getlogs-new">documentation</a></p><h2 id="h-what-are-logs" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What are Logs?</h2><p>Logs and events are used synonymously - smart contracts generate logs by triggering events, so logs provide insight into the events that occur within a smart contract. Logs can be found on transaction recipes.</p><h2 id="h-query-ethgetlogs" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Query eth_getLogs</h2><p>When you make a request to <code>eth_getLogs</code>, all parameters are OPTIONAL, that is, you don&apos;t need to specify <code>fromBlock</code>, <code>toBlock</code>, <code>address</code>, <code>topics</code> or <code>blockHash</code></p><p>Let’s look at an example of a request. Take the USDT address and limit the search parameters from 10,000,000 block to 10,000,001 block. Let&apos;s add a topic on event transfers. We&apos;ll describe it in more detail below</p><pre data-type="codeBlock" text="{
    &quot;id&quot;: 1,
    &quot;method&quot;: &quot;eth_getLogs&quot;,
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;params&quot;: [
        {
    &quot;address&quot;: &quot;0xdAC17F958D2ee523a2206206994597C13D831ec7&quot;, 
    &quot;fromBlock&quot;: 10000000, 
    &quot;toBlock&quot;: 10000001,
    &quot;topics&quot;: [&quot;0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef&quot;]
        }
    ]
}
"><code>{
    "id": <span class="hljs-number">1</span>,
    <span class="hljs-string">"method"</span>: <span class="hljs-string">"eth_getLogs"</span>,
    <span class="hljs-string">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
    <span class="hljs-string">"params"</span>: [
        {
    "<span class="hljs-selector-tag">address</span>": <span class="hljs-string">"0xdAC17F958D2ee523a2206206994597C13D831ec7"</span>, 
    <span class="hljs-string">"fromBlock"</span>: <span class="hljs-number">10000000</span>, 
    <span class="hljs-string">"toBlock"</span>: <span class="hljs-number">10000001</span>,
    <span class="hljs-string">"topics"</span>: [<span class="hljs-string">"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"</span>]
        }
    ]
}
</code></pre><p>In our <code>params</code>here we have specified the<code>address</code>, <code>fromBlock</code>and <code>toBlock</code></p><blockquote><p><strong>⚠️ We use</strong> <code>fromBlock</code> <strong>and</strong> <code>toBlock</code> <strong>in our params. It is important to understand that you can use either</strong> <code>fromBlock</code><strong>and</strong> <code>toBlock</code><strong>or</strong> <code>blockHash</code><strong>, not both.</strong></p></blockquote><p>The <code>fromBlock</code> and <code>toBlock</code> parameters specify the start and end block numbers to limit the search. The <code>address</code> field represents the address of the contract that creates the log.</p><p><code>Topics</code>is an ordered array of data. Notice how the first item in the <code>topics</code>  field above matches the <em>event</em> signature of our <code>Transfer(address,address,uint256)</code>.</p><p>This means that we specifically request the Transfer event. So I will get all transfers in USDT from 10,000,000 block to 10,000,001 block.</p><p>Now that we have a better understanding of how to make queries, let&apos;s look at the answer.</p><h2 id="h-response" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Response</h2><p>You will get a list of logs in a given range (You will get a response with much more data than the following):</p><pre data-type="codeBlock" text="{
    &quot;id&quot;: 1,
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;result&quot;: [
        {
            &quot;address&quot;: &quot;0xdac17f958d2ee523a2206206994597c13d831ec7&quot;,
            &quot;blockHash&quot;: &quot;0xaa20f7bde5be60603f11a45fc4923aab7552be775403fc00c2e6b805e6297dbe&quot;,
            &quot;blockNumber&quot;: &quot;0x989680&quot;,
            &quot;data&quot;: &quot;0x00000000000000000000000000000000000000000000000000000000121eac00&quot;,
            &quot;logIndex&quot;: &quot;0x3&quot;,
            &quot;topics&quot;: [
                &quot;0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef&quot;,
                &quot;0x00000000000000000000000039bb7d39a395e0ce36875244ad48bcaec54faf03&quot;,
                &quot;0x0000000000000000000000009354de9e63674f3e44303b8cc3853d7f10f97d06&quot;
            ],
            &quot;transactionHash&quot;: &quot;0x80e195cabafd0358a35cec5fadc9b304734ac1f0ed6edf607d170dab13f5e069&quot;,
            &quot;transactionIndex&quot;: &quot;0x7&quot;,
            &quot;removed&quot;: false
        }
..............................
}
"><code>{
    <span class="hljs-string">"id"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-string">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
    <span class="hljs-string">"result"</span>: [
        {
            <span class="hljs-string">"address"</span>: <span class="hljs-string">"0xdac17f958d2ee523a2206206994597c13d831ec7"</span>,
            <span class="hljs-string">"blockHash"</span>: <span class="hljs-string">"0xaa20f7bde5be60603f11a45fc4923aab7552be775403fc00c2e6b805e6297dbe"</span>,
            <span class="hljs-string">"blockNumber"</span>: <span class="hljs-string">"0x989680"</span>,
            <span class="hljs-string">"data"</span>: <span class="hljs-string">"0x00000000000000000000000000000000000000000000000000000000121eac00"</span>,
            <span class="hljs-string">"logIndex"</span>: <span class="hljs-string">"0x3"</span>,
            <span class="hljs-string">"topics"</span>: [
                <span class="hljs-string">"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"</span>,
                <span class="hljs-string">"0x00000000000000000000000039bb7d39a395e0ce36875244ad48bcaec54faf03"</span>,
                <span class="hljs-string">"0x0000000000000000000000009354de9e63674f3e44303b8cc3853d7f10f97d06"</span>
            ],
            <span class="hljs-string">"transactionHash"</span>: <span class="hljs-string">"0x80e195cabafd0358a35cec5fadc9b304734ac1f0ed6edf607d170dab13f5e069"</span>,
            <span class="hljs-string">"transactionIndex"</span>: <span class="hljs-string">"0x7"</span>,
            <span class="hljs-string">"removed"</span>: <span class="hljs-literal">false</span>
        }
..............................
}
</code></pre><p>The interesting fields to watch out for are <code>data</code> - which is an unrestricted field for encoding hexadecimal data related to a specific event. By default, if the information is not indexed in the other topics field, it is automatically placed in the data field. This requires more work to analyze the individual hex string information rather than their indexed topics.</p><p>And <code>topics</code> - can contain up to 4 topics. The first topic is mandatory and will always contain hash keccak 256 event signature. As you may see the example above shows a Transfer event between address 0x39bb7d39a395e0ce36875244ad48bcaec54faf03 and 0x 9354de9e63674f3e44303b8cc3853d7f10f97d06(the second and third topics).</p><p>We can check this data on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/">etherscan</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9c837400f6bba71dbb28d74f3091196d5fa175bebbe31f89aca68d85ee48ca68.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Now you know a bit more about the eth_getLogs.</p><hr><p>But if you want to receive and process transfers and not spend a lot of time processing logs, you can use our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/structured-data/transfers"><strong>watch_getTransfers</strong></a> method.</p><p>We will tell you about it in one of our next articles, but for now you can read about it in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">documentation</a>.</p><hr><ol><li><p>Join to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">our Discord server</a></p></li><li><p>Please leave your feedback in the #feedback channel. If you have any problems or you think that some functionality is not working correctly, we are waiting for your feedback.</p></li><li><p>Want a new feature or you miss some functionality, tell us about it in the #general channel. We are always open to your ideas!</p></li></ol><h4 id="h-helpful-links" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">HELPFUL LINKS</h4><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/raw-data">Raw Data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/structured-data">Structured data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/Metrics-for-analysis-98dea0a697764bc6ae51643828449dc9">Metrics for analysis</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/For-Miners-70367c9705ae482c90674d070eedea61">For Miners</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Watchdata_web3">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
        <item>
            <title><![CDATA[How can I get all stats by day?]]></title>
            <link>https://paragraph.com/@gr0wth/how-can-i-get-all-stats-by-day</link>
            <guid>Z28gqnMUL31JqVVYQTg8</guid>
            <pubDate>Tue, 01 Mar 2022 15:26:47 GMT</pubDate>
            <description><![CDATA[Get stats by dayHello everyone! We at WatchData are in the business of making life better for developers and the entire crypto community. Our API is a simple and easy way to interact with blockchain and we want to tell and show you what you can get by using WatchData. Here is a brief analysis of our endpoints. In this series of articles, you can get answers to the following questions:What is it?What is it for?What can I do with it?Today we&apos;ll start with watch_getStatsByDay. We added this...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a99c90a9544e28baaa867b5345999d32cecbed100f3bc62af05465cf8cf4cb8e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-get-stats-by-day" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Get stats by day</h2><p><strong>Hello everyone!</strong></p><p>We at WatchData are in the business of making life better for developers and the entire crypto community. Our API is a simple and easy way to interact with blockchain and we want to tell and show you what you can get by using WatchData.</p><p>Here is a brief analysis of our endpoints.</p><p>In this series of articles, you can get answers to the following questions:</p><ul><li><p><strong>What is it?</strong></p></li><li><p><strong>What is it for?</strong></p></li><li><p><strong>What can I do with it?</strong></p></li></ul><p>Today we&apos;ll start with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/structured-data/stats-new/watch_getstatsbyday">watch_getStatsByDay.</a> We added this endpoint recently, but now we want to tell you what its value and usefulness are.</p><ol><li><p>watch_getStatsByDay - is a set of parameters collected in a single endpoint. This is the statistical data used in the ETH blockchain. By the way, this method will be available for other blockchains in the near future.</p></li><li><p>With this data you can get all the statistical information for 1 day in 1 click. This removes a headache for many users, because using this method you don&apos;t have to collect and process data from different sources.</p></li><li><p>There are many ways to use and process this data, for example, you can use it in the following cases:</p></li></ol><ul><li><p>You can build a graph and estimate the statistics, on which day there were more transactions and on which day more commission was paid.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3f8ec82ac1aa06d76ed91d51171596fe5c7510599f42f72ea35b788e3ec85d57.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>All you have to do is get a key and process the request through any API interaction tool, you can find a detailed guide → <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/quick-start-guide-to-watchdata">here</a>. In the parameters, select the date you need and get an answer. To convert the unix timestamp you can use <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.epochconverter.com/">https://www.epochconverter.com/</a></p><h3 id="h-example-request" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Example request</h3><pre data-type="codeBlock" text="{
    &quot;jsonrpc&quot;:&quot;2.0&quot;,
    &quot;method&quot;:&quot;watch_getStatsByDay&quot;,
    &quot;params&quot;:[1646053739],
    &quot;id&quot;:0
}
"><code><span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"jsonrpc"</span><span class="hljs-punctuation">:</span><span class="hljs-string">"2.0"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"method"</span><span class="hljs-punctuation">:</span><span class="hljs-string">"watch_getStatsByDay"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"params"</span><span class="hljs-punctuation">:</span><span class="hljs-punctuation">[</span><span class="hljs-number">1646053739</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span><span class="hljs-number">0</span>
<span class="hljs-punctuation">}</span>
</code></pre><h3 id="h-example-response" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Example response</h3><pre data-type="codeBlock" text="{
    &quot;id&quot;: 0,
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;result&quot;: {
        &quot;transactionCount&quot;: 1108112,
        &quot;averageGasPrice&quot;: 74184332107.8433,
        &quot;totalGasUsed&quot;: 99340469987,
        &quot;uncleBlockReward&quot;: 628250000000000000000,
        &quot;minersReward&quot;: 13744624508661043931629,
        &quot;blockCount&quot;: 6424
    }
}
"><code><span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"jsonrpc"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2.0"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"result"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
        <span class="hljs-attr">"transactionCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1108112</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"averageGasPrice"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">74184332107.8433</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"totalGasUsed"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">99340469987</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"uncleBlockReward"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">628250000000000000000</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"minersReward"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">13744624508661043931629</span><span class="hljs-punctuation">,</span>
        <span class="hljs-attr">"blockCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">6424</span>
    <span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>
</code></pre><p>Returns explanation</p><p><code>Object</code> - A block object with the following fields, or null when no block was found:</p><ul><li><p>transactionCount: QUANTITY - number of transactions per day</p></li><li><p>averageGasPrice: QUANTITY, - average gas price per day.</p></li><li><p>totalGasUsed: QUANTITY, - total gas used per day</p></li><li><p>uncleBlockReward: QUANTITY, - uncle block reward by day</p></li><li><p>minersReward: QUANTITY, - miner&apos;s reward per day</p></li><li><p>blockCount: QUANTITY, - number of blocks per day</p></li></ul><p><strong>This way you can collect data for the time period you need. For example</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/36baf26eaf848e8e8711d4c12bf233549722ba049f525c6dd3ef12a311b928e3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Using this data, you can build any graphs you want as well as serving specific information. Of course presented here is only a small part, it all depends on your product, you are free to work with any type of data, and we will help you with this!</p><hr><p>This example shows the method, which gives the data within one day, if you need other ranges, please contact us <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="mailto:marketing@thewatch.io">marketing@thewatch.io</a></p><p>Or <strong>join our </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bit.ly/3HwPhps"><strong>discord</strong></a><strong> community</strong>, there, in the channel <strong>#general</strong> you can ask any questions that interest you, as well as in the channel <strong>#feature-request</strong> suggest a feature or statistical information that you need in the first place.</p><h4 id="h-helpful-links" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">HELPFUL LINKS</h4><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/raw-data">Raw Data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/structured-data">Structured data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/Metrics-for-analysis-98dea0a697764bc6ae51643828449dc9">Metrics for analysis</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/For-Miners-70367c9705ae482c90674d070eedea61">For Miners</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Watchdata_web3">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
        <item>
            <title><![CDATA[WEB 3.0 Providers comparison]]></title>
            <link>https://paragraph.com/@gr0wth/web-3-0-providers-comparison</link>
            <guid>6WLVT4zlmFQu9zchciCE</guid>
            <pubDate>Mon, 28 Feb 2022 13:28:11 GMT</pubDate>
            <description><![CDATA[QuickNode, Alchemy, Moralis, Infura or WatchData which provider demonstrates high speed of interaction with the API?ComparisonOur product is in beta test and we continue to actively develop. For this purpose, we have tested among the 4 major market players, like Alchemy, Infura, Moralis, QuickNode. We can’t stress enough that both Alchemy, Infura and QuickNode are reliable blockchain node providers and serve many users well. ⚠️ Important notice! This test is conducted under certain assumption...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/124599bae0f066e63c4565b5b4a31238aec4a40de807894b746d116fb63e388c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-quicknode-alchemy-moralis-infura-or-watchdata-which-provider-demonstrates-high-speed-of-interaction-with-the-api" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">QuickNode, Alchemy, Moralis, Infura or WatchData which provider demonstrates high speed of interaction with the API?</h2><h3 id="h-comparison" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Comparison</h3><p>Our product is in beta test and we continue to actively develop. For this purpose, we have tested among the 4 major market players, like Alchemy, Infura, Moralis, QuickNode. We can’t stress enough that both Alchemy, Infura and QuickNode are reliable blockchain node providers and serve many users well.</p><p><strong>⚠️ Important notice! This test is conducted under certain assumptions. We are aware that test results may vary or may not give completely reliable results due to the remoteness of the servers.</strong></p><blockquote><p>The conditions for the test are identical - Make queries consecutively as many times as possible and free plans from each of the providers except for QuickNode, since they only have a 7-day trial. The testing time for all providers was the same</p></blockquote><p>To check, we took some of the most common endpoints: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/blockchain-apis/ethereum-api/eth_blocknumber"><em>eth_blockNumber</em></a><em>, </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/blockchain-apis/ethereum-api/eth_getlogs-new"><em>eth_getLogs</em></a><em>.</em></p><p>First, for eth_blockNumber endpoint, we compare the median response time. An identical tests will also be conducted for eth_getLogs.</p><h3 id="h-the-first-endpoint-in-our-test-is-ethblocknumber" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The first endpoint in our test is - eth_blockNumber</h3><p>This endpoint returns the latest block number of the blockchain.</p><p>In the table we compared on several indicators for clarity.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1bae685e0b94d9270b24ede2e28e2dc6fe4c502ea9a904a7690c7a2a88b4f474.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The parameter by which we compare is the median response time - <strong>the lower the index, the better the result.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f4c87cb9c048c55948e882a12b1738b801eb4edc925cc98d23e6b64ab5c1f0e7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>After obtaining this data, we immediately conduct a second test, but with a different endpoint - eth_getLogs</p><h3 id="h-the-second-endpoint-in-our-test-is-ethgetlogs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The second endpoint in our test is - eth_getLogs</h3><p>This endpoint returns an array of all logs matching a given filter object.</p><p>A similar series of tests for this method. We calculated as follows: we take all logs for USDT smart contract in one block. The block for each query is chosen randomly from the last 100000 blocks.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe6b1a42a59c2ca86ab16205a085f807bce8cb69a7e4456335e31c184e9322dc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The parameter by which we compare is the median response time - <strong>the lower the index, the better the result.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9f446368936ebb8a364cf62a3b1f3a70d13ea1b004980f8e792b91cae8b36e30.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>As you can see QuickNode is firmly in the lead. It shows excellent results, as you can see from the numbers they have shown over the course of the test. All values do not have sharp deviations. But do not forget that QuickNode has only a 7-day trial, after this service will be charged.</p><p>Nevertheless, the positions of WatchData, in relation to other participants in the test also show very good results.</p><h3 id="h-final-thought" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Final Thought</h3><p>It is still too early to declare a high competitive advantage of WatchData. But it also speaks volumes. The team has released the product into beta test, <strong>and it is already showing good results at this stage</strong>. At watchData we&apos;re always looking for growth and quality in our products. And in the near future, we&apos;ll continue with a series of articles where we compare our product on other metrics, under more fair conditions.</p><p>High speed of query processing has been achieved by adding indexes to queries and a detailed architecture.</p><p><strong>Moreover, we are a 100% free service - do not miss the opportunity to try our API.</strong></p><p><strong>Shortcuts:</strong></p><ul><li><p><em>RpS = API requests per second,</em></p></li><li><p><em>Median = For data set it’s &quot;the middle&quot; value ,</em></p></li><li><p><em>Percentile = is a certain part of the data sample,</em></p></li><li><p><em>Web3.0 = </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://coinmarketcap.com/alexandria/article/what-is-web-3-0"><em>Web 3.0 is the upcoming third generation of the internet</em></a><em>.</em></p></li></ul><h3 id="h-join-our-community" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Join our community</h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">Join our discord server</a>, where you can ask any questions and suggest a feature that will help close your needs.</p><h4 id="h-helpful-links" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">HELPFUL LINKS</h4><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/raw-data">Raw Data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/structured-data">Structured data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/Metrics-for-analysis-98dea0a697764bc6ae51643828449dc9">Metrics for analysis</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/For-Miners-70367c9705ae482c90674d070eedea61">For Miners</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Watchdata_web3">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
        <item>
            <title><![CDATA[Case Study. Getting Transaction Data and Scaling Blockchain Infrastructure for Calypso Pay]]></title>
            <link>https://paragraph.com/@gr0wth/case-study-getting-transaction-data-and-scaling-blockchain-infrastructure-for-calypso-pay</link>
            <guid>So7uxa78fouKosCntbxS</guid>
            <pubDate>Fri, 25 Feb 2022 12:16:16 GMT</pubDate>
            <description><![CDATA[Calypso Pay is a payment service provider that allows any business to accept payments and make settlements in crypto.SummaryThe Calypso Pay team is developing a payment service for cryptocurrencies and faced the problem of receiving notifications from the blockchain about completed transactions. Initially, the team tried to develop and maintain the infrastructure for blockchain monitoring on their own, but faced with a few problems with the infrastructure and being on the verge of losing a ke...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/155622599fb30fdf9e788f8e6fad851858d37b9c3dc2ccc1f4cc841191a3ee90.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Calypso Pay is a payment service provider that allows any business to accept payments and make settlements in crypto.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/982b3282cd4ca576609c0514d339f0a7101bdecf9ea735428cca9ac633e47d30.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-summary" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Summary</h2><p>The Calypso Pay team is developing a payment service for cryptocurrencies and faced the problem of receiving notifications from the blockchain about completed transactions.</p><p>Initially, the team tried to develop and maintain the infrastructure for blockchain monitoring on their own, but faced with a few problems with the infrastructure and being on the verge of losing a key customer, they turned to WatchData.</p><p>WatchData developed an API for receiving notifications, which was quickly implemented and has worked stable to this day.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d2ec3023bce73ee3eef37f9a60ab6352329d4b22236742ad47a12868d8c8bb21.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-problem" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Problem</h2><p>Calypso Pay needs to get data on the status of transactions, which requires constant monitoring of the blockchain for new transactions.</p><p><strong>There have been many problems with the in-house infrastructure to retrieve data from the blockchain:</strong></p><ul><li><p>When using their in-house infrastructure, there were missed transactions received and delays in the blockchain update. The in-house infrastructure was several blocks behind and it took up to three hours to update balances. Calypso Pay users did not understand the status of the transfer, and such problems risked the loss of a key client.</p></li><li><p>Owning its in-house infrastructure required maintaining its blockchain nodes, the team had expenses because in-house support required a lot of effort and resources of administrators and developers.</p></li><li><p>It was necessary to connect new blockchains. The connected blockchains needed to give their data in a single unified format. At the same time, it is possible to flexibly customize each blockchain.  For example, a different number of transaction confirmations depends on the blockchain.</p></li></ul><p><strong>The challenge was that Calypso Pay needed to receive information from multiple blockchain addresses in a short time.</strong></p><p>The internal infrastructure of the payment service does not allow for external requests. Therefore it was decided to provide information in a long-polling format. When there is constant communication between systems, only really interesting transactions are sent for processing.</p><p>After analyzing the market it became clear that there are no solutions that support the full list of requirements, so Calypso Pay turned to WatchData to develop such an API.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3cb3a02c30535fa22d91e85691fcb95179c9afba5775fc19ea0ab1aa410731f0.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-solution" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Solution</h2><p>The WatchData team quickly responded to the request and in no time at all developed an API to meet Calypso Pay&apos;s requirements.</p><p>They made lists of events taking into account the specifics of the task, set up constant monitoring of the blockchain, and created an API that allows getting all the relevant transactions data with a single request.</p><p><strong>Example of a query that creates two filters that track transactions for specific contracts and wallet addresses:</strong></p><pre data-type="codeBlock" text="/calypso/last_block_number
IN:
{
  &quot;blockchain&quot;: &quot;TRON&quot;
}
OUT:
{
  &quot;block_number&quot;: 38212529,
  &quot;blockchain&quot;: &quot;TRON&quot;
}
/calypso/filters/add
IN:
{
  &quot;blockchain&quot;: &quot;TRON&quot;,
  &quot;address&quot;: &quot;TEnxtXJhMXXgPrchm8Qv6F7m4WQ4vRhSJ1&quot;, - wallet adress
  &quot;contract_address&quot;: &quot;TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t&quot; - contract adress (USDT)
} 
OUT:
{
  &quot;filter_id&quot;: &quot;bc3d3ee1-3fbd-479e-aaf8-b7885b890602&quot;
}
IN:
{
  &quot;blockchain&quot;: &quot;TRON&quot;,
  &quot;address&quot;: &quot;TMpFZy1vCv3xmtJDQp9dnxX8aaK8hgAUyc&quot;,
  &quot;contract_address&quot;: &quot;TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t&quot;
}
OUT:
{
  &quot;filter_id&quot;: &quot;11af35c3-27e8-497c-b098-f8b0276980e1&quot;
}
"><code><span class="hljs-operator">/</span>calypso<span class="hljs-operator">/</span>last_block_number
IN:
{
  <span class="hljs-string">"blockchain"</span>: <span class="hljs-string">"TRON"</span>
}
OUT:
{
  <span class="hljs-string">"block_number"</span>: <span class="hljs-number">38212529</span>,
  <span class="hljs-string">"blockchain"</span>: <span class="hljs-string">"TRON"</span>
}
<span class="hljs-operator">/</span>calypso<span class="hljs-operator">/</span>filters<span class="hljs-operator">/</span>add
IN:
{
  <span class="hljs-string">"blockchain"</span>: <span class="hljs-string">"TRON"</span>,
  <span class="hljs-string">"address"</span>: <span class="hljs-string">"TEnxtXJhMXXgPrchm8Qv6F7m4WQ4vRhSJ1"</span>, <span class="hljs-operator">-</span> wallet adress
  <span class="hljs-string">"contract_address"</span>: <span class="hljs-string">"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"</span> <span class="hljs-operator">-</span> <span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">adress</span> (<span class="hljs-params">USDT</span>)
} 
<span class="hljs-title">OUT</span>:
</span>{
  <span class="hljs-string">"filter_id"</span>: <span class="hljs-string">"bc3d3ee1-3fbd-479e-aaf8-b7885b890602"</span>
}
IN:
{
  <span class="hljs-string">"blockchain"</span>: <span class="hljs-string">"TRON"</span>,
  <span class="hljs-string">"address"</span>: <span class="hljs-string">"TMpFZy1vCv3xmtJDQp9dnxX8aaK8hgAUyc"</span>,
  <span class="hljs-string">"contract_address"</span>: <span class="hljs-string">"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"</span>
}
OUT:
{
  <span class="hljs-string">"filter_id"</span>: <span class="hljs-string">"11af35c3-27e8-497c-b098-f8b0276980e1"</span>
}
</code></pre><p><strong>Example of applying filters to a specific block:</strong></p><pre data-type="codeBlock" text="/calypso/filters/check
IN:
{
  &quot;block_number&quot;: 38212506,
  &quot;blockchain&quot;: &quot;TRON&quot;
}
OUT:
{
  &quot;filters&quot;: [
    {
      &quot;from_address&quot;: [
        &quot;TEnxtXJhMXXgPrchm8Qv6F7m4WQ4vRhSJ1&quot;
      ],
      &quot;to_address&quot;: [
        &quot;TNHK9ygsDPjeCikL9RR9AmNJDAps4osYKk&quot;
      ],
      &quot;contract_address&quot;: &quot;TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t&quot;,
      &quot;type&quot;: &quot;trc20&quot;,
      &quot;value&quot;: 1128,
      &quot;currency&quot;: &quot;USDT&quot;,
      &quot;transaction&quot;: {
        &quot;hash&quot;: &quot;55dddcebf4207a9a33649c3c541b62adf6d45364aa5f1f7b48878716055f71ec&quot;,
        &quot;fee_value&quot;: 4.44168,
        &quot;fee_symbol&quot;: &quot;TRX&quot;
      },
      &quot;filter_id&quot;: &quot;bc3d3ee1-3fbd-479e-aaf8-b7885b890602&quot;,
      &quot;filter_target&quot;: {
        &quot;address&quot;: &quot;TEnxtXJhMXXgPrchm8Qv6F7m4WQ4vRhSJ1&quot;,
        &quot;direction&quot;: &quot;withdrawal&quot;
      },
      &quot;block&quot;: {
        &quot;hash&quot;: &quot;000000000247139a8c6e637b7d7daf20193f574d99dfb296ff4d2fb2df1c59b9&quot;,
        &quot;number&quot;: 38212506,
        &quot;created_at&quot;: &quot;2022-02-18T11:17:00+00:00&quot;
      }
    },
    {
      &quot;from_address&quot;: [
        &quot;TPgtDGXdFvEaG23JVSH5Ra9tpp8mh24LXZ&quot;
      ],
      &quot;to_address&quot;: [
        &quot;TMpFZy1vCv3xmtJDQp9dnxX8aaK8hgAUyc&quot;
      ],
      &quot;contract_address&quot;: &quot;TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t&quot;,
      &quot;type&quot;: &quot;trc20&quot;,
      &quot;value&quot;: 29.7,
      &quot;currency&quot;: &quot;USDT&quot;,
      &quot;transaction&quot;: {
        &quot;hash&quot;: &quot;b504ebb33e82297a3f80b221a05b5a616d5d9d5bcf25bd525ee7889e1106c942&quot;,
        &quot;fee_value&quot;: 4.09668,
        &quot;fee_symbol&quot;: &quot;TRX&quot;
      },
      &quot;filter_id&quot;: &quot;11af35c3-27e8-497c-b098-f8b0276980e1&quot;,
      &quot;filter_target&quot;: {
        &quot;address&quot;: &quot;TMpFZy1vCv3xmtJDQp9dnxX8aaK8hgAUyc&quot;,
        &quot;direction&quot;: &quot;deposit&quot;
      },
      &quot;block&quot;: {
        &quot;hash&quot;: &quot;000000000247139a8c6e637b7d7daf20193f574d99dfb296ff4d2fb2df1c59b9&quot;,
        &quot;number&quot;: 38212506,
        &quot;created_at&quot;: &quot;2022-02-18T11:17:00+00:00&quot;
      }
    }
  ]
}
"><code>/calypso/filters/check
IN:
{
  "block_number": <span class="hljs-number">38212506</span>,
  <span class="hljs-string">"blockchain"</span>: <span class="hljs-string">"TRON"</span>
}
OUT:
{
  "filters": [
    {
      "from_address": [
        <span class="hljs-string">"TEnxtXJhMXXgPrchm8Qv6F7m4WQ4vRhSJ1"</span>
      ],
      <span class="hljs-string">"to_address"</span>: [
        <span class="hljs-string">"TNHK9ygsDPjeCikL9RR9AmNJDAps4osYKk"</span>
      ],
      <span class="hljs-string">"contract_address"</span>: <span class="hljs-string">"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"</span>,
      <span class="hljs-string">"type"</span>: <span class="hljs-string">"trc20"</span>,
      <span class="hljs-string">"value"</span>: <span class="hljs-number">1128</span>,
      <span class="hljs-string">"currency"</span>: <span class="hljs-string">"USDT"</span>,
      <span class="hljs-string">"transaction"</span>: {
        "hash": <span class="hljs-string">"55dddcebf4207a9a33649c3c541b62adf6d45364aa5f1f7b48878716055f71ec"</span>,
        <span class="hljs-string">"fee_value"</span>: <span class="hljs-number">4.44168</span>,
        <span class="hljs-string">"fee_symbol"</span>: <span class="hljs-string">"TRX"</span>
      },
      "filter_id": <span class="hljs-string">"bc3d3ee1-3fbd-479e-aaf8-b7885b890602"</span>,
      <span class="hljs-string">"filter_target"</span>: {
        "<span class="hljs-selector-tag">address</span>": <span class="hljs-string">"TEnxtXJhMXXgPrchm8Qv6F7m4WQ4vRhSJ1"</span>,
        <span class="hljs-string">"direction"</span>: <span class="hljs-string">"withdrawal"</span>
      },
      "block": {
        "hash": <span class="hljs-string">"000000000247139a8c6e637b7d7daf20193f574d99dfb296ff4d2fb2df1c59b9"</span>,
        <span class="hljs-string">"number"</span>: <span class="hljs-number">38212506</span>,
        <span class="hljs-string">"created_at"</span>: <span class="hljs-string">"2022-02-18T11:17:00+00:00"</span>
      }
    },
    {
      "from_address": [
        <span class="hljs-string">"TPgtDGXdFvEaG23JVSH5Ra9tpp8mh24LXZ"</span>
      ],
      <span class="hljs-string">"to_address"</span>: [
        <span class="hljs-string">"TMpFZy1vCv3xmtJDQp9dnxX8aaK8hgAUyc"</span>
      ],
      <span class="hljs-string">"contract_address"</span>: <span class="hljs-string">"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"</span>,
      <span class="hljs-string">"type"</span>: <span class="hljs-string">"trc20"</span>,
      <span class="hljs-string">"value"</span>: <span class="hljs-number">29.7</span>,
      <span class="hljs-string">"currency"</span>: <span class="hljs-string">"USDT"</span>,
      <span class="hljs-string">"transaction"</span>: {
        "hash": <span class="hljs-string">"b504ebb33e82297a3f80b221a05b5a616d5d9d5bcf25bd525ee7889e1106c942"</span>,
        <span class="hljs-string">"fee_value"</span>: <span class="hljs-number">4.09668</span>,
        <span class="hljs-string">"fee_symbol"</span>: <span class="hljs-string">"TRX"</span>
      },
      "filter_id": <span class="hljs-string">"11af35c3-27e8-497c-b098-f8b0276980e1"</span>,
      <span class="hljs-string">"filter_target"</span>: {
        "<span class="hljs-selector-tag">address</span>": <span class="hljs-string">"TMpFZy1vCv3xmtJDQp9dnxX8aaK8hgAUyc"</span>,
        <span class="hljs-string">"direction"</span>: <span class="hljs-string">"deposit"</span>
      },
      "block": {
        "hash": <span class="hljs-string">"000000000247139a8c6e637b7d7daf20193f574d99dfb296ff4d2fb2df1c59b9"</span>,
        <span class="hljs-string">"number"</span>: <span class="hljs-number">38212506</span>,
        <span class="hljs-string">"created_at"</span>: <span class="hljs-string">"2022-02-18T11:17:00+00:00"</span>
      }
    }
  ]
}
</code></pre><h3 id="h-the-data-for-all-addresses-can-be-received-in-a-single-request-which-takes-on-average-90-ms-while-for-one-of-our-competitors-this-data-could-only-be-obtained-by-requesting-each-of-the-blockchain-addresses-separately-and-with-an-average-speed-of-200-ms-for-each-of-the-requests" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The data for all addresses can be received in a single request, which takes on average 90 ms, while for one of our competitors this data could only be obtained by requesting each of the blockchain addresses separately and with an average speed of 200 ms for each of the requests.</h3><p>The system works stably and without interruptions, completely covering Calypso Pay&apos;s tasks. Data accuracy is ensured by the proper processing of blockchain forks.</p><p><strong>The problem of transaction data loss was successfully solved.</strong></p><p>After switching to WatchData infrastructure the company stopped spending money for the maintenance of its in-house infrastructure. <strong>This allowed saving over 300 hours of development time.</strong></p><p>A unified dataset for all connected blockchains was implemented, which allowed the team to easily input data into the product and reduce development time.</p><p>Different blockchains have different data structures within them and many peculiarities. The variability of data in different blockchains cannot be completely ignored, but <strong>WatchData offers an abstraction that makes working with transactions in different networks similar to each other.</strong></p><p>The scaling problem is being successfully solved right now; the Tron blockchain has already been added, and transaction data is already being tracked in it as well. New blockchains are in the process of being connected.</p><p><strong>The quick addition of new blockchains allows Calypso Pay to give its customers new payment methods with minimal effort to connect them.</strong></p><p>The WatchData infrastructure is easy to scale, as the current technical developments and system architecture allow new blockchains to be added quickly.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92cf25c0738f6d021df7039884c2c14bf4bfe054999a7d31135c092a975db8e5.png" alt="Transaction history in the Calypso Pay personal account interface. The data is provided by WatchData." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Transaction history in the Calypso Pay personal account interface. The data is provided by WatchData.</figcaption></figure><blockquote><p>After a long search for a solution on the market, we found that good, reliable APIs for retrieving basic information from the blockchain were simply not available. Some of the solutions on the market were unstable, and once we encountered an API that returned a transaction that didn&apos;t really exist.</p><p>So we decided to make the solution ourselves. But it turned out to be a very difficult task, especially considering the level of reliability we needed.</p><p><strong>Then we came across the WatchData solution, which pleasantly surprised us in several aspects at once:</strong></p><ol><li><p>Universal interface for different blockchains.</p></li><li><p>Reliable operation without interruptions, even for test networks.</p></li><li><p>Comfortable work for real cases. For example, we need to get only a transaction that is guaranteed to pass, which means the different number of confirmations for different blockchains.</p></li><li><p>The team&apos;s commitment to meet us and improve their API. The polling mechanism we needed was non-standard, but WatchData quickly adapted their interfaces to our decision.</p></li><li><p>Active development and addition of new blockchains.</p></li></ol><p>That is why we now use the WatchData solution exclusively. Which covers almost all blockchain interaction tasks. And we are very happy to continue cooperating with them.</p><p><strong>Maxim Zhizhin</strong></p><p><em>CTO in Calypso Pay</em></p></blockquote><h4 id="h-helpful-links" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">HELPFUL LINKS</h4><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.calypso.finance/">Calypso Pay</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/">WatchData main</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/raw-data">Raw Data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.watchdata.io/structured-data">Structured data</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/Metrics-for-analysis-98dea0a697764bc6ae51643828449dc9">Metrics for analysis</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://watchdata.notion.site/For-Miners-70367c9705ae482c90674d070eedea61">For Miners</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Watchdata_web3">WatchData Twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/TZRJbZ6bdn">WatchData Discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.watchdata.io/introduction/welcome-to-watchdata-docs">WatchData Docs</a></p></li></ul>]]></content:encoded>
            <author>gr0wth@newsletter.paragraph.com (WatchData)</author>
        </item>
    </channel>
</rss>