মূল কন্টেন্টে যান

একজন Python ডেভেলপারের জন্য ইথেরিয়াম পরিচিতি, পর্ব 1

python
web3.py
শিক্ষানবিস
মার্ক গ্যারো
8 সেপ্টেম্বর, 2020
11 মিনিট পড়ার সময়
পৃষ্ঠা সম্পাদনা করুন (opens in a new tab)

তাহলে, আপনি এই ইথেরিয়াম সম্পর্কে শুনেছেন এবং এর গভীরে প্রবেশ করতে প্রস্তুত? এই পোস্টটি দ্রুত কিছু ব্লকচেইন বেসিক কভার করবে, তারপর আপনাকে একটি সিমুলেটেড ইথেরিয়াম নোড এর সাথে ইন্টারঅ্যাক্ট করাবে – ব্লক ডেটা পড়া, অ্যাকাউন্ট ব্যালেন্স চেক করা এবং ট্রানজ্যাকশন পাঠানো। এর পাশাপাশি, আমরা অ্যাপ তৈরির ঐতিহ্যবাহী পদ্ধতি এবং এই নতুন বিকেন্দ্রীকৃত কাঠামোর মধ্যে পার্থক্যগুলো তুলে ধরব।

প্রাথমিক প্রয়োজনীয়তা (সাধারণ)

এই পোস্টটি সব ধরনের ডেভেলপারদের জন্য সহজবোধ্য করার চেষ্টা করা হয়েছে। Python টুলস ব্যবহার করা হবে, তবে এগুলো শুধু ধারণাগুলো বোঝানোর মাধ্যম – আপনি যদি Python ডেভেলপার নাও হন, তাতে কোনো সমস্যা নেই। তবে, আমি ধরে নিচ্ছি যে আপনি কিছু বিষয় আগে থেকেই জানেন, যাতে আমরা দ্রুত ইথেরিয়াম-সম্পর্কিত বিষয়গুলোতে যেতে পারি।

অনুমানসমূহ:

  • আপনি টার্মিনাল ব্যবহার করতে পারেন,
  • আপনি কয়েক লাইন Python কোড লিখেছেন,
  • আপনার মেশিনে Python সংস্করণ 3.6 বা তার বেশি ইনস্টল করা আছে (একটি ভার্চুয়াল এনভায়রনমেন্ট (opens in a new tab) ব্যবহার করার জন্য জোরালোভাবে উৎসাহিত করা হচ্ছে), এবং
  • আপনি Python-এর প্যাকেজ ইনস্টলার pip ব্যবহার করেছেন। আবারও বলছি, যদি এর কোনোটি আপনার ক্ষেত্রে প্রযোজ্য না হয়, বা আপনি এই আর্টিকেলের কোডগুলো নিজে চালিয়ে দেখতে না চান, তবুও আপনি সহজেই এটি বুঝতে পারবেন।

সংক্ষেপে ব্লকচেইন

ইথেরিয়ামকে অনেকভাবে বর্ণনা করা যায়, তবে এর মূলে রয়েছে একটি ব্লকচেইন। ব্লকচেইনগুলো অনেকগুলো ব্লক এর সমন্বয়ে গঠিত, তাই চলুন সেখান থেকেই শুরু করি। সবচেয়ে সহজ কথায়, ইথেরিয়াম ব্লকচেইন এর প্রতিটি ব্লক হলো কিছু মেটাডেটা এবং ট্রানজ্যাকশন এর একটি তালিকা। JSON ফরম্যাটে, এটি দেখতে অনেকটা এরকম:

{
   "number": 1234567,
   "hash": "0xabc123...",
   "parentHash": "0xdef456...",
   ...,
   "transactions": [...]
}

প্রতিটি ব্লক এর আগের ব্লকটির একটি রেফারেন্স থাকে; parentHash হলো আগের ব্লকটির হ্যাশ।

নোট: ইথেরিয়াম নির্দিষ্ট আকারের মান ("হ্যাশ") তৈরি করতে নিয়মিতভাবে হ্যাশ ফাংশন ব্যবহার করে। ইথেরিয়ামে হ্যাশ একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, তবে আপাতত আপনি এগুলোকে ইউনিক আইডি হিসেবে ভাবতে পারেন।

A diagram depicting a blockchain including the data inside  each block

একটি ব্লকচেইন মূলত একটি লিঙ্কড লিস্ট; প্রতিটি ব্লকে আগের ব্লকের একটি রেফারেন্স থাকে।

এই ডেটা স্ট্রাকচারটি নতুন কিছু নয়, তবে যে নিয়মগুলো (যেমন, পিয়ার-টু-পিয়ার প্রোটোকল) নেটওয়ার্ক পরিচালনা করে সেগুলো নতুন। এখানে কোনো কেন্দ্রীয় কর্তৃপক্ষ নেই; নেটওয়ার্ক টিকিয়ে রাখার জন্য পিয়ারদের নেটওয়ার্ককে অবশ্যই সহযোগিতা করতে হবে এবং পরবর্তী ব্লকে কোন ট্রানজ্যাকশনগুলো অন্তর্ভুক্ত করা হবে তা নির্ধারণ করতে প্রতিযোগিতা করতে হবে। সুতরাং, আপনি যখন কোনো বন্ধুকে কিছু টাকা পাঠাতে চান, তখন আপনাকে সেই ট্রানজ্যাকশনটি নেটওয়ার্কে ব্রডকাস্ট করতে হবে, তারপর এটি একটি আসন্ন ব্লকে অন্তর্ভুক্ত হওয়ার জন্য অপেক্ষা করতে হবে।

এক ব্যবহারকারীর কাছ থেকে অন্য ব্যবহারকারীর কাছে সত্যিই টাকা পাঠানো হয়েছে কিনা তা যাচাই করার জন্য ব্লকচেইনের একমাত্র উপায় হলো সেই ব্লকচেইনের নিজস্ব (অর্থাৎ, এর দ্বারা তৈরি এবং পরিচালিত) একটি মুদ্রা ব্যবহার করা। ইথেরিয়ামে, এই মুদ্রাকে ইথার বলা হয় এবং ইথেরিয়াম ব্লকচেইনে অ্যাকাউন্ট ব্যালেন্সের একমাত্র অফিসিয়াল রেকর্ড থাকে।

একটি নতুন দৃষ্টান্ত

এই নতুন বিকেন্দ্রীকৃত টেক স্ট্যাক নতুন ডেভেলপার টুলস তৈরি করেছে। এই ধরনের টুলস অনেক প্রোগ্রামিং ভাষায় বিদ্যমান, তবে আমরা Python এর দৃষ্টিকোণ থেকে দেখব। পুনরায় বলছি: এমনকি Python যদি আপনার পছন্দের ভাষা নাও হয়, তবুও এটি বুঝতে খুব একটা সমস্যা হওয়ার কথা নয়।

যেসব Python ডেভেলপার ইথেরিয়াম এর সাথে ইন্টারঅ্যাক্ট করতে চান তারা সম্ভবত Web3.py (opens in a new tab) ব্যবহার করবেন। Web3.py হলো এমন একটি লাইব্রেরি যা একটি ইথেরিয়াম নোড এর সাথে কানেক্ট করার এবং সেখান থেকে ডেটা পাঠানো ও গ্রহণ করার পদ্ধতিকে অনেক সহজ করে দেয়।

নোট: "ইথেরিয়াম নোড" এবং "ইথেরিয়াম ক্লায়েন্ট" শব্দ দুটি একে অপরের পরিপূরক হিসেবে ব্যবহৃত হয়। উভয় ক্ষেত্রেই, এটি এমন একটি সফটওয়্যারকে বোঝায় যা ইথেরিয়াম নেটওয়ার্ক এর একজন অংশগ্রহণকারী চালায়। এই সফটওয়্যারটি ব্লক ডেটা পড়তে পারে, চেইন এ নতুন ব্লক যোগ হলে আপডেট পেতে পারে, নতুন ট্রানজ্যাকশন ব্রডকাস্ট করতে পারে এবং আরও অনেক কিছু করতে পারে। প্রযুক্তিগতভাবে, ক্লায়েন্ট হলো সফটওয়্যার, আর নোড হলো সেই কম্পিউটার যা সফটওয়্যারটি চালায়।

ইথেরিয়াম ক্লায়েন্টগুলো IPC (opens in a new tab), HTTP, বা Websockets এর মাধ্যমে অ্যাক্সেসযোগ্য হওয়ার জন্য কনফিগার করা যেতে পারে, তাই Web3.py-কেও এই কনফিগারেশনটি মিরর করতে হবে। Web3.py এই কানেকশন অপশনগুলোকে প্রোভাইডার (providers) হিসেবে উল্লেখ করে। আপনার নোড এর সাথে Web3.py ইনস্ট্যান্স লিঙ্ক করতে আপনি এই তিনটি প্রোভাইডারের মধ্যে একটি বেছে নিতে চাইবেন।

A diagram showing how web3.py uses IPC to connect your application to an Ethereum node

একই প্রোটোকল এর মাধ্যমে যোগাযোগ করার জন্য ইথেরিয়াম নোড এবং Web3.py কনফিগার করুন, যেমন, এই ডায়াগ্রামে IPC।

Web3.py সঠিকভাবে কনফিগার হয়ে গেলে, আপনি ব্লকচেইন এর সাথে ইন্টারঅ্যাক্ট করা শুরু করতে পারেন। সামনে কী আসতে চলেছে তার একটি প্রিভিউ হিসেবে এখানে Web3.py ব্যবহারের কয়েকটি উদাহরণ দেওয়া হলো:

# ব্লক ডেটা পড়ুন:
w3.eth.get_block('latest')

# একটি ট্রানজ্যাকশন পাঠান:
w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...})

ইনস্টলেশন

এই নির্দেশিকায়, আমরা শুধু একটি Python ইন্টারপ্রেটারের মধ্যে কাজ করব। আমরা কোনো ডিরেক্টরি, ফাইল, ক্লাস বা ফাংশন তৈরি করব না।

নোট: নিচের উদাহরণগুলোতে, যে কমান্ডগুলো $ দিয়ে শুরু হয় সেগুলো টার্মিনালে চালানোর জন্য। ($ টাইপ করবেন না, এটি শুধু লাইনের শুরু বোঝায়।)

প্রথমে, এক্সপ্লোর করার জন্য একটি ব্যবহারকারী-বান্ধব পরিবেশ পেতে IPython (opens in a new tab) ইনস্টল করুন। IPython অন্যান্য ফিচারের পাশাপাশি ট্যাব কমপ্লিশন অফার করে, যা Web3.py এর মধ্যে কী কী করা সম্ভব তা দেখা অনেক সহজ করে তোলে।

pip install ipython

Web3.py web3 নামে প্রকাশিত হয়েছে। এটি এভাবে ইনস্টল করুন:

pip install web3

আরেকটি বিষয় – আমরা পরে একটি ব্লকচেইন সিমুলেট করতে যাচ্ছি, যার জন্য আরও কয়েকটি ডিপেন্ডেন্সি প্রয়োজন। আপনি সেগুলো এর মাধ্যমে ইনস্টল করতে পারেন:

pip install 'web3[tester]'

আপনি কাজ শুরু করার জন্য পুরোপুরি প্রস্তুত!

নোট: web3[tester] প্যাকেজটি Python 3.10.xx পর্যন্ত কাজ করে

একটি স্যান্ডবক্স চালু করুন

আপনার টার্মিনালে ipython চালিয়ে একটি নতুন Python এনভায়রনমেন্ট খুলুন। এটি python চালানোর মতোই, তবে এতে আরও অনেক সুবিধা রয়েছে।

ipython

এটি আপনি যে Python এবং IPython সংস্করণগুলো চালাচ্ছেন সে সম্পর্কে কিছু তথ্য প্রিন্ট করবে, তারপর আপনি ইনপুটের জন্য অপেক্ষারত একটি প্রম্পট দেখতে পাবেন:

In [1]:

আপনি এখন একটি ইন্টারেক্টিভ Python শেল দেখছেন। মূলত, এটি কাজ করার জন্য একটি স্যান্ডবক্স। আপনি যদি এতদূর এসে থাকেন, তবে এখন Web3.py ইমপোর্ট করার সময়:

In [1]: from web3 import Web3

Web3 মডিউলের পরিচিতি

ইথেরিয়াম এর গেটওয়ে হওয়ার পাশাপাশি, Web3 (opens in a new tab) মডিউল কিছু সুবিধাজনক ফাংশন অফার করে। চলুন কয়েকটি এক্সপ্লোর করি।

একটি ইথেরিয়াম অ্যাপ্লিকেশনে, আপনাকে সাধারণত মুদ্রার মান রূপান্তর করতে হবে। Web3 মডিউল শুধু এর জন্যই কয়েকটি হেল্পার মেথড প্রদান করে: from_wei (opens in a new tab) এবং to_wei (opens in a new tab)

নোট: কম্পিউটার দশমিক গণিত পরিচালনা করতে বেশ খারাপ। এটি এড়াতে, ডেভেলপাররা প্রায়ই ডলারের পরিমাণ সেন্টে সংরক্ষণ করে। উদাহরণস্বরূপ, $5.99 দামের একটি আইটেম ডেটাবেসে 599 হিসেবে সংরক্ষণ করা হতে পারে।

ইথার এ ট্রানজ্যাকশন পরিচালনা করার সময় একই ধরনের প্যাটার্ন ব্যবহার করা হয়। তবে, দুটি দশমিক বিন্দুর পরিবর্তে, ইথারে 18টি থাকে! ইথারের সবচেয়ে ছোট মানকে Wei বলা হয়, তাই ট্রানজ্যাকশন পাঠানোর সময় এই মানটিই উল্লেখ করা হয়।

1 ইথার = 1000000000000000000 Wei

1 Wei = 0.000000000000000001 ইথার

কিছু মান Wei-তে এবং Wei থেকে রূপান্তর করার চেষ্টা করুন। মনে রাখবেন যে ইথার এবং Wei এর মধ্যে অনেকগুলো মানের নাম রয়েছে (opens in a new tab)। এগুলোর মধ্যে অন্যতম পরিচিত হলো Gwei, কারণ প্রায়শই লেনদেন ফি এভাবেই উপস্থাপন করা হয়।

In [2]: Web3.to_wei(1, 'ether')
Out[2]: 1000000000000000000

In [3]: Web3.from_wei(500000000, 'gwei')
Out[3]: Decimal('0.5')

Web3 মডিউলের অন্যান্য ইউটিলিটি মেথডগুলোর মধ্যে রয়েছে ডেটা ফরম্যাট কনভার্টার (যেমন, toHex (opens in a new tab)), ঠিকানা হেল্পার (যেমন, isAddress (opens in a new tab)), এবং হ্যাশ ফাংশন (যেমন, keccak (opens in a new tab))। এগুলোর অনেকগুলোই সিরিজের পরের অংশে কভার করা হবে। উপলব্ধ সমস্ত মেথড এবং প্রপার্টি দেখতে, Web3. টাইপ করে এবং পিরিয়ডের পরে দুবার ট্যাব কী চেপে IPython-এর অটো-কমপ্লিট ব্যবহার করুন।

চেইন এর সাথে কথা বলুন

সুবিধাজনক মেথডগুলো চমৎকার, তবে চলুন ব্লকচেইন এর দিকে এগিয়ে যাই। পরবর্তী ধাপ হলো একটি ইথেরিয়াম নোড এর সাথে যোগাযোগ করার জন্য Web3.py কনফিগার করা। এখানে আমাদের কাছে IPC, HTTP, বা Websocket প্রোভাইডার ব্যবহার করার অপশন রয়েছে।

আমরা এই পথে যাব না, তবে HTTP প্রোভাইডার ব্যবহার করে একটি সম্পূর্ণ ওয়ার্কফ্লোর উদাহরণ দেখতে অনেকটা এরকম হতে পারে:

  • একটি ইথেরিয়াম নোড ডাউনলোড করুন, যেমন, Geth (opens in a new tab)
  • একটি টার্মিনাল উইন্ডোতে Geth চালু করুন এবং নেটওয়ার্ক সিঙ্কিং এর জন্য অপেক্ষা করুন। ডিফল্ট HTTP পোর্ট হলো 8545, তবে এটি কনফিগারযোগ্য।
  • Web3.py-কে localhost:8545 এ HTTP এর মাধ্যমে নোড এর সাথে কানেক্ট করতে বলুন। w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
  • নোড এর সাথে ইন্টারঅ্যাক্ট করতে w3 ইনস্ট্যান্স ব্যবহার করুন।

যদিও এটি করার একটি "বাস্তব" উপায়, সিঙ্কিং প্রক্রিয়ায় কয়েক ঘণ্টা সময় লাগে এবং আপনি যদি শুধু একটি ডেভেলপমেন্ট এনভায়রনমেন্ট চান তবে এটি অপ্রয়োজনীয়। Web3.py এই উদ্দেশ্যে একটি চতুর্থ প্রোভাইডার, EthereumTesterProvider প্রকাশ করে। এই টেস্টার প্রোভাইডারটি শিথিল পারমিশন এবং কাজ করার জন্য নকল মুদ্রা সহ একটি সিমুলেটেড ইথেরিয়াম নোড এর সাথে লিঙ্ক করে।

A diagram showing the EthereumTesterProvider linking your web3.py application to a simulated Ethereum node

EthereumTesterProvider একটি সিমুলেটেড নোড এর সাথে কানেক্ট করে এবং দ্রুত ডেভেলপমেন্ট এনভায়রনমেন্টের জন্য সুবিধাজনক।

সেই সিমুলেটেড নোডটিকে eth-tester (opens in a new tab) বলা হয় এবং আমরা এটিকে pip install web3[tester] কমান্ডের অংশ হিসেবে ইনস্টল করেছি। এই টেস্টার প্রোভাইডার ব্যবহার করার জন্য Web3.py কনফিগার করা খুবই সহজ:

In [4]: w3 = Web3(Web3.EthereumTesterProvider())

এখন আপনি চেইন সার্ফ করতে প্রস্তুত! মানুষ আসলে এমনটা বলে না। আমি শুধু বানিয়ে বললাম। চলুন একটি দ্রুত ট্যুর দেওয়া যাক।

দ্রুত ট্যুর

প্রথমেই, একটি স্যানিটি চেক:

In [5]: w3.is_connected()
Out[5]: True

যেহেতু আমরা টেস্টার প্রোভাইডার ব্যবহার করছি, এটি খুব একটা মূল্যবান টেস্ট নয়, তবে যদি এটি ব্যর্থ হয়, তবে সম্ভবত আপনি w3 ভেরিয়েবল ইনস্ট্যানশিয়েট করার সময় ভুল কিছু টাইপ করেছেন। আপনি ভেতরের বন্ধনীগুলো অন্তর্ভুক্ত করেছেন কিনা তা দুবার চেক করুন, অর্থাৎ, Web3.EthereumTesterProvider()

ট্যুর স্টপ #1: অ্যাকাউন্ট

সুবিধার জন্য, টেস্টার প্রোভাইডার কিছু অ্যাকাউন্ট তৈরি করেছে এবং সেগুলোতে টেস্ট ইথার প্রি-লোড করেছে।

প্রথমে, চলুন সেই অ্যাকাউন্টগুলোর একটি তালিকা দেখি:

In [6]: w3.eth.accounts
Out[6]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',
 '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',
 '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...]

আপনি যদি এই কমান্ডটি চালান, তবে আপনার 0x দিয়ে শুরু হওয়া দশটি স্ট্রিংয়ের একটি তালিকা দেখা উচিত। এর প্রতিটি হলো একটি পাবলিক ঠিকানা এবং এটি কোনো না কোনোভাবে চেকিং অ্যাকাউন্টের অ্যাকাউন্ট নম্বরের মতো। যে আপনাকে ইথার পাঠাতে চায় তাকে আপনি এই ঠিকানাটি দেবেন।

যেমনটি উল্লেখ করা হয়েছে, টেস্টার প্রোভাইডার এই প্রতিটি অ্যাকাউন্টে কিছু টেস্ট ইথার প্রি-লোড করেছে। চলুন জেনে নিই প্রথম অ্যাকাউন্টে কত আছে:

In [7]: w3.eth.get_balance(w3.eth.accounts[0])
Out[7]: 1000000000000000000000000

অনেকগুলো শূন্য! ফেক ব্যাংকে যাওয়ার আগে, মুদ্রার মান সম্পর্কে আগের সেই পাঠটি মনে করুন। ইথারের মানগুলো সবচেয়ে ছোট মান, Wei-তে উপস্থাপন করা হয়। এটিকে ইথারে রূপান্তর করুন:

In [8]: w3.from_wei(1000000000000000000000000, 'ether')
Out[8]: Decimal('1000000')

এক মিলিয়ন টেস্ট ইথার — এখনও খুব একটা খারাপ নয়।

ট্যুর স্টপ #2: ব্লক ডেটা

চলুন এই সিমুলেটেড ব্লকচেইন এর স্টেট একবার দেখে নিই:

In [9]: w3.eth.get_block('latest')
Out[9]: AttributeDict({
   'number': 0,
   'hash': HexBytes('0x9469878...'),
   'parentHash': HexBytes('0x0000000...'),
   ...
   'transactions': []
})

একটি ব্লক সম্পর্কে অনেক তথ্য রিটার্ন করা হয়, তবে এখানে শুধু কয়েকটি বিষয় উল্লেখ করা হলো:

  • ব্লক নম্বর শূন্য — আপনি যত আগেই টেস্টার প্রোভাইডার কনফিগার করুন না কেন। আসল ইথেরিয়াম নেটওয়ার্ক এর মতো নয়, যা প্রতি 12 সেকেন্ডে একটি নতুন ব্লক যোগ করে, এই সিমুলেশনটি ততক্ষণ অপেক্ষা করবে যতক্ষণ না আপনি এটিকে কোনো কাজ দিচ্ছেন।
  • transactions হলো একটি খালি তালিকা, একই কারণে: আমরা এখনও কিছু করিনি। এই প্রথম ব্লকটি হলো একটি খালি ব্লক, শুধু চেইন শুরু করার জন্য।
  • খেয়াল করুন যে parentHash হলো শুধু একগুচ্ছ খালি বাইট। এটি বোঝায় যে এটি চেইন এর প্রথম ব্লক, যা জেনেসিস ব্লক নামেও পরিচিত।

ট্যুর স্টপ #3: ট্রানজ্যাকশন

যতক্ষণ না কোনো অপেক্ষমাণ লেনদেন থাকে ততক্ষণ আমরা ব্লক শূন্যতে আটকে আছি, তাই চলুন একটি দেওয়া যাক। এক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে কিছু টেস্ট ইথার পাঠান:

In [10]: tx_hash = w3.eth.send_transaction({
   'from': w3.eth.accounts[0],
   'to': w3.eth.accounts[1],
   'value': w3.to_wei(3, 'ether'),
   'gas': 21000
})

সাধারণত এই পর্যায়ে আপনি আপনার ট্রানজ্যাকশনটি একটি নতুন ব্লকে অন্তর্ভুক্ত হওয়ার জন্য কয়েক সেকেন্ড অপেক্ষা করবেন। সম্পূর্ণ প্রক্রিয়াটি অনেকটা এরকম:

  1. একটি ট্রানজ্যাকশন সাবমিট করুন এবং ট্রানজ্যাকশন হ্যাশ ধরে রাখুন। ট্রানজ্যাকশন ধারণকারী ব্লকটি তৈরি এবং ব্রডকাস্ট না হওয়া পর্যন্ত, ট্রানজ্যাকশনটি "অপেক্ষমাণ" থাকে। tx_hash = w3.eth.send_transaction({ … })
  2. ট্রানজ্যাকশনটি একটি ব্লকে অন্তর্ভুক্ত হওয়ার জন্য অপেক্ষা করুন: w3.eth.wait_for_transaction_receipt(tx_hash)
  3. অ্যাপ্লিকেশন লজিক চালিয়ে যান। সফল ট্রানজ্যাকশন দেখতে: w3.eth.get_transaction(tx_hash)

আমাদের সিমুলেটেড এনভায়রনমেন্ট ট্রানজ্যাকশনটিকে তাৎক্ষণিকভাবে একটি নতুন ব্লকে যোগ করবে, তাই আমরা সাথে সাথেই ট্রানজ্যাকশনটি দেখতে পারি:

আপনি এখানে কিছু পরিচিত বিবরণ দেখতে পাবেন: from, to, এবং value ফিল্ডগুলো আমাদের send_transaction কলের ইনপুটগুলোর সাথে মিলে যাওয়া উচিত। আরেকটি আশ্বস্ত করার মতো বিষয় হলো যে এই ট্রানজ্যাকশনটি 1 নম্বর ব্লকের মধ্যে প্রথম ট্রানজ্যাকশন ('transactionIndex': 0) হিসেবে অন্তর্ভুক্ত করা হয়েছিল।

আমরা জড়িত দুটি অ্যাকাউন্টের ব্যালেন্স চেক করেও সহজেই এই ট্রানজ্যাকশনের সফলতা যাচাই করতে পারি। তিন ইথার এক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে হস্তান্তর হওয়া উচিত।

In [12]: w3.eth.get_balance(w3.eth.accounts[0])
Out[12]: 999996999979000000000000

In [13]: w3.eth.get_balance(w3.eth.accounts[1])
Out[13]: 1000003000000000000000000

পরেরটি ঠিক আছে বলে মনে হচ্ছে! ব্যালেন্স 1,000,000 থেকে 1,000,003 ইথারে গেছে। কিন্তু প্রথম অ্যাকাউন্টের কী হলো? মনে হচ্ছে এটি তিন ইথারের চেয়ে সামান্য বেশি হারিয়েছে। হায়, জীবনে কোনো কিছুই বিনামূল্যে পাওয়া যায় না, এবং ইথেরিয়াম পাবলিক নেটওয়ার্ক ব্যবহার করার জন্য আপনাকে আপনার পিয়ারদের তাদের সহায়ক ভূমিকার জন্য ক্ষতিপূরণ দিতে হবে। যে অ্যাকাউন্টটি ট্রানজ্যাকশন সাবমিট করেছে তার থেকে একটি ছোট লেনদেন ফি কেটে নেওয়া হয়েছে - এই ফি হলো পোড়ানো গ্যাস এর পরিমাণ (একটি ETH হস্তান্তরের জন্য 21000 ইউনিট গ্যাস) গুণিতক একটি ভিত্তি ফি যা নেটওয়ার্ক অ্যাক্টিভিটি অনুযায়ী পরিবর্তিত হয় এবং একটি টিপ যা সেই ভ্যালিডেটর এর কাছে যায় যে ট্রানজ্যাকশনটিকে একটি ব্লকে অন্তর্ভুক্ত করে।

গ্যাস সম্পর্কে আরও জানুন

নোট: পাবলিক নেটওয়ার্কে, নেটওয়ার্কের চাহিদা এবং আপনি কত দ্রুত একটি ট্রানজ্যাকশন প্রসেস করতে চান তার ওপর ভিত্তি করে লেনদেন ফি পরিবর্তনশীল। আপনি যদি ফি কীভাবে গণনা করা হয় তার একটি ব্রেকডাউন জানতে আগ্রহী হন, তবে কীভাবে ট্রানজ্যাকশনগুলো একটি ব্লকে অন্তর্ভুক্ত করা হয় সে সম্পর্কে আমার আগের পোস্টটি দেখুন।

এবং শ্বাস নিন

আমরা বেশ কিছুক্ষণ ধরে এটি নিয়ে কাজ করছি, তাই বিরতি নেওয়ার জন্য এটি একটি ভালো জায়গা বলে মনে হচ্ছে। এই গভীরে যাওয়ার যাত্রা চলতেই থাকবে, এবং আমরা এই সিরিজের দ্বিতীয় পর্বে এক্সপ্লোর করা চালিয়ে যাব। সামনে যে কনসেপ্টগুলো আসবে: একটি আসল নোড এর সাথে কানেক্ট করা, স্মার্ট কন্ট্রাক্ট এবং টোকেন। কোনো ফলো-আপ প্রশ্ন আছে? আমাকে জানান! আপনার ফিডব্যাক প্রভাবিত করবে যে আমরা এখান থেকে কোথায় যাব। টুইটার (opens in a new tab) এর মাধ্যমে রিকোয়েস্ট স্বাগত।

পেজ সর্বশেষ আপডেট করা হয়েছে: 3 মার্চ, 2026