ప్రధాన కంటెంట్‌కి స్కిప్ చేయండి

SQL తో ఇతీరియము పునాది అంశాలు నేర్చుకోండి

SQL
ప్రశ్నించడం
లావాదేవీలు
ప్రారంభ
Paul Apivat
11 మే, 2021
7 నిమిషం పఠనం

చాలా ఇతీరియము ట్యుటోరియల్స్ డెవలపర్‌లను లక్ష్యంగా చేసుకుంటాయి, కానీ క్లయింట్ లేదా నోడ్‌ను రన్ చేయకుండా ఆన్‌చైన్ డేటాను చూడాలనుకునే డేటా విశ్లేషకులు లేదా వ్యక్తుల కోసం విద్యా వనరుల కొరత ఉంది.

Dune Analyticsopens in a new tab అందించిన ఇంటర్‌ఫేస్ ద్వారా స్ట్రక్చర్డ్ క్వెరీ లాంగ్వేజ్ (SQL)తో ఆన్‌చైన్ డేటాను ప్రశ్నించడం ద్వారా, ఈ ట్యుటోరియల్ లావాదేవీలు, బ్లాక్‌లు మరియు గ్యాస్ వంటి ప్రాథమిక ఇతీరియము భావనలను అర్థం చేసుకోవడానికి పాఠకులకు సహాయపడుతుంది.

ఆన్‌చైన్ డేటా మనకు ఇతీరియమును, నెట్‌వర్క్‌ను మరియు కంప్యూటింగ్ శక్తి కోసం ఒక ఆర్థిక వ్యవస్థగా అర్థం చేసుకోవడంలో సహాయపడుతుంది మరియు నేడు ఇతీరియము ఎదుర్కొంటున్న సవాళ్లను (అంటే, పెరుగుతున్న గ్యాస్ ధరలు) మరియు, మరింత ముఖ్యంగా, స్కేలింగ్ పరిష్కారాల చుట్టూ జరిగే చర్చలను అర్థం చేసుకోవడానికి ఒక ఆధారంగా ఉపయోగపడాలి.

లావాదేవీలు

ఇతీరియములో ఒక వినియోగదారుడి ప్రయాణం, వినియోగదారు-నియంత్రిత ఖాతాను లేదా ETH బ్యాలెన్స్‌తో ఉన్న ఒక సంస్థను ప్రారంభించడంతో మొదలవుతుంది. రెండు రకాల ఖాతాలు ఉన్నాయి - వినియోగదారు-నియంత్రిత లేదా ఒక స్మార్ట్ కాంట్రాక్ట్ (ethereum.org చూడండి).

Etherscanopens in a new tab లేదా Blockscoutopens in a new tab వంటి బ్లాక్ ఎక్స్‌ప్లోరర్‌లో ఏ ఖాతానైనా చూడవచ్చు. బ్లాక్ ఎక్స్‌ప్లోరర్లు ఇతీరియము డేటాకు ఒక పోర్టల్. అవి నిజ-సమయంలో బ్లాక్‌లు, లావాదేవీలు, మైనర్లు, ఖాతాలు మరియు ఇతర ఆన్‌చైన్ కార్యకలాపాలపై డేటాను ప్రదర్శిస్తాయి (ఇక్కడ చూడండి).

అయితే, బాహ్య బ్లాక్ ఎక్స్‌ప్లోరర్లు అందించిన సమాచారాన్ని సరిపోల్చుకోవడానికి ఒక వినియోగదారుడు డేటాను నేరుగా ప్రశ్నించాలని కోరుకోవచ్చు. Dune Analyticsopens in a new tab SQL గురించి కొంత పరిజ్ఞానం ఉన్న ఎవరికైనా ఈ సామర్థ్యాన్ని అందిస్తుంది.

సూచన కోసం, ఇతీరియము ఫౌండేషన్ (EF) యొక్క స్మార్ట్ కాంట్రాక్ట్ ఖాతాను Blockscoutopens in a new tab లో చూడవచ్చు.

గమనించవలసిన ఒక విషయం ఏమిటంటే, EF తో సహా అన్ని ఖాతాలు లావాదేవీలను పంపడానికి మరియు స్వీకరించడానికి ఉపయోగించగల పబ్లిక్ చిరునామాను కలిగి ఉంటాయి.

Etherscan లోని ఖాతా బ్యాలెన్స్ సాధారణ లావాదేవీలు మరియు అంతర్గత లావాదేవీలను కలిగి ఉంటుంది. అంతర్గత లావాదేవీలు, పేరు సూచించినప్పటికీ, చైన్ యొక్క స్థితిని మార్చే అసలు లావాదేవీలు కావు. అవి ఒక కాంట్రాక్ట్‌ను అమలు చేయడం ద్వారా ప్రారంభించబడిన విలువ బదిలీలు (మూలంopens in a new tab). అంతర్గత లావాదేవీలకు సంతకం లేనందున, అవి బ్లాక్‌చైన్‌లో చేర్చబడ వు మరియు Dune Analytics తో ప్రశ్నించలేము.

అందువల్ల, ఈ ట్యుటోరియల్ సాధారణ లావాదేవీలపై దృష్టి పెడుతుంది. దీనిని ఈ విధంగా ప్రశ్నించవచ్చు:

1WITH temp_table AS (
2SELECT
3 hash,
4 block_number,
5 block_time,
6 "from",
7 "to",
8 value / 1e18 AS ether,
9 gas_used,
10 gas_price / 1e9 AS gas_price_gwei
11FROM ethereum."transactions"
12WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
13ORDER BY block_time DESC
14)
15SELECT
16 hash,
17 block_number,
18 block_time,
19 "from",
20 "to",
21 ether,
22 (gas_used * gas_price_gwei) / 1e9 AS txn_fee
23FROM temp_table
అన్నీ చూపించు

ఇది Etherscan యొక్క లావాదేవీ పేజీలో అందించిన అదే సమాచారాన్ని ఇస్తుంది. పోలిక కోసం, ఇక్కడ రెండు మూలాలు ఉన్నాయి:

Etherscan

Blockscout లో EF యొక్క కాంట్రాక్ట్ పేజీ.opens in a new tab

డూన్ అనలిటిక్స్

డాష్‌బోర్డ్‌ను ఇక్కడopens in a new tab కనుగొనవచ్చు. క్వెరీని చూడటానికి పట్టికపై క్లిక్ చేయండి (పైన కూడా చూడండి).

లావాదేవీలను విడదీయడం

సమర్పించిన లావాదేవీలో అనేక రకాల సమాచారం ఉంటుంది (మూలం):

  • గ్రహీత: స్వీకరించే చిరునామా ("to"గా ప్రశ్నించబడింది)
  • సంతకం: పంపినవారి ప్రైవేట్ కీలు లావాదేవీపై సంతకం చేసినప్పటికీ, SQL తో మనం ప్రశ్నించగలిగేది పంపినవారి పబ్లిక్ చిరునామా ("from").
  • విలువ: ఇది బదిలీ చేయబడిన ETH మొత్తం (ether కాలమ్ చూడండి).
  • డేటా: ఇది హ్యాష్ చేయబడిన ఏకపక్ష డేటా (data కాలమ్ చూడండి)
  • gasLimit – లావాదేవీ ద్వారా వినియోగించబడగల గ్యాస్ యూనిట్ల గరిష్ట మొత్తం. గ్యాస్ యూనిట్లు గణన దశలను సూచిస్తాయి
  • maxPriorityFeePerGas - మైనర్‌కు చిట్కాగా చేర్చడానికి గ్యాస్ యొక్క గరిష్ట మొత్తం
  • maxFeePerGas - లావాదేవీ కోసం చెల్లించడానికి సిద్ధంగా ఉన్న గరిష్ట గ్యాస్ మొత్తం (baseFeePerGas మరియు maxPriorityFeePerGas తో సహా)

ఇతీరియము ఫౌండేషన్ పబ్లిక్ చిరునామాకు లావాదేవీల కోసం మనం ఈ నిర్దిష్ట సమాచారాన్ని ప్రశ్నించవచ్చు:

1SELECT
2 "to",
3 "from",
4 value / 1e18 AS ether,
5 data,
6 gas_limit,
7 gas_price / 1e9 AS gas_price_gwei,
8 gas_used,
9 ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct
10FROM ethereum."transactions"
11WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
12ORDER BY block_time DESC
అన్నీ చూపించు

బ్లాక్‌లు

ప్రతి లావాదేవీ ఎథేరియం వర్చువల్ మషీన్ (EVM) యొక్క స్థితిని మారుస్తుంది (మూలం). ధృవీకరించబడటానికి మరియు ఒక బ్లాక్‌లో చేర్చబడటానికి లావాదేవీలు నెట్‌వర్క్‌కు ప్రసారం చేయబడతాయి. ప్రతి లావాదేవీ ఒక బ్లాక్ నంబర్‌తో అనుబంధించబడి ఉంటుంది. డేటాను చూడటానికి, మనం ఒక నిర్దిష్ట బ్లాక్ నంబర్‌ను ప్రశ్నించవచ్చు: 12396854 (ఈ రచన నాటికి, 11/5/21, ఇతీరియము ఫౌండేషన్ లావాదేవీలలో అత్యంత ఇటీవలి బ్లాక్).

అంతేకాకుండా, మనం తదుపరి రెండు బ్లాక్‌లను ప్రశ్నించినప్పుడు, ప్రతి బ్లాక్‌లో మునుపటి బ్లాక్ యొక్క హ్యాష్ (అంటే, పేరెంట్ హ్యాష్) ఉంటుందని మనం చూడవచ్చు, ఇది బ్లాక్‌చైన్ ఎలా ఏర్పడుతుందో వివరిస్తుంది.

ప్రతి బ్లాక్‌లో దాని పేరెంట్ బ్లాక్‌కు ఒక సూచన ఉంటుంది. ఇది hash మరియు parent_hash కాలమ్‌ల మధ్య కింద చూపబడింది (మూలం):

parent_hash

Dune Analytics లో క్వెరీopens in a new tab ఇక్కడ ఉంది:

1SELECT
2 time,
3 number,
4 hash,
5 parent_hash,
6 nonce
7FROM ethereum."blocks"
8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 12396856
9LIMIT 10
అన్నీ చూపించు

మనం సమయం, బ్లాక్ నంబర్, కఠినత, హ్యాష్, పేరెంట్ హ్యాష్, మరియు నాన్స్ లను ప్రశ్నించడం ద్వారా ఒక బ్లాక్‌ను పరిశీలించవచ్చు.

ఈ క్వెరీ కవర్ చేయని ఏకైక విషయం లావాదేవీల జాబితా, దీనికి కింద ఒక ప్రత్యేక క్వెరీ అవసరం, మరియు స్టేట్ రూట్. ఒక పూర్తి లేదా ఆర్కైవల్ నోడ్ అన్ని లావాదేవీలను మరియు స్టేట్ పరివర్తనలను నిల్వ చేస్తుంది, ఇది క్లయింట్లు ఎప్పుడైనా చైన్ యొక్క స్థితిని ప్రశ్నించడానికి అనుమతిస్తుంది. దీనికి పెద్ద నిల్వ స్థలం అవసరం కాబట్టి, మనం చైన్ డేటాను స్టేట్ డేటా నుండి వేరు చేయవచ్చు:

  • చైన్ డేటా (బ్లాక్‌ల జాబితా, లావాదేవీలు)
  • స్టేట్ డేటా (ప్రతి లావాదేలీ యొక్క స్టేట్ పరివర్తన ఫలితం)

స్టేట్ రూట్ రెండవ దానిలోకి వస్తుంది మరియు అది అంతర్లీన డేటా (ఆన్‌చైన్‌లో నిల్వ చేయబడదు), అయితే చైన్ డేటా స్పష్టంగా మరియు చైన్‌పైనే నిల్వ చేయబడుతుంది (మూలంopens in a new tab).

ఈ ట్యుటోరియల్ కోసం, మనం Dune Analytics ద్వారా SQL తో ప్రశ్నించ_గల_ ఆన్‌చైన్ డేటాపై దృష్టి పెడతాము.

పైన చెప్పినట్లుగా, ప్రతి బ్లాక్‌లో లావాదేవీల జాబితా ఉంటుంది, మనం ఒక నిర్దిష్ట బ్లాక్ కోసం ఫిల్టర్ చేయడం ద్వారా దీనిని ప్రశ్నించవచ్చు. మనం అత్యంత ఇటీవలి బ్లాక్, 12396854 ని ప్రయత్నిద్దాం:

1SELECT * FROM ethereum."transactions"
2WHERE block_number = 12396854
3ORDER BY block_time DESC`

Dune లో SQL అవుట్‌పుట్ ఇక్కడ ఉంది:

చైన్‌కు జోడించబడిన ఈ ఒక్క బ్లాక్ ఎథేరియం వర్చువల్ మషీన్ (EVM) యొక్క స్థితిని మారుస్తుంది. డజన్ల కొద్దీ, కొన్నిసార్లు వందల కొద్దీ లావాదేవీలు ఒకేసారి ధృవీకరించబడతాయి. ఈ నిర్దిష్ట సందర్భంలో, 222 లావాదేవీలు చేర్చబడ్డాయి.

వాస్తవానికి ఎన్ని విజయవంతమయ్యాయో చూడటానికి, విజయవంతమైన లావాదేవీలను లెక్కించడానికి మనం మరొక ఫిల్టర్‌ను జోడిస్తాము:

1WITH temp_table AS (
2 SELECT * FROM ethereum."transactions"
3 WHERE block_number = 12396854 AND success = true
4 ORDER BY block_time DESC
5)
6SELECT
7 COUNT(success) AS num_successful_txn
8FROM temp_table

బ్లాక్ 12396854 కోసం, మొత్తం 222 లావాదేవీలలో, 204 విజయవంతంగా ధృవీకరించబడ్డాయి:

లావాదేవీల అభ్యర్థనలు సెకనుకు డజన్ల కొద్దీ సార్లు జరుగుతాయి, కానీ బ్లాక్‌లు సుమారుగా ప్రతి 15 సెకన్లకు ఒకసారి కమిట్ చేయబడతాయి (మూలం).

సుమారుగా ప్రతి 15 సెకన్లకు ఒక బ్లాక్ ఉత్పత్తి అవుతుందని చూడటానికి, మనం ఒక రోజులోని సెకన్ల సంఖ్యను (86400) 15తో భాగించి రోజుకు సగటు బ్లాక్‌ల అంచనా సంఖ్యను (~ 5760) పొందవచ్చు.

రోజుకు ఉత్పత్తి చేయబడిన ఇతీరియము బ్లాక్‌ల కోసం చార్ట్ (2016 - ప్రస్తుతం) ఇదిగో:

ఈ కాలంలో రోజుకు ఉత్పత్తి చేయబడిన బ్లాక్‌ల సగటు సంఖ్య ~5,874:

క్వెరీలు ఇవి:

1# query to visualize number of blocks produced daily since 2016
2
3SELECT
4 DATE_TRUNC('day', time) AS dt,
5 COUNT(*) AS block_count
6FROM ethereum."blocks"
7GROUP BY dt
8OFFSET 1
9
10# average number of blocks produced per day
11
12WITH temp_table AS (
13SELECT
14 DATE_TRUNC('day', time) AS dt,
15 COUNT(*) AS block_count
16FROM ethereum."blocks"
17GROUP BY dt
18OFFSET 1
19)
20SELECT
21 AVG(block_count) AS avg_block_count
22FROM temp_table
అన్నీ చూపించు

2016 నుండి రోజుకు ఉత్పత్తి చేయబడిన బ్లాక్‌ల సగటు సంఖ్య ఆ సంఖ్య కంటే కొంచెం ఎక్కువగా 5,874. ప్రత్యామ్నాయంగా, 86400 సెకన్లను 5874 సగటు బ్లాక్‌లతో భాగిస్తే 14.7 సెకన్లు లేదా సుమారుగా ప్రతి 15 సెకన్లకు ఒక బ్లాక్ వస్తుంది.

గ్యాస్

బ్లాక్‌లు పరిమాణంలో పరిమితంగా ఉంటాయి. గరిష్ట బ్లాక్ పరిమాణం డైనమిక్‌గా ఉంటుంది మరియు నెట్‌వర్క్ డిమాండ్ ప్రకారం 12,500,000 మరియు 25,000,000 యూనిట్ల మధ్య మారుతుంది. డిస్క్ స్థలం మరియు వేగం అవసరాల పరంగా పూర్తి నోడ్‌లపై భారం పడకుండా, ఏకపక్షంగా పెద్ద బ్లాక్ పరిమాణాలను నివారించడానికి పరిమితులు అవసరం (మూలం).

బ్లాక్ గ్యాస్ పరిమితిని సంభావితం చేయడానికి ఒక మార్గం ఏమిటంటే, లావాదేవీలను బ్యాచ్ చేయడానికి అందుబాటులో ఉన్న బ్లాక్ స్పేస్ యొక్క సరఫరాగా దానిని భావించడం. బ్లాక్ గ్యాస్ పరిమితిని 2016 నుండి నేటి వరకు ప్రశ్నించి, దృశ్యమానం చేయవచ్చు:

1SELECT
2 DATE_TRUNC('day', time) AS dt,
3 AVG(gas_limit) AS avg_block_gas_limit
4FROM ethereum."blocks"
5GROUP BY dt
6OFFSET 1

అప్పుడు ఇతీరియము చైన్‌లో చేసిన కంప్యూటింగ్ కోసం చెల్లించడానికి (అంటే, లావాదేవీని పంపడం, స్మార్ట్ కాంట్రాక్ట్‌ను కాల్ చేయడం, ఒక NFT ని మింట్ చేయడం) రోజూ ఉపయోగించే వాస్తవ గ్యాస్ ఉంది. ఇది అందుబాటులో ఉన్న ఇతీరియము బ్లాక్ స్పేస్ కోసం డిమాండ్:

1SELECT
2 DATE_TRUNC('day', time) AS dt,
3 AVG(gas_used) AS avg_block_gas_used
4FROM ethereum."blocks"
5GROUP BY dt
6OFFSET 1

డిమాండ్ మరియు సరఫరా ఎలా సరిపోలుస్తాయో చూడటానికి మనం ఈ రెండు చార్ట్‌లను కూడా కలిపి చూడవచ్చు:

gas_demand_supply

అందువల్ల, అందుబాటులో ఉన్న సరఫరాను బట్టి మనం గ్యాస్ ధరలను ఇతీరియము బ్లాక్ స్పేస్ కోసం డిమాండ్ యొక్క ఫంక్షన్‌గా అర్థం చేసుకోవచ్చు.

చివరగా, మనం ఇతీరియము చైన్ కోసం సగటు రోజువారీ గ్యాస్ ధరలను ప్రశ్నించాలనుకోవచ్చు, అయితే, అలా చేయడం వలన చాలా ఎక్కువ క్వెరీ సమయం పడుతుంది, కాబట్టి మనం మన క్వెరీని ఇతీరియము ఫౌండేషన్ ద్వారా ప్రతి లావాదేవీకి చెల్లించిన సగటు గ్యాస్ మొత్తానికి ఫిల్టర్ చేస్తాము.

సంవత్సరాలుగా ఇతీరియము ఫౌండేషన్ చిరునామాకు చేసిన అన్ని లావాదేవీలకు చెల్లించిన గ్యాస్ ధరలను మనం చూడవచ్చు. క్వెరీ ఇక్కడ ఉంది:

1SELECT
2 block_time,
3 gas_price / 1e9 AS gas_price_gwei,
4 value / 1e18 AS eth_sent
5FROM ethereum."transactions"
6WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
7ORDER BY block_time DESC

సారాంశం

ఈ ట్యుటోరియల్‌తో, ఆన్‌చైన్ డేటాను ప్రశ్నించి, దానిపై ఒక అవగాహన పొందడం ద్వారా మనం ప్రాథమిక ఇతీరియము భావనలను మరియు ఇతీరియము బ్లాక్‌చైన్ ఎలా పనిచేస్తుందో అర్థం చేసుకుంటాము.

ఈ ట్యుటోరియల్‌లో ఉపయోగించిన మొత్తం కోడ్‌ను కలిగి ఉన్న డాష్‌బోర్డ్‌ను ఇక్కడopens in a new tab కనుగొనవచ్చు.

web3ని అన్వేషించడానికి డేటాను మరింతగా ఉపయోగించడం కోసం Twitterలో నన్ను కనుగొనండిopens in a new tab.

పేజీ చివరి అప్‌డేట్: 29 సెప్టెంబర్, 2025

ఈ ట్యుటోరియల్ ఉపయోగపడిందా?