এড়িয়ে গিয়ে মূল কন্টেন্টে যান
Change page

লেনদেনসমূহ

পৃষ্ঠাটি সর্বশেষ আপডেট করা হয়েছে: ২৩ ফেব্রুয়ারী, ২০২৬

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

পূর্বশর্ত

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

লেনদেন কী?

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

লেনদেনের কারণ স্টেট পরিবর্তনের চিত্র 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}
সবকটি দেখুন

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

ডেটা ফিল্ড

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

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

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

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

ফাংশন নির্বাচকটি হল 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 ইউনিট গ্যাস প্রয়োজন।

সুতরাং ববকে অ্যালিসকে 1 ETH পাঠাতে 190 gwei-এর একটি baseFeePerGas এবং 10 gwei-এর একটি maxPriorityFeePerGas-এ, ববকে নিম্নলিখিত ফি দিতে হবে:

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

ববের অ্যাকাউন্ট ডেবিট হবে -1.0042 ETH (অ্যালিসের জন্য 1 ETH + গ্যাস ফিতে 0.0042 ETH)

অ্যালিসের অ্যাকাউন্ট ক্রেডিট হবে +1.0 ETH

বেস ফি পুড়িয়ে ফেলা হবে -0.00399 ETH

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

অব্যবহৃত গ্যাস কীভাবে ফেরত দেওয়া হয় তা দেখানো ডায়াগ্রাম 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. সময়ের সাথে সাথে আপনার লেনদেন ধারণকারী ব্লকটি "যৌক্তিক" এবং তারপর "চূড়ান্ত" এ আপগ্রেড করা হবে। এই আপগ্রেডগুলি এটিকে আরও অনেক বেশি নিশ্চিত করে যে আপনার লেনদেন সফল হয়েছে এবং কখনও পরিবর্তন করা হবে না। একবার একটি ব্লক "চূড়ান্ত" হয়ে গেলে এটি শুধুমাত্র একটি নেটওয়ার্ক স্তরের আক্রমণের দ্বারা পরিবর্তন করা যেতে পারে যার জন্য বহু বিলিয়ন ডলার খরচ হবে।

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

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

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

ইথেরিয়ামের মূলত লেনদেনের জন্য একটি ফর্ম্যাট ছিল। প্রতিটি লেনদেনে একটি ননস, গ্যাস প্রাইস, গ্যাস লিমিট, টু এড্রেস, ভ্যালু, ডেটা, 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) থেকে ডাইনামিক গ্যাস ফি গণনা বা স্মার্ট কন্ট্র্যাক্টের জন্য অ্যাক্সেস তালিকার মতো বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে না। রিকার্সিভ লেংথ প্রিফিক্স (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) তে প্রবর্তিত হয়েছিল। এই লেনদেনগুলি "ব্লব" ডেটা (বাইনারি লার্জ অবজেক্ট) আরও দক্ষতার সাথে পরিচালনা করার জন্য ডিজাইন করা হয়েছে, বিশেষ করে লেয়ার 2 রোলআপগুলিকে কম খরচে ইথেরিয়াম নেটওয়ার্কে ডেটা পোস্ট করার একটি উপায় প্রদান করে উপকৃত করে। ব্লব লেনদেনগুলিতে blobVersionedHashes, maxFeePerBlobGas এবং blobGasPrice এর মতো অতিরিক্ত ক্ষেত্র অন্তর্ভুক্ত রয়েছে। তারা বাইট 0x03 দিয়ে শুরু করে, এবং তাদের TransactionType মান হল 0x3। ব্লব লেনদেন ইথেরিয়ামের ডেটা প্রাপ্যতা এবং স্কেলিং ক্ষমতার একটি উল্লেখযোগ্য উন্নতির প্রতিনিধিত্ব করে।

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

আরও পড়ুন

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

এই প্রবন্ধটা কি সহায়ক ছিল?