Jifunze Mada za Msingi za Ethereum kwa kutumia SQL
Mafunzo mengi ya Ethereum huwalenga wasanidi programu, lakini kuna ukosefu wa rasilimali za kielimu kwa wachambuzi wa data au kwa watu wanaotaka kuona data iliyo kwenye mtandao bila kuendesha mteja au nodi.
Mafunzo haya yanawasaidia wasomaji kuelewa dhana za msingi za Ethereum ikiwemo miamala, bloku na gesi kwa kuuliza data iliyo kwenye mtandao kwa kutumia lugha ya kuuliza data iliyopangwa (SQL) kupitia kiolesura kilichotolewa na Dune Analyticsopens in a new tab.
Data iliyo kwenye mtandao inaweza kutusaidia kuelewa Ethereum, mtandao, na kama uchumi wa nguvu za kompyuta na inapaswa kutumika kama msingi wa kuelewa changamoto zinazoikabili Ethereum leo (yaani, kupanda kwa bei za gesi) na, muhimu zaidi, majadiliano kuhusu suluhu za kuongeza uwezo.
Miamala
Safari ya mtumiaji kwenye Ethereum huanza na kuanzisha akaunti inayodhibitiwa na mtumiaji au huluki yenye salio la ETH. Kuna aina mbili za akaunti - inayodhibitiwa na mtumiaji au mkataba-erevu (tazama ethereum.org).
Akaunti yoyote inaweza kutazamwa kwenye wachunguzi wa bloku kama Etherscanopens in a new tab au Blockscoutopens in a new tab. Wachunguzi wa bloku ni lango la data ya Ethereum. Wanaonyesha, kwa wakati halisi, data kuhusu bloku, miamala, wachimbaji, akaunti na shughuli nyingine za kwenye mtandao (tazama hapa).
Hata hivyo, mtumiaji anaweza kutaka kuuliza data moja kwa moja ili kupatanisha taarifa zinazotolewa na wachunguzi wa bloku wa nje. Dune Analyticsopens in a new tab hutoa uwezo huu kwa yeyote aliye na ujuzi fulani wa SQL.
Kwa marejeleo, akaunti ya mkataba-erevu ya Msingi wa Ethereum (EF) inaweza kutazamwa kwenye Blockscoutopens in a new tab.
Jambo moja la kuzingatia ni kwamba akaunti zote, ikiwemo ya EF, zina anwani ya umma inayoweza kutumika kutuma na kupokea miamala.
Salio la akaunti kwenye Etherscan linajumuisha miamala ya kawaida na miamala ya ndani. Miamala ya ndani, licha ya jina lake, sio miamala halisi inayobadilisha hali ya mnyororo. Ni uhamisho wa thamani ulioanzishwa kwa kutekeleza mkataba (chanzoopens in a new tab). Kwa kuwa miamala ya ndani haina saini, haijumuishwi kwenye mnyororo wa bloku na haiwezi kuulizwa na Dune Analytics.
Kwa hivyo, mafunzo haya yatazingatia miamala ya kawaida. Hii inaweza kuulizwa kama ifuatavyo:
1WITH temp_table AS (2SELECT3 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_gwei11FROM ethereum."transactions"12WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'13ORDER BY block_time DESC14)15SELECT16 hash,17 block_number,18 block_time,19 "from",20 "to",21 ether,22 (gas_used * gas_price_gwei) / 1e9 AS txn_fee23FROM temp_tableOnyesha yoteHii itatoa taarifa sawa na inayotolewa kwenye ukurasa wa miamala wa Etherscan. Kwa kulinganisha, hizi ndizo vyanzo viwili:
Etherscan
Ukurasa wa mkataba wa EF kwenye Blockscout.opens in a new tab
Dune Analytics
Unaweza kupata dashibodi hapaopens in a new tab. Bofya kwenye jedwali ili kuona ulizo (pia tazama hapo juu).
Kuchanganua Miamala
Muamala uliowasilishwa unajumuisha taarifa kadhaa ikiwemo (chanzo):
- Mpokeaji: Anwani ya kupokea (iliyoulizwa kama "to")
- Saini: Wakati ufunguo binafsi wa mtumaji hutia saini kwenye muamala, tunachoweza kuuliza kwa kutumia SQL ni anwani ya umma ya mtumaji ("from").
- Thamani: Hii ni kiasi cha ETH kilichohamishwa (tazama safu wima ya
ether). - Data: Hii ni data yoyote ambayo imefanyiwa hashi (tazama safu wima ya
data) - gasLimit – kiasi cha juu cha vitengo vya gesi kinachoweza kutumiwa na muamala. Vitengo vya gesi vinawakilisha hatua za kikokotozi
- maxPriorityFeePerGas - kiasi cha juu cha gesi kitakachojumuishwa kama zawadi kwa mchimbaji
- maxFeePerGas - kiasi cha juu cha gesi ambacho mtu yuko tayari kulipa kwa muamala (ikijumuisha baseFeePerGas na maxPriorityFeePerGas)
Tunaweza kuuliza taarifa hizi maalum kwa miamala kwenda kwa anwani ya umma ya Msingi wa Ethereum:
1SELECT2 "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_pct10FROM ethereum."transactions"11WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'12ORDER BY block_time DESCOnyesha yoteBloku
Kila muamala utabadilisha hali ya mashine halisi ya Ethereum (EVM) (chanzo). Miamala hutangazwa kwenye mtandao ili ithibitishwe na ijumuishwe kwenye bloku. Kila muamala unahusishwa na nambari ya bloku. Ili kuona data, tunaweza kuuliza nambari maalum ya bloku: 12396854 (bloku ya hivi karibuni zaidi kati ya miamala ya Msingi wa Ethereum kufikia wakati wa uandishi huu, 11/5/21).
Zaidi ya hayo, tunapouliza bloku mbili zinazofuata, tunaweza kuona kwamba kila bloku ina hashi ya bloku iliyotangulia (yaani, hashi ya mzazi), kuonyesha jinsi mnyororo wa bloku unavyoundwa.
Kila bloku ina rejeleo kwa bloku yake ya mzazi. Hii inaonyeshwa hapa chini kati ya safu wima za hash na parent_hash (chanzo):
Hili ndilo ulizoopens in a new tab kwenye Dune Analytics:
1SELECT2 time,3 number,4 hash,5 parent_hash,6 nonce7FROM ethereum."blocks"8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 123968569LIMIT 10Onyesha yoteTunaweza kuchunguza bloku kwa kuuliza muda, nambari ya bloku, ugumu, hashi, hashi ya mzazi, na nonce.
Kitu pekee ambacho ulizo hili halishughulikii ni orodha ya miamala ambayo inahitaji ulizo tofauti hapa chini na mzizi wa hali. Nodi kamili au ya kumbukumbu itahifadhi miamala yote na mabadiliko ya hali, kuwaruhusu wateja kuuliza hali ya mnyororo wakati wowote. Kwa sababu hii inahitaji nafasi kubwa ya kuhifadhi, tunaweza kutenganisha data ya mnyororo na data ya hali:
- Data ya mnyororo (orodha ya bloku, miamala)
- Data ya hali (matokeo ya mabadiliko ya hali ya kila muamala)
Mzizi wa hali huangukia kwenye kundi la pili na ni data iliyodokezwa (haihifadhiwi kwenye mnyororo), wakati data ya mnyororo iko wazi na huhifadhiwa kwenye mnyororo wenyewe (chanzoopens in a new tab).
Kwa mafunzo haya, tutazingatia data ya kwenye mnyororo ambayo inaweza kuulizwa kwa SQL kupitia Dune Analytics.
Kama ilivyoelezwa hapo juu, kila bloku ina orodha ya miamala, tunaweza kuuliza hili kwa kuchuja bloku maalum. Tutajaribu bloku ya hivi karibuni zaidi, 12396854:
1SELECT * FROM ethereum."transactions"2WHERE block_number = 123968543ORDER BY block_time DESC`Huu ndio matokeo ya SQL kwenye Dune:
Bloku hii moja kuongezwa kwenye mnyororo hubadilisha hali ya mashine halisi ya Ethereum (EVM). Wakati mwingine makumi, mamia ya miamala huhakikiwa kwa wakati mmoja. Katika kisa hiki maalum, miamala 222 ilijumuishwa.
Ili kuona ni ngapi zilifanikiwa, tungeongeza kichujio kingine kuhesabu miamala iliyofanikiwa:
1WITH temp_table AS (2 SELECT * FROM ethereum."transactions"3 WHERE block_number = 12396854 AND success = true4 ORDER BY block_time DESC5)6SELECT7 COUNT(success) AS num_successful_txn8FROM temp_tableKwa bloku 12396854, kati ya miamala 222 jumla, 204 zilihakikiwa kwa mafanikio:
Maombi ya miamala hutokea makumi ya mara kwa sekunde, lakini bloku huhifadhiwa takriban mara moja kila sekunde 15 (chanzo).
Ili kuona kwamba kuna bloku moja inayozalishwa takriban kila sekunde 15, tunaweza kuchukua idadi ya sekunde katika siku (86400) kugawanywa kwa 15 ili kupata wastani wa makadirio ya idadi ya bloku kwa siku (~ 5760).
Chati ya bloku za Ethereum zinazozalishwa kwa siku (2016 - sasa) ni:
Wastani wa idadi ya bloku zinazozalishwa kila siku katika kipindi hiki ni ~5,874:
Maulizo ni:
1# ulizo la kuonyesha idadi ya bloku zinazozalishwa kila siku tangu 201623SELECT4 DATE_TRUNC('day', time) AS dt,5 COUNT(*) AS block_count6FROM ethereum."blocks"7GROUP BY dt8OFFSET 1910# wastani wa idadi ya bloku zinazozalishwa kwa siku1112WITH temp_table AS (13SELECT14 DATE_TRUNC('day', time) AS dt,15 COUNT(*) AS block_count16FROM ethereum."blocks"17GROUP BY dt18OFFSET 119)20SELECT21 AVG(block_count) AS avg_block_count22FROM temp_tableOnyesha yoteWastani wa idadi ya bloku zinazozalishwa kwa siku tangu 2016 iko juu kidogo ya nambari hiyo kwa 5,874. Vinginevyo, kugawanya sekunde 86400 kwa wastani wa bloku 5874 hutoa sekunde 14.7 au takriban bloku moja kila sekunde 15.
Gesi
Bloku zina ukomo wa ukubwa. Ukubwa wa juu wa bloku hubadilika na hutofautiana kulingana na mahitaji ya mtandao kati ya vitengo 12,500,000 na 25,000,000. Vikomo vinahitajika kuzuia ukubwa wa bloku kuwa mkubwa kiholela na kuweka mzigo kwenye nodi kamili kwa upande wa nafasi ya diski na mahitaji ya kasi (chanzo).
Njia moja ya kufikiria kikomo cha gesi cha bloku ni kuifikiria kama ugavi wa nafasi ya bloku inayopatikana ambapo miamala inaweza kuwekwa kwa makundi. Kikomo cha gesi cha bloku kinaweza kuulizwa na kuonyeshwa kutoka 2016 hadi leo:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_limit) AS avg_block_gas_limit4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1Halafu kuna gesi halisi inayotumika kila siku kulipia ukokotoaji unaofanywa kwenye mnyororo wa Ethereum (yaani, kutuma muamala, kuita mkataba-erevu, kutoa NFT). Haya ndiyo mahitaji ya nafasi ya bloku ya Ethereum inayopatikana:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_used) AS avg_block_gas_used4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1Tunaweza pia kuweka chati hizi mbili pamoja ili kuona jinsi mahitaji na ugavi vinavyolingana:
Kwa hivyo tunaweza kuelewa bei za gesi kama kazi ya mahitaji ya nafasi ya bloku ya Ethereum, kulingana na ugavi unaopatikana.
Mwishowe, tunaweza kutaka kuuliza wastani wa bei za gesi za kila siku kwa mnyororo wa Ethereum, hata hivyo, kufanya hivyo kutasababisha muda mrefu sana wa kuuliza, kwa hivyo tutachuja ulizo letu kwa kiasi cha wastani cha gesi kilicholipwa kwa kila muamala na Msingi wa Ethereum.
Tunaweza kuona bei za gesi zilizolipwa kwa miamala yote iliyofanywa kwa anwani ya Msingi wa Ethereum kwa miaka mingi. Hili ndilo ulizo:
1SELECT2 block_time,3 gas_price / 1e9 AS gas_price_gwei,4 value / 1e18 AS eth_sent5FROM ethereum."transactions"6WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'7ORDER BY block_time DESCMuhtasari
Kwa mafunzo haya, tunaelewa dhana za msingi za Ethereum na jinsi mnyororo wa bloku wa Ethereum unavyofanya kazi kwa kuuliza na kupata hisia ya data ya kwenye mnyororo.
Dashibodi inayoshikilia msimbo wote uliotumika katika mafunzo haya inaweza kupatikana hapaopens in a new tab.
Kwa matumizi zaidi ya data kuchunguza web3 nipate kwenye Twitteropens in a new tab.
Ukurasa ulihaririwa mwisho: 29 Septemba 2025










