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

স্মার্ট কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করা

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

এই পৃষ্ঠায় একটি স্মার্ট কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করার দুটি মৌলিক উপায়—ডেটা পড়া (reading) এবং ডেটা লেখা (writing)—এবং এই দুটি কাজ করার জন্য আপনার প্রয়োজনীয় টুলগুলো নিয়ে আলোচনা করা হয়েছে।

পূর্বশর্ত

আপনার যা বোঝা উচিত:

স্মার্ট কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করার দুটি উপায়

স্মার্ট কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করা দুটি বিভাগে পড়ে:

কন্ট্রাক্ট থেকে পড়া

পড়া একটি বিনামূল্যের কাজ যা কোনো ট্রানজ্যাকশন তৈরি করে না এবং ব্লকচেইনের কোনো স্টেট পরিবর্তন করে না।

আপনি যখন কোনো কন্ট্রাক্ট থেকে পড়েন, তখন আপনি কেবল আগে থেকেই বিদ্যমান ডেটার খোঁজ করেন। উদাহরণস্বরূপ:

  • একটি ERC-20 টোকেন ব্যালেন্স চেক করা
  • একটি বিকেন্দ্রীকৃত এক্সচেঞ্জ থেকে বর্তমান মূল্য পড়া
  • একটি NFT-এর মালিককে খুঁজে বের করা

যেহেতু পড়া স্টেট পরিবর্তন করে না, তাই এগুলোতে কোনো গ্যাস খরচ হয় না এবং ETH-এর প্রয়োজন ছাড়াই যে কেউ এটি করতে পারে।

কন্ট্রাক্টে লেখা

লেখা একটি স্টেট-পরিবর্তনকারী কাজ যার জন্য একটি ট্রানজ্যাকশন প্রয়োজন এবং গ্যাস খরচ হয়।

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

  • টোকেন স্থানান্তর করা
  • বিকেন্দ্রীকৃত এক্সচেঞ্জে টোকেন অদলবদল (swap) করা
  • একটি NFT মিন্টিং করা

লেখার জন্য সর্বদা প্রয়োজন:

  1. গ্যাসের জন্য পর্যাপ্ত ETH সহ একটি এক্সটার্নালি ওনড অ্যাকাউন্ট (EOA)
  2. অ্যাকাউন্টের প্রাইভেট কী দ্বারা স্বাক্ষরিত একটি ট্রানজ্যাকশন
  3. ট্রানজ্যাকশনটি মাইন করা এবং একটি ব্লকে অন্তর্ভুক্ত করা

অ্যাকাউন্ট বিমূর্তকরণ-এর মাধ্যমে, একটি স্মার্ট কন্ট্রাক্ট অ্যাকাউন্টও লেখা শুরু করতে পারে এবং একজন পেমাস্টার ব্যবহারকারীর পক্ষে গ্যাস কভার করতে পারে—তাই ETH ধারণকারী একটি EOA কঠোরভাবে প্রয়োজনীয় নয়।

কন্ট্রাক্ট ABI বোঝা

একটি স্মার্ট কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করার জন্য, আপনার অ্যাপ্লিকেশনকে জানতে হবে কন্ট্রাক্টটি কী করতে পারে। এখানেই অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) কাজে আসে।

একটি ABI হলো একটি JSON ডকুমেন্ট যা বর্ণনা করে:

  • কন্ট্রাক্টটি যে সমস্ত ফাংশন প্রকাশ করে (নাম, ইনপুট, আউটপুট)
  • কন্ট্রাক্টটি যে সমস্ত ইভেন্ট নির্গত করতে পারে
  • কন্ট্রাক্টের সাথে কথা বলার সময় কীভাবে ডেটা এনকোড এবং ডিকোড করতে হয়

ABI-কে কন্ট্রাক্টের নির্দেশিকা ম্যানুয়াল হিসেবে ভাবুন—এটি ছাড়া, আপনার অ্যাপ্লিকেশন জানে না কোন ফাংশনগুলো বিদ্যমান বা তারা কী প্যারামিটার আশা করে।

একটি কন্ট্রাক্টের ABI কোথায় পাবেন

  • Etherscan-এ যাচাইকৃত কন্ট্রাক্ট - Etherscan (একটি নতুন ট্যাবে খোলে) স্বয়ংক্রিয়ভাবে যাচাইকৃত সোর্স কোডের জন্য ABI প্রকাশ করে
  • ডেভেলপারের কাছ থেকে - অনেক প্রজেক্ট তাদের ডকুমেন্টেশন বা npm প্যাকেজে তাদের ABI প্রকাশ করে
  • সোর্স থেকে তৈরি করুন - আপনার কাছে যদি Solidity সোর্স কোড থাকে, তবে আপনি ABI তৈরি করতে এটিকে কম্পাইল করতে পারেন

কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করার জন্য টুল এবং লাইব্রেরি

ডেভেলপাররা সাধারণত একটি ওয়েব অ্যাপ, ব্যাকএন্ড বা স্ক্রিপ্ট থেকে কন্ট্রাক্টের সাথে ইন্টারঅ্যাক্ট করতে একটি JavaScript/TypeScript লাইব্রেরি ব্যবহার করেন।

ক্লায়েন্ট লাইব্রেরি (JavaScript/TypeScript)

ব্যাকএন্ড লাইব্রেরি

উদাহরণ: Viem দিয়ে একটি টোকেন ব্যালেন্স পড়া

উদাহরণ: ethers.js দিয়ে একটি ট্রানজ্যাকশন পাঠানো

ইভেন্ট এবং লগ

স্মার্ট কন্ট্রাক্টগুলো কোনো কিছু ঘটার সংকেত দিতে ইভেন্ট নির্গত করতে পারে। আপনার অ্যাপ্লিকেশন রিয়েল টাইমে প্রতিক্রিয়া জানাতে এই ইভেন্টগুলোর জন্য অপেক্ষা করতে (listen) পারে।

ট্রানজ্যাকশন সিমুলেট করা

একটি ট্রানজ্যাকশন পাঠানোর আগে, আপনি গ্যাস খরচ না করেই এটি সফল হবে কিনা তা পরীক্ষা করতে—এবং এর রিটার্ন ভ্যালু দেখতে—এটিকে সিমুলেট করতে পারেন। এটি আগেভাগে ত্রুটি ধরতে এবং ফলাফলের পূর্বরূপ দেখার জন্য দরকারী।

বেশিরভাগ ক্লায়েন্ট লাইব্রেরি eth_call-এর মাধ্যমে এটি সমর্থন করে:

// Viem-এর সাথে
const result = await client.simulateContract({
  address: contractAddress,
  abi,
  functionName: 'swap',
  args: [amountIn],
  account: userAddress,
})

ওয়ালেট এবং স্বাক্ষরকরণ

একটি বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp)-এ, ব্যবহারকারীর ওয়ালেট (যেমন মেটামাস্ক, Rainbow, বা WalletConnect) স্বাক্ষরকরণ পরিচালনা করে। আপনি সরাসরি প্রাইভেট কী পরিচালনা করেন না।

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

আরও পড়ুন