এসকিউএল (SQL) দিয়ে ইথিরিয়ামের মৌলিক বিষয়গুলো শিখুন
অনেক ইথিরিয়াম টিউটোরিয়াল ডেভেলপারদের লক্ষ্য করে তৈরি করা হয়, কিন্তু ডাটা অ্যানালিস্টদের জন্য বা যারা কোনো ক্লায়েন্ট বা নোড না চালিয়ে অনচেইন ডাটা দেখতে চান তাদের জন্য শিক্ষামূলক রিসোর্সের অভাব রয়েছে।
এই টিউটোরিয়ালটি পাঠকদের Dune Analytics (opens in a new tab)-এর দেওয়া একটি ইন্টারফেসের মাধ্যমে স্ট্রাকচার্ড কোয়েরি ল্যাঙ্গুয়েজ (SQL) দিয়ে অনচেইন ডাটা কোয়েরি করে লেনদেন, ব্লকস এবং গ্যাস সহ ইথিরিয়ামের মৌলিক ধারণাগুলো বুঝতে সাহায্য করে।
অনচেইন ডাটা আমাদের ইথিরিয়াম, নেটওয়ার্ক এবং কম্পিউটিং পাওয়ারের একটি অর্থনীতি হিসেবে বুঝতে সাহায্য করতে পারে। এটি বর্তমানে ইথিরিয়ামের সম্মুখীন হওয়া চ্যালেঞ্জগুলো (যেমন, ক্রমবর্ধমান গ্যাস প্রাইস) এবং আরও গুরুত্বপূর্ণভাবে, স্কেলিং সমাধানগুলোর আলোচনা বোঝার ভিত্তি হিসেবে কাজ করা উচিত।
লেনদেন
ইথিরিয়ামে একজন ব্যবহারকারীর যাত্রা শুরু হয় একটি ব্যবহারকারী-নিয়ন্ত্রিত একাউন্ট বা ETH ব্যালেন্স সহ একটি সত্তা চালু করার মাধ্যমে। দুই ধরনের একাউন্ট রয়েছে - ব্যবহারকারী-নিয়ন্ত্রিত বা একটি স্মার্ট কন্ট্রাক্ট (ethereum.org দেখুন)।
যেকোনো একাউন্ট Etherscan (opens in a new tab) বা Blockscout (opens in a new tab)-এর মতো ব্লক এক্সপ্লোরার-এ দেখা যেতে পারে। ব্লক এক্সপ্লোরার হলো ইথিরিয়ামের ডাটার একটি পোর্টাল। এগুলো রিয়েল-টাইমে ব্লকস, লেনদেন, মাইনার, একাউন্ট এবং অন্যান্য অনচেইন কার্যকলাপের ডাটা প্রদর্শন করে (এখানে দেখুন)।
তবে, একজন ব্যবহারকারী এক্সটার্নাল ব্লক এক্সপ্লোরারগুলোর দেওয়া তথ্যের সাথে মিলিয়ে দেখার জন্য সরাসরি ডাটা কোয়েরি করতে চাইতে পারেন। Dune Analytics (opens in a new tab) এসকিউএল (SQL) সম্পর্কে কিছুটা ধারণা থাকা যে কাউকেই এই সুবিধা প্রদান করে।
রেফারেন্সের জন্য, ইথিরিয়াম ফাউন্ডেশন (EF)-এর স্মার্ট কন্ট্রাক্ট একাউন্টটি Blockscout (opens in a new tab)-এ দেখা যেতে পারে।
একটি বিষয় লক্ষণীয় যে, EF-এর একাউন্ট সহ সব একাউন্টেরই একটি পাবলিক এডড্রেস থাকে যা লেনদেন পাঠাতে এবং গ্রহণ করতে ব্যবহার করা যেতে পারে।
Etherscan-এ একাউন্ট ব্যালেন্সে সাধারণ লেনদেন এবং ইন্টারনাল লেনদেন অন্তর্ভুক্ত থাকে। ইন্টারনাল লেনদেন, নাম সত্ত্বেও, প্রকৃত লেনদেন নয় যা চেইনের স্টেট পরিবর্তন করে। এগুলো হলো একটি কন্ট্রাক্ট এক্সিকিউট করার মাধ্যমে শুরু হওয়া ভ্যালু ট্রান্সফার (সোর্স (opens in a new tab))। যেহেতু ইন্টারনাল লেনদেনের কোনো সিগনেচার থাকে না, তাই এগুলো ব্লকচেইন-এ অন্তর্ভুক্ত হয় না এবং Dune Analytics দিয়ে কোয়েরি করা যায় না।
তাই, এই টিউটোরিয়ালটি সাধারণ লেনদেনের ওপর ফোকাস করবে। এটি এভাবে কোয়েরি করা যেতে পারে:
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_tableসব দেখানএটি Etherscan-এর লেনদেন পেজে দেওয়া তথ্যের মতোই একই তথ্য প্রদান করবে। তুলনার জন্য, এখানে দুটি সোর্স দেওয়া হলো:
Etherscan
Blockscout-এ EF-এর কন্ট্রাক্ট পেজ। (opens in a new tab)
Dune Analytics
আপনি ড্যাশবোর্ডটি এখানে (opens in a new tab) খুঁজে পেতে পারেন। কোয়েরি দেখতে টেবিলটিতে ক্লিক করুন (উপরেও দেখুন)।
লেনদেন বিশ্লেষণ করা
একটি সাবমিট করা লেনদেনে বেশ কিছু তথ্য অন্তর্ভুক্ত থাকে, যার মধ্যে রয়েছে (সোর্স):
- প্রাপক (Recipient): গ্রহণকারী এডড্রেস ("to" হিসেবে কোয়েরি করা হয়)
- সিগনেচার (Signature): যদিও একজন প্রেরকের প্রাইভেট কি একটি লেনদেনে সাইন করে, আমরা এসকিউএল (SQL) দিয়ে যা কোয়েরি করতে পারি তা হলো প্রেরকের পাবলিক এডড্রেস ("from")।
- ভ্যালু (Value): এটি হলো ট্রান্সফার করা ETH-এর পরিমাণ (
etherকলাম দেখুন)। - ডাটা (Data): এটি হলো আরবিট্রারি ডাটা যা হ্যাস করা হয়েছে (
dataকলাম দেখুন) - গ্যাস লিমিট (gasLimit) – লেনদেনের মাধ্যমে ব্যবহার করা যেতে পারে এমন গ্যাস ইউনিটের সর্বোচ্চ পরিমাণ। গ্যাসের ইউনিটগুলো কম্পিউটেশনাল ধাপগুলোকে উপস্থাপন করে
- maxPriorityFeePerGas - মাইনারকে বকশিশ হিসেবে দেওয়ার জন্য অন্তর্ভুক্ত করা গ্যাসের সর্বোচ্চ পরিমাণ
- maxFeePerGas - লেনদেনের জন্য পরিশোধ করতে ইচ্ছুক গ্যাসের সর্বোচ্চ পরিমাণ (baseFeePerGas এবং maxPriorityFeePerGas সহ)
আমরা ইথিরিয়াম ফাউন্ডেশনের পাবলিক এডড্রেস-এ হওয়া লেনদেনের জন্য এই নির্দিষ্ট তথ্যগুলো কোয়েরি করতে পারি:
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 DESCসব দেখানব্লকস
প্রতিটি লেনদেন ইথিরিয়াম ভার্চুয়াল মেশিন (EVM)-এর স্টেট পরিবর্তন করবে (সোর্স)। লেনদেনগুলো যাচাই করার জন্য এবং একটি ব্লকে অন্তর্ভুক্ত করার জন্য নেটওয়ার্ক-এ ব্রডকাস্ট করা হয়। প্রতিটি লেনদেন একটি ব্লক নম্বরের সাথে যুক্ত থাকে। ডাটা দেখতে, আমরা একটি নির্দিষ্ট ব্লক নম্বর কোয়েরি করতে পারি: 12396854 (এই লেখাটি তৈরি করার সময়, 11/5/21 পর্যন্ত ইথিরিয়াম ফাউন্ডেশনের লেনদেনগুলোর মধ্যে সবচেয়ে সাম্প্রতিক ব্লক)।
তাছাড়া, যখন আমরা পরবর্তী দুটি ব্লক কোয়েরি করি, তখন আমরা দেখতে পাই যে প্রতিটি ব্লকে আগের ব্লকের হ্যাস (অর্থাৎ, প্যারেন্ট হ্যাস) থাকে, যা ব্লকচেইন কীভাবে গঠিত হয় তা তুলে ধরে।
প্রতিটি ব্লকে এর প্যারেন্ট ব্লকের একটি রেফারেন্স থাকে। এটি নিচে hash এবং parent_hash কলামের মধ্যে দেখানো হয়েছে (সোর্স):
এখানে Dune Analytics-এ কোয়েরিটি (opens in a new tab) দেওয়া হলো:
1SELECT2 time,3 number,4 hash,5 parent_hash,6 nonce7FROM ethereum."blocks"8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 123968569LIMIT 10সব দেখানআমরা সময়, ব্লক নম্বর, ডিফিকাল্টি, হ্যাস, প্যারেন্ট হ্যাস এবং নন্স কোয়েরি করে একটি ব্লক পরীক্ষা করতে পারি।
এই কোয়েরিটি শুধুমাত্র যে বিষয়টি কভার করে না তা হলো লেনদেনের তালিকা যার জন্য নিচে একটি আলাদা কোয়েরি প্রয়োজন এবং স্টেট রুট। একটি ফুল বা আর্কাইভাল নোড সমস্ত লেনদেন এবং স্টেট ট্রানজিশন সংরক্ষণ করবে, যা ক্লায়েন্ট-দের যেকোনো সময় চেইনের স্টেট কোয়েরি করার অনুমতি দেয়। যেহেতু এর জন্য বড় স্টোরেজ স্পেস প্রয়োজন, তাই আমরা চেইন ডাটাকে স্টেট ডাটা থেকে আলাদা করতে পারি:
- চেইন ডাটা (ব্লকস, লেনদেনের তালিকা)
- স্টেট ডাটা (প্রতিটি লেনদেনের স্টেট ট্রানজিশনের ফলাফল)
স্টেট রুট শেষেরটির মধ্যে পড়ে এবং এটি হলো ইমপ্লিসিট ডাটা (অনচেইনে সংরক্ষিত নয়), যেখানে চেইন ডাটা হলো এক্সপ্লিসিট এবং চেইনেই সংরক্ষিত থাকে (সোর্স (opens in a new tab))।
এই টিউটোরিয়ালের জন্য, আমরা অনচেইন ডাটার ওপর ফোকাস করব যা Dune Analytics-এর মাধ্যমে এসকিউএল (SQL) দিয়ে কোয়েরি করা যেতে পারে।
উপরে যেমন বলা হয়েছে, প্রতিটি ব্লকে লেনদেনের একটি তালিকা থাকে, আমরা একটি নির্দিষ্ট ব্লকের জন্য ফিল্টার করে এটি কোয়েরি করতে পারি। আমরা সবচেয়ে সাম্প্রতিক ব্লক, 12396854 চেষ্টা করব:
1SELECT * FROM ethereum."transactions"2WHERE block_number = 123968543ORDER BY block_time DESC`এখানে Dune-এ এসকিউএল (SQL) আউটপুট দেওয়া হলো:
চেইনে যুক্ত হওয়া এই একক ব্লকটি ইথিরিয়াম ভার্চুয়াল মেশিন (EVM)-এর স্টেট পরিবর্তন করে। একবারে ডজন ডজন, কখনো কখনো শত শত লেনদেন যাচাই করা হয়। এই নির্দিষ্ট ক্ষেত্রে, 222টি লেনদেন অন্তর্ভুক্ত করা হয়েছিল।
কতগুলো আসলে সফল হয়েছিল তা দেখতে, আমরা সফল লেনদেন গণনা করার জন্য আরেকটি ফিল্টার যোগ করব:
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_table12396854 ব্লকের জন্য, মোট 222টি লেনদেনের মধ্যে 204টি সফলভাবে যাচাই করা হয়েছিল:
লেনদেনের রিকোয়েস্ট প্রতি সেকেন্ডে ডজন ডজন বার ঘটে, কিন্তু ব্লকস প্রায় প্রতি 15 সেকেন্ডে একবার কমিট করা হয় (সোর্স)।
প্রায় প্রতি 15 সেকেন্ডে একটি ব্লক তৈরি হয় তা দেখতে, আমরা প্রতিদিনের আনুমানিক গড় ব্লকের সংখ্যা (~ 5760) পেতে এক দিনের সেকেন্ডের সংখ্যাকে (86400) 15 দিয়ে ভাগ করতে পারি।
প্রতিদিন তৈরি হওয়া ইথিরিয়াম ব্লকের চার্ট (2016 - বর্তমান) হলো:
এই সময়ের মধ্যে প্রতিদিন তৈরি হওয়া ব্লকের গড় সংখ্যা হলো ~5,874:
কোয়েরিগুলো হলো:
1# query to visualize number of blocks produced daily since 201623SELECT4 DATE_TRUNC('day', time) AS dt,5 COUNT(*) AS block_count6FROM ethereum."blocks"7GROUP BY dt8OFFSET 1910# average number of blocks produced per day1112WITH 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_tableসব দেখান2016 সাল থেকে প্রতিদিন তৈরি হওয়া ব্লকের গড় সংখ্যা সেই সংখ্যার চেয়ে সামান্য বেশি, যা হলো 5,874। বিকল্পভাবে, 86400 সেকেন্ডকে 5874 গড় ব্লক দিয়ে ভাগ করলে 14.7 সেকেন্ড বা প্রায় প্রতি 15 সেকেন্ডে একটি ব্লক পাওয়া যায়।
গ্যাস
ব্লকস আকারে সীমাবদ্ধ। সর্বোচ্চ ব্লকের আকার ডাইনামিক এবং নেটওয়ার্ক-এর চাহিদা অনুযায়ী 12,500,000 থেকে 25,000,000 ইউনিটের মধ্যে পরিবর্তিত হয়। ডিস্ক স্পেস এবং গতির প্রয়োজনীয়তার দিক থেকে ফুল নোড-গুলোর ওপর চাপ সৃষ্টি করা থেকে ইচ্ছামতো বড় ব্লকের আকার রোধ করতে লিমিট প্রয়োজন (সোর্স)।
ব্লক গ্যাস লিমিট-কে ধারণা করার একটি উপায় হলো এটিকে লেনদেন ব্যাচ করার জন্য উপলব্ধ ব্লক স্পেসের সাপ্লাই হিসেবে চিন্তা করা। ব্লক গ্যাস লিমিট 2016 থেকে বর্তমান দিন পর্যন্ত কোয়েরি এবং ভিজ্যুয়ালাইজ করা যেতে পারে:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_limit) AS avg_block_gas_limit4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1এরপর রয়েছে ইথিরিয়াম চেইনে করা কম্পিউটিংয়ের (যেমন, লেনদেন পাঠানো, একটি স্মার্ট কন্ট্রাক্ট কল করা, একটি NFT মিন্ট করা) জন্য প্রতিদিন ব্যবহৃত প্রকৃত গ্যাস। এটি হলো উপলব্ধ ইথিরিয়াম ব্লক স্পেসের চাহিদা:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_used) AS avg_block_gas_used4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1চাহিদা এবং সাপ্লাই কীভাবে সারিবদ্ধ হয় তা দেখতে আমরা এই দুটি চার্ট একসাথে মেলাতে পারি:
তাই আমরা উপলব্ধ সাপ্লাইয়ের সাপেক্ষে ইথিরিয়াম ব্লক স্পেসের চাহিদার একটি ফাংশন হিসেবে গ্যাস প্রাইস বুঝতে পারি।
সবশেষে, আমরা ইথিরিয়াম চেইনের জন্য গড় দৈনিক গ্যাস প্রাইস কোয়েরি করতে চাইতে পারি, তবে, এটি করলে কোয়েরির সময় অনেক দীর্ঘ হবে, তাই আমরা আমাদের কোয়েরিটি ইথিরিয়াম ফাউন্ডেশনের প্রতি লেনদেনে পরিশোধ করা গড় গ্যাসের পরিমাণে ফিল্টার করব।
আমরা বছরের পর বছর ধরে ইথিরিয়াম ফাউন্ডেশনের এডড্রেস-এ করা সমস্ত লেনদেনের জন্য পরিশোধ করা গ্যাস প্রাইস দেখতে পারি। এখানে কোয়েরিটি দেওয়া হলো:
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 DESCসারসংক্ষেপ
এই টিউটোরিয়ালের মাধ্যমে, আমরা অনচেইন ডাটা কোয়েরি করে এবং অনুভব করে ইথিরিয়ামের মৌলিক ধারণাগুলো এবং ইথিরিয়াম ব্লকচেইন কীভাবে কাজ করে তা বুঝতে পারি।
এই টিউটোরিয়ালে ব্যবহৃত সমস্ত কোড ধারণকারী ড্যাশবোর্ডটি এখানে (opens in a new tab) পাওয়া যাবে।
ওয়েব3 এক্সপ্লোর করতে ডাটার আরও ব্যবহারের জন্য টুইটারে আমাকে খুঁজুন (opens in a new tab)।
পেজ সর্বশেষ আপডেট: ২৬ ফেব্রুয়ারী, ২০২৬










