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

লেনদেন

পেজ সর্বশেষ আপডেট: 23 ফেব্রুয়ারী, 2026

লেনদেন হলো একাউন্ট থেকে আসা ক্রিপ্টোগ্রাফিক্যালি সাইন করা নির্দেশাবলী। একটি একাউন্ট Ethereum নেটওয়ার্ক-এর স্টেট আপডেট করার জন্য একটি লেনদেন শুরু করবে। সবচেয়ে সহজ লেনদেন হলো এক একাউন্ট থেকে অন্য একাউন্টে ETH ট্রান্সফার করা।

পূর্বশর্ত

এই পেজটি আরও ভালোভাবে বোঝার জন্য, আমরা সুপারিশ করছি যে আপনি প্রথমে একাউন্ট এবং আমাদের ইথিরিয়ামের পরিচিতি পড়ে নিন।

লেনদেন কী?

একটি ইথিরিয়াম লেনদেন বলতে একটি এক্সটার্নালি ওনড একাউন্ট দ্বারা শুরু করা একটি কাজকে বোঝায়, অন্য কথায় এটি এমন একটি একাউন্ট যা মানুষের দ্বারা পরিচালিত হয়, কোনো কন্ট্রাক্ট দ্বারা নয়। উদাহরণস্বরূপ, যদি Bob, Alice-কে 1 ETH পাঠায়, তবে Bob-এর একাউন্ট থেকে ডেবিট হতে হবে এবং Alice-এর একাউন্টে ক্রেডিট হতে হবে। স্টেট পরিবর্তনকারী এই কাজটি একটি লেনদেনের মধ্যেই ঘটে।

Diagram showing a transaction cause state change চিত্রটি Ethereum EVM illustrated (opens in a new tab) থেকে নেওয়া হয়েছে

লেনদেন, যা EVM-এর স্টেট পরিবর্তন করে, তা পুরো নেটওয়ার্ক-এ ব্রডকাস্ট করা প্রয়োজন। যেকোনো নোড EVM-এ একটি লেনদেন এক্সিকিউট করার জন্য রিকোয়েস্ট ব্রডকাস্ট করতে পারে; এটি হওয়ার পর, একজন ভ্যালিডেটর লেনদেনটি এক্সিকিউট করবে এবং এর ফলে হওয়া স্টেট পরিবর্তনটি নেটওয়ার্ক-এর বাকি অংশে ছড়িয়ে দেবে।

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

সাবমিট করা একটি লেনদেনে নিচের তথ্যগুলো থাকে:

  • from – প্রেরকের এডড্রেস, যিনি লেনদেনে সাইন করবেন। এটি একটি এক্সটার্নালি ওনড একাউন্ট হবে কারণ কন্ট্রাক্ট একাউন্ট লেনদেন পাঠাতে পারে না
  • to – প্রাপকের এডড্রেস (যদি এটি একটি এক্সটার্নালি ওনড একাউন্ট হয়, তবে লেনদেনটি ভ্যালু ট্রান্সফার করবে। যদি এটি একটি কন্ট্রাক্ট একাউন্ট হয়, তবে লেনদেনটি কন্ট্রাক্ট কোড এক্সিকিউট করবে)
  • signature – প্রেরকের আইডেন্টিফায়ার। এটি তখন তৈরি হয় যখন প্রেরকের প্রাইভেট কি লেনদেনে সাইন করে এবং নিশ্চিত করে যে প্রেরক এই লেনদেনটি অনুমোদন করেছেন
  • nonce - একটি ক্রমান্বয়ে বৃদ্ধি পাওয়া কাউন্টার যা একাউন্ট থেকে লেনদেনের নম্বর নির্দেশ করে
  • value – প্রেরক থেকে প্রাপকের কাছে ট্রান্সফার করার জন্য ETH-এর পরিমাণ (WEI-তে ডিনোমিনেট করা, যেখানে 1ETH সমান 1e+18wei)
  • input data – যেকোনো ডাটা অন্তর্ভুক্ত করার জন্য অপশনাল ফিল্ড
  • gasLimit – লেনদেনের মাধ্যমে খরচ হতে পারে এমন গ্যাস ইউনিটের সর্বোচ্চ পরিমাণ। EVM প্রতিটি কম্পিউটেশনাল ধাপের জন্য প্রয়োজনীয় গ্যাস ইউনিট নির্দিষ্ট করে
  • maxPriorityFeePerGas - ভ্যালিডেটর-কে টিপ হিসেবে দেওয়ার জন্য খরচ হওয়া গ্যাস-এর সর্বোচ্চ মূল্য
  • maxFeePerGas - লেনদেনের জন্য প্রতি ইউনিট গ্যাস-এর সর্বোচ্চ ফি যা দিতে ইচ্ছুক (baseFeePerGas এবং maxPriorityFeePerGas সহ)

গ্যাস হলো একজন ভ্যালিডেটর দ্বারা লেনদেন প্রসেস করার জন্য প্রয়োজনীয় কম্পিউটেশনের একটি রেফারেন্স। ব্যবহারকারীদের এই কম্পিউটেশনের জন্য একটি ফি দিতে হয়। gasLimit এবং maxPriorityFeePerGas ভ্যালিডেটর-কে দেওয়া সর্বোচ্চ ট্রানজেকশন ফি নির্ধারণ করে। গ্যাস সম্পর্কে আরও জানুন

লেনদেন অবজেক্টটি দেখতে অনেকটা এরকম হবে:

1{
2 from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
3 to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
4 gasLimit: "21000",
5 maxFeePerGas: "300",
6 maxPriorityFeePerGas: "10",
7 nonce: "0",
8 value: "10000000000"
9}

তবে একটি লেনদেন অবজেক্টে প্রেরকের প্রাইভেট কি ব্যবহার করে সাইন করা প্রয়োজন। এটি প্রমাণ করে যে লেনদেনটি শুধুমাত্র প্রেরকের কাছ থেকেই এসেছে এবং প্রতারণামূলকভাবে পাঠানো হয়নি।

Geth-এর মতো একটি ইথিরিয়াম ক্লায়েন্ট এই সাইনিং প্রক্রিয়াটি পরিচালনা করবে।

উদাহরণস্বরূপ JSON-RPC কল:

1{
2 "id": 2,
3 "jsonrpc": "2.0",
4 "method": "account_signTransaction",
5 "params": [
6 {
7 "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
8 "gas": "0x55555",
9 "maxFeePerGas": "0x1234",
10 "maxPriorityFeePerGas": "0x1234",
11 "input": "0xabcd",
12 "nonce": "0x0",
13 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
14 "value": "0x1234"
15 }
16 ]
17}

উদাহরণস্বরূপ রেসপন্স:

1{
2 "jsonrpc": "2.0",
3 "id": 2,
4 "result": {
5 "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
6 "tx": {
7 "nonce": "0x0",
8 "maxFeePerGas": "0x1234",
9 "maxPriorityFeePerGas": "0x1234",
10 "gas": "0x55555",
11 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
12 "value": "0x1234",
13 "input": "0xabcd",
14 "v": "0x26",
15 "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
16 "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
17 "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
18 }
19 }
20}
  • raw হলো Recursive Length Prefix (RLP) এনকোড করা ফর্মে সাইন করা লেনদেন
  • tx হলো JSON ফর্মে সাইন করা লেনদেন

সিগনেচার হ্যাস-এর মাধ্যমে, লেনদেনটি ক্রিপ্টোগ্রাফিক্যালি প্রমাণ করা যায় যে এটি প্রেরকের কাছ থেকে এসেছে এবং নেটওয়ার্ক-এ সাবমিট করা হয়েছে।

ডাটা ফিল্ড

অধিকাংশ লেনদেন একটি এক্সটার্নালি ওনড একাউন্ট থেকে একটি কন্ট্রাক্ট এক্সেস করে। বেশিরভাগ কন্ট্রাক্ট Solidity-তে লেখা হয় এবং অনুযায়ী তাদের ডাটা ফিল্ড ইন্টারপ্রেট করে।

প্রথম চারটি বাইট ফাংশনের নাম এবং আর্গুমেন্টগুলোর হ্যাস ব্যবহার করে কোন ফাংশনটি কল করতে হবে তা নির্দিষ্ট করে। আপনি মাঝে মাঝে এই ডাটাবেস (opens in a new tab) ব্যবহার করে সিলেক্টর থেকে ফাংশনটি শনাক্ত করতে পারেন।

বাকি কলডাটা হলো আর্গুমেন্ট, যা ABI স্পেসিফিকেশনে নির্দিষ্ট করা অনুযায়ী এনকোড করা হয় (opens in a new tab)

উদাহরণস্বরূপ, আসুন এই লেনদেনটি (opens in a new tab) দেখি। কলডাটা দেখতে Click to see More ব্যবহার করুন।

ফাংশন সিলেক্টর হলো 0xa9059cbb। এই সিগনেচারের সাথে বেশ কয়েকটি পরিচিত ফাংশন রয়েছে (opens in a new tab)। এক্ষেত্রে কন্ট্রাক্ট সোর্স কোড (opens in a new tab) Etherscan-এ আপলোড করা হয়েছে, তাই আমরা জানি ফাংশনটি হলো transfer(address,uint256)

বাকি ডাটা হলো:

10000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279
2000000000000000000000000000000000000000000000000000000003b0559f4

ABI স্পেসিফিকেশন অনুযায়ী, ইন্টিজার ভ্যালুগুলো (যেমন এডড্রেস, যা 20-বাইট ইন্টিজার) ABI-তে 32-বাইট ওয়ার্ড হিসেবে উপস্থিত হয়, যার সামনে শূন্য দিয়ে প্যাড করা থাকে। তাই আমরা জানি যে to এডড্রেস হলো 4f6742badb049791cd9a37ea913f2bac38d01279 (opens in a new tab)value হলো 0x3b0559f4 = 990206452।

লেনদেনের ধরন

ইথিরিয়ামে কয়েক ধরনের লেনদেন রয়েছে:

  • সাধারণ লেনদেন: এক একাউন্ট থেকে অন্য একাউন্টে লেনদেন।
  • কন্ট্রাক্ট ডেপ্লয়মেন্ট লেনদেন: 'to' এডড্রেস ছাড়া একটি লেনদেন, যেখানে ডাটা ফিল্ডটি কন্ট্রাক্ট কোডের জন্য ব্যবহৃত হয়।
  • কন্ট্রাক্ট এক্সিকিউশন: একটি লেনদেন যা ডেপ্লয় করা স্মার্ট কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করে। এক্ষেত্রে, 'to' এডড্রেস হলো স্মার্ট কন্ট্রাক্ট এডড্রেস।

গ্যাস সম্পর্কে

যেমনটি উল্লেখ করা হয়েছে, লেনদেন এক্সিকিউট করতে গ্যাস খরচ হয়। সাধারণ ট্রান্সফার লেনদেনের জন্য 21000 ইউনিট গ্যাস প্রয়োজন।

তাই Bob যদি Alice-কে 190 gwei baseFeePerGas এবং 10 gwei maxPriorityFeePerGas-এ 1 ETH পাঠাতে চায়, তবে Bob-কে নিচের ফি দিতে হবে:

1(190 + 10) * 21000 = 4,200,000 gwei
2--or--
30.0042 ETH

Bob-এর একাউন্ট থেকে ডেবিট হবে -1.0042 ETH (Alice-এর জন্য 1 ETH + গ্যাস ফি হিসেবে 0.0042 ETH)

Alice-এর একাউন্টে ক্রেডিট হবে +1.0 ETH

বেস ফি বার্ন হবে -0.00399 ETH

ভ্যালিডেটর টিপ হিসেবে রাখবে +0.000210 ETH

Diagram showing how unused gas is refunded চিত্রটি Ethereum EVM illustrated (opens in a new tab) থেকে নেওয়া হয়েছে

লেনদেনে ব্যবহৃত না হওয়া যেকোনো গ্যাস ব্যবহারকারীর একাউন্ট-এ রিফান্ড করা হয়।

স্মার্ট কন্ট্রাক্ট ইন্টারঅ্যাকশন

স্মার্ট কন্ট্রাক্ট জড়িত এমন যেকোনো লেনদেনের জন্য গ্যাস প্রয়োজন।

স্মার্ট কন্ট্রাক্ট-এ view (opens in a new tab) বা pure (opens in a new tab) ফাংশন নামে পরিচিত ফাংশনও থাকতে পারে, যা কন্ট্রাক্টের স্টেট পরিবর্তন করে না। তাই, একটি EOA থেকে এই ফাংশনগুলো কল করার জন্য কোনো গ্যাস প্রয়োজন হবে না। এই পরিস্থিতির জন্য অন্তর্নিহিত RPC কল হলো eth_call

eth_call ব্যবহার করে এক্সেস করার বিপরীতে, এই view বা pure ফাংশনগুলো সাধারণত ইন্টারনালিও কল করা হয় (অর্থাৎ, কন্ট্রাক্ট থেকে বা অন্য কোনো কন্ট্রাক্ট থেকে) যার জন্য গ্যাস খরচ হয়।

লেনদেনের লাইফসাইকেল

লেনদেন সাবমিট করার পর নিচের ঘটনাগুলো ঘটে:

  1. একটি ট্রানজেকশন হ্যাস ক্রিপ্টোগ্রাফিক্যালি তৈরি হয়: 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
  2. এরপর লেনদেনটি নেটওয়ার্ক-এ ব্রডকাস্ট করা হয় এবং অন্যান্য সমস্ত পেন্ডিং নেটওয়ার্ক লেনদেন নিয়ে গঠিত একটি ট্রানজেকশন পুলে যোগ করা হয়।
  3. লেনদেনটি ভেরিফাই করতে এবং এটিকে "সফল" হিসেবে বিবেচনা করার জন্য একজন ভ্যালিডেটর-কে অবশ্যই আপনার লেনদেনটি বেছে নিতে হবে এবং এটিকে একটি ব্লক-এ অন্তর্ভুক্ত করতে হবে।
  4. সময় যাওয়ার সাথে সাথে আপনার লেনদেন ধারণকারী ব্লকটি "জাস্টিফাইড" এবং তারপর "ফাইনাল" হিসেবে আপগ্রেড হবে। এই আপগ্রেডগুলো নিশ্চিত করে যে আপনার লেনদেনটি সফল হয়েছে এবং এটি আর কখনো পরিবর্তন করা হবে না। একবার একটি ব্লক "ফাইনাল" হয়ে গেলে, এটি শুধুমাত্র একটি নেটওয়ার্ক লেভেলের এ্যাটাক দ্বারাই পরিবর্তন করা সম্ভব, যার জন্য বিলিয়ন বিলিয়ন ডলার খরচ হবে।

একটি ভিজ্যুয়াল ডেমো

অস্টিনকে লেনদেন, গ্যাস এবং মাইনিং সম্পর্কে বিস্তারিত আলোচনা করতে দেখুন।

টাইপড ট্রানজেকশন এনভেলপ

ইথিরিয়ামে প্রাথমিকভাবে লেনদেনের জন্য একটি ফরম্যাট ছিল। প্রতিটি লেনদেনে একটি নন্স, গ্যাস প্রাইস, গ্যাস লিমিট, to এডড্রেস, ভ্যালু, ডাটা, v, r এবং s অন্তর্ভুক্ত ছিল। এই ফিল্ডগুলো RLP-এনকোড করা, যা দেখতে অনেকটা এরকম:

RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])

ইথিরিয়াম একাধিক ধরনের লেনদেন সাপোর্ট করার জন্য বিবর্তিত হয়েছে যাতে লিগ্যাসি লেনদেন ফরম্যাটগুলোকে প্রভাবিত না করেই এক্সেস লিস্ট এবং EIP-1559 (opens in a new tab)-এর মতো নতুন ফিচারগুলো ইমপ্লিমেন্ট করা যায়।

EIP-2718 (opens in a new tab) এই আচরণের অনুমতি দেয়। লেনদেনগুলোকে এভাবে ইন্টারপ্রেট করা হয়:

TransactionType || TransactionPayload

যেখানে ফিল্ডগুলো এভাবে সংজ্ঞায়িত করা হয়েছে:

  • TransactionType - 0 এবং 0x7f-এর মধ্যে একটি সংখ্যা, মোট 128টি সম্ভাব্য লেনদেনের ধরনের জন্য।
  • TransactionPayload - লেনদেনের ধরন দ্বারা সংজ্ঞায়িত একটি আরবিট্রারি বাইট অ্যারে।

TransactionType ভ্যালুর ওপর ভিত্তি করে, একটি লেনদেনকে এভাবে শ্রেণীবদ্ধ করা যেতে পারে:

  1. টাইপ 0 (লিগ্যাসি) লেনদেন: ইথিরিয়াম লঞ্চ হওয়ার পর থেকে ব্যবহৃত মূল লেনদেন ফরম্যাট। এগুলোতে EIP-1559 (opens in a new tab) থেকে আসা ফিচারগুলো অন্তর্ভুক্ত নেই, যেমন ডাইনামিক গ্যাস ফি ক্যালকুলেশন বা স্মার্ট কন্ট্রাক্ট-এর জন্য এক্সেস লিস্ট। লিগ্যাসি লেনদেনগুলোর সিরিয়ালাইজড ফর্মে তাদের ধরন নির্দেশ করার জন্য কোনো নির্দিষ্ট প্রিফিক্স থাকে না, Recursive Length Prefix (RLP) এনকোডিং ব্যবহার করার সময় এগুলো 0xf8 বাইট দিয়ে শুরু হয়। এই লেনদেনগুলোর জন্য TransactionType ভ্যালু হলো 0x0

  2. টাইপ 1 লেনদেন: ইথিরিয়ামের বার্লিন আপগ্রেড-এর অংশ হিসেবে EIP-2930 (opens in a new tab)-এ প্রবর্তিত, এই লেনদেনগুলোতে একটি accessList প্যারামিটার অন্তর্ভুক্ত থাকে। এই তালিকাটি সেই এডড্রেস এবং স্টোরেজ কি-গুলো নির্দিষ্ট করে যা লেনদেনটি এক্সেস করবে বলে আশা করা হয়, যা স্মার্ট কন্ট্রাক্ট জড়িত জটিল লেনদেনের জন্য সম্ভাব্যভাবে গ্যাস খরচ কমাতে সাহায্য করে। EIP-1559 ফি মার্কেট পরিবর্তনগুলো টাইপ 1 লেনদেনে অন্তর্ভুক্ত নয়। টাইপ 1 লেনদেনে একটি yParity প্যারামিটারও থাকে, যা 0x0 বা 0x1 হতে পারে, যা secp256k1 সিগনেচারের y-ভ্যালুর প্যারিটি নির্দেশ করে। এগুলো 0x01 বাইট দিয়ে শুরু হওয়ার মাধ্যমে শনাক্ত করা হয় এবং এদের TransactionType ভ্যালু হলো 0x1

  3. টাইপ 2 লেনদেন, যা সাধারণত EIP-1559 লেনদেন হিসেবে পরিচিত, এগুলো ইথিরিয়ামের লন্ডন আপগ্রেড-এ EIP-1559 (opens in a new tab)-এর মাধ্যমে প্রবর্তিত লেনদেন। এগুলো ইথিরিয়াম নেটওয়ার্ক-এ স্ট্যান্ডার্ড লেনদেনের ধরনে পরিণত হয়েছে। এই লেনদেনগুলো একটি নতুন ফি মার্কেট মেকানিজম প্রবর্তন করে যা ট্রানজেকশন ফি-কে একটি বেস ফি এবং একটি প্রায়োরিটি ফি-তে আলাদা করে প্রেডিক্টেবিলিটি উন্নত করে। এগুলো 0x02 বাইট দিয়ে শুরু হয় এবং এতে maxPriorityFeePerGas এবং maxFeePerGas-এর মতো ফিল্ড অন্তর্ভুক্ত থাকে। টাইপ 2 লেনদেনগুলো এখন তাদের ফ্লেক্সিবিলিটি এবং দক্ষতার কারণে ডিফল্ট, বিশেষ করে উচ্চ নেটওয়ার্ক কনজেশনের সময় ব্যবহারকারীদের ট্রানজেকশন ফি আরও প্রেডিক্টেবলভাবে পরিচালনা করতে সাহায্য করার ক্ষমতার জন্য এগুলো বেশি পছন্দ করা হয়। এই লেনদেনগুলোর জন্য TransactionType ভ্যালু হলো 0x2

  4. টাইপ 3 (ব্লব) লেনদেন ইথিরিয়ামের ডেনকুন আপগ্রেড-এর অংশ হিসেবে EIP-4844 (opens in a new tab)-এ প্রবর্তিত হয়েছিল। এই লেনদেনগুলো "ব্লব" ডাটা (বাইনারি লার্জ অবজেক্টস) আরও দক্ষতার সাথে পরিচালনা করার জন্য ডিজাইন করা হয়েছে, বিশেষ করে ইথিরিয়াম নেটওয়ার্ক-এ কম খরচে ডাটা পোস্ট করার একটি উপায় প্রদান করে লেয়ার ২ রোলআপস-কে উপকৃত করে। ব্লব লেনদেনে blobVersionedHashes, maxFeePerBlobGas এবং blobGasPrice-এর মতো অতিরিক্ত ফিল্ড অন্তর্ভুক্ত থাকে। এগুলো 0x03 বাইট দিয়ে শুরু হয় এবং এদের TransactionType ভ্যালু হলো 0x3। ব্লব লেনদেন ইথিরিয়ামের ডাটা এভেইলএবিলিটি এবং স্কেলিং ক্ষমতার একটি উল্লেখযোগ্য উন্নতির প্রতিনিধিত্ব করে।

  5. টাইপ 4 লেনদেন ইথিরিয়ামের পেক্ট্রা আপগ্রেড-এর অংশ হিসেবে EIP-7702 (opens in a new tab)-এ প্রবর্তিত হয়েছিল। এই লেনদেনগুলো একাউন্ট অ্যাবস্ট্রাকশনের সাথে ফরোয়ার্ড-কম্প্যাটিবল হওয়ার জন্য ডিজাইন করা হয়েছে। এগুলো EOA-গুলোকে তাদের মূল কার্যকারিতার সাথে আপস না করে সাময়িকভাবে স্মার্ট কন্ট্রাক্ট একাউন্ট-এর মতো আচরণ করার অনুমতি দেয়। এগুলোতে একটি authorization_list প্যারামিটার অন্তর্ভুক্ত থাকে, যা সেই স্মার্ট কন্ট্রাক্ট-কে নির্দিষ্ট করে যার কাছে EOA তার কর্তৃত্ব অর্পণ করে। লেনদেনের পর, EOA-এর কোড ফিল্ডে অর্পিত স্মার্ট কন্ট্রাক্ট-এর এডড্রেস থাকবে।

আরও পড়ুন

এমন কোনো কমিউনিটি রিসোর্স সম্পর্কে জানেন যা আপনাকে সাহায্য করেছে? এই পেজটি এডিট করুন এবং এটি যোগ করুন!

এই আর্টিকেলটি কি সহায়ক ছিল?