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

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

Python
web3.py
শিক্ষানবিস
মার্ক গ্যারো
৮ সেপ্টেম্বর, ২০২০
11 মিনিট পড়া

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

(সফট) পূর্বশর্ত

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

অনুমানসমূহ:

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

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

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

1{
2 "number": 1234567,
3 "hash": "0xabc123...",
4 "parentHash": "0xdef456...",
5 ...,
6 "transactions": [...]
7}

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

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

একটি ডায়াগ্রাম যা প্রতিটি ব্লকের ভেতরের ডেটাসহ একটি ব্লকচেইন চিত্রিত করে

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

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

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

একটি নতুন প্যারাডাইম

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

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

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

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

একটি ডায়াগ্রাম যা দেখাচ্ছে কীভাবে web3.py আপনার অ্যাপ্লিকেশনকে একটি ইথিরিয়াম নোডের সাথে কানেক্ট করতে IPC ব্যবহার করে

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

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

1# ব্লক ডেটা পড়ুন:
2w3.eth.get_block('latest')
3
4# একটি লেনদেন পাঠান:
5w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...})

ইনস্টলেশন

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

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

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

pip install ipython

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

pip install web3

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

pip install 'web3[tester]'

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

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

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

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

ipython

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

1In [1]:

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

1In [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, কারণ ট্রানজেকশন ফি প্রায়শই এভাবেই উপস্থাপন করা হয়।

1In [2]: Web3.to_wei(1, 'ether')
2Out[2]: 1000000000000000000
3
4In [3]: Web3.from_wei(500000000, 'gwei')
5Out[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 প্রকাশ করে। এই টেস্টার প্রোভাইডারটি শিথিল পারমিশন এবং কাজ করার জন্য ফেক কারেন্সিসহ একটি সিমুলেটেড ইথিরিয়াম নোড এর সাথে লিঙ্ক করে।

একটি ডায়াগ্রাম যা দেখাচ্ছে EthereumTesterProvider আপনার web3.py অ্যাপ্লিকেশনকে একটি সিমুলেটেড ইথিরিয়াম নোডের সাথে লিঙ্ক করছে

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

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

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

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

দ্রুত ট্যুর

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1In [9]: w3.eth.get_block('latest')
2Out[9]: AttributeDict({
3 'number': 0,
4 'hash': HexBytes('0x9469878...'),
5 'parentHash': HexBytes('0x0000000...'),
6 ...
7 'transactions': []
8})

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

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

ট্যুর স্টপ #3: লেনদেন

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

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

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

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

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

1In [11]: w3.eth.get_transaction(tx_hash)
2Out[11]: AttributeDict({
3 'hash': HexBytes('0x15e9fb95dc39...'),
4 'blockNumber': 1,
5 'transactionIndex': 0,
6 'from': '0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',
7 'to': '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',
8 'value': 3000000000000000000,
9 ...
10})
সব দেখান

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

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

1In [12]: w3.eth.get_balance(w3.eth.accounts[0])
2Out[12]: 999996999979000000000000
3
4In [13]: w3.eth.get_balance(w3.eth.accounts[1])
5Out[13]: 1000003000000000000000000

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

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

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

এবং শ্বাস নিন

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

পেজ সর্বশেষ আপডেট: ৩ মার্চ, ২০২৬

এই টিউটোরিয়ালটি কি সহায়ক ছিল?