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

জাভাস্ক্রিপ্ট এপিআই লাইব্রেরি

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

একটি ওয়েব অ্যাপকে ইথিরিয়াম ব্লকচেইনের সাথে ইন্টারঅ্যাক্ট করতে (অর্থাৎ, ব্লকচেইন ডেটা পড়তে এবং/অথবা নেটওয়ার্ক-এ লেনদেন পাঠাতে), এটিকে অবশ্যই একটি ইথিরিয়াম নোড-এর সাথে সংযুক্ত হতে হবে।

এই উদ্দেশ্যে, প্রতিটি ইথিরিয়াম ক্লায়েন্ট JSON-RPC স্পেসিফিকেশন প্রয়োগ করে, তাই অ্যাপ্লিকেশনগুলি নির্ভর করতে পারে এমন একটি অভিন্ন পদ্ধতির সেট রয়েছে।

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

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

পূর্বশর্ত

জাভাস্ক্রিপ্ট বোঝার পাশাপাশি, ইথিরিয়াম স্ট্যাক এবং ইথিরিয়াম ক্লায়েন্ট বোঝা সহায়ক হতে পারে।

কেন একটি লাইব্রেরি ব্যবহার করবেন?

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

লাইব্রেরির বৈশিষ্ট্য

ইথিরিয়াম নোড-এর সাথে সংযোগ করুন

প্রোভাইডার ব্যবহার করে, এই লাইব্রেরিগুলি আপনাকে ইথিরিয়ামের সাথে সংযোগ করতে এবং এর ডেটা পড়তে দেয়, তা JSON-RPC, INFURA, Etherscan, Alchemy বা MetaMask-এর মাধ্যমেই হোক না কেন।

সতর্কতা: Web3.js 4 মার্চ, 2025-এ আর্কাইভ করা হয়েছিল। ঘোষণাটি পড়ুন (opens in a new tab)। নতুন প্রজেক্টের জন্য ethers.js (opens in a new tab) বা viem (opens in a new tab)-এর মতো বিকল্প লাইব্রেরি ব্যবহার করার কথা বিবেচনা করুন।

Ethers উদাহরণ

1// একটি BrowserProvider একটি স্ট্যান্ডার্ড Web3 প্রোভাইডারকে র‍্যাপ করে, যা
2// মেটামাস্ক প্রতিটি পেজে window.ethereum হিসেবে ইনজেক্ট করে
3const provider = new ethers.BrowserProvider(window.ethereum)
4
5// মেটামাস্ক প্লাগইন ট্রানজ্যাকশন সাইন করারও অনুমতি দেয় যাতে
6// ইথার পাঠানো যায় এবং ব্লকচেইনের মধ্যে স্টেট পরিবর্তন করার জন্য পে করা যায়।
7// এর জন্য, আমাদের অ্যাকাউন্ট সাইনার প্রয়োজন...
8const signer = provider.getSigner()

Web3js উদাহরণ

1var web3 = new Web3("http://localhost:8545")
2// অথবা
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// প্রোভাইডার পরিবর্তন করুন
6web3.setProvider("ws://localhost:8546")
7// অথবা
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// node.js-এ IPC প্রোভাইডার ব্যবহার করা হচ্ছে
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os পাথ
13// অথবা
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // mac os পাথ
17// উইন্ডোজে পাথটি হলো: "\\\\.\\pipe\\geth.ipc"
18// লিনাক্সে পাথটি হলো: "/users/myuser/.ethereum/geth.ipc"

একবার সেট আপ হয়ে গেলে আপনি ব্লকচেইন-এ নিম্নলিখিত বিষয়গুলির জন্য কোয়েরি করতে পারবেন:

  • ব্লক নম্বর
  • গ্যাস অনুমান
  • স্মার্ট কন্ট্রাক্ট ইভেন্ট
  • নেটওয়ার্ক আইডি
  • এবং আরও অনেক কিছু...

ওয়ালেট কার্যকারিতা

এই লাইব্রেরিগুলি আপনাকে ওয়ালেট তৈরি করতে, কী (keys) পরিচালনা করতে এবং লেনদেন সাইন করতে কার্যকারিতা দেয়।

এখানে Ethers থেকে একটি উদাহরণ দেওয়া হলো

1// একটি নেমোনিক থেকে একটি ওয়ালেট ইনস্ট্যান্স তৈরি করুন...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromPhrase(mnemonic)
5
6// ...অথবা একটি প্রাইভেট কি থেকে
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// Signer API অনুযায়ী Promise হিসেবে অ্যাড্রেস
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// একটি ওয়ালেট অ্যাড্রেস সিঙ্ক্রোনাসভাবেও পাওয়া যায়
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// অভ্যন্তরীণ ক্রিপ্টোগ্রাফিক উপাদানসমূহ
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// ওয়ালেট নেমোনিক
27walletMnemonic.mnemonic
28// {
29// locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// }
33
34// দ্রষ্টব্য: প্রাইভেট কি দিয়ে তৈরি করা একটি ওয়ালেট-এ
35// কোনো নেমোনিক থাকে না (ডেরিভেশন এটি প্রতিরোধ করে)
36walletPrivateKey.mnemonic
37// null
38
39// একটি মেসেজ সাইন করা হচ্ছে
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// একটি ট্রানজ্যাকশন সাইন করা হচ্ছে
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// connect মেথডটি একটি নতুন ইনস্ট্যান্স রিটার্ন করে যা
53// একটি প্রোভাইডারের সাথে সংযুক্ত ওয়ালেট
54wallet = walletMnemonic.connect(provider)
55
56// নেটওয়ার্কে কোয়েরি করা হচ্ছে
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// ইথার পাঠানো হচ্ছে
63wallet.sendTransaction(tx)

সম্পূর্ণ ডক্স পড়ুন (opens in a new tab)

একবার সেট আপ হয়ে গেলে আপনি সক্ষম হবেন:

  • একাউন্ট তৈরি করতে
  • লেনদেন পাঠাতে
  • লেনদেন সাইন করতে
  • এবং আরও অনেক কিছু...

স্মার্ট কন্ট্রাক্ট ফাংশনগুলির সাথে ইন্টারঅ্যাক্ট করুন

জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরিগুলি আপনার অ্যাপ্লিকেশনকে একটি সংকলিত চুক্তির অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) পড়ে স্মার্ট কন্ট্রাক্ট ফাংশন কল করার অনুমতি দেয়।

ABI মূলত JSON ফর্ম্যাটে চুক্তির ফাংশনগুলি ব্যাখ্যা করে এবং আপনাকে এটিকে একটি সাধারণ জাভাস্ক্রিপ্ট অবজেক্টের মতো ব্যবহার করতে দেয়।

সুতরাং নিম্নলিখিত Solidity চুক্তিটি:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 constructor(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 function foo(uint b, bytes32 c) returns(address) {
12 Event(b, c);
13 return d;
14 }
15}

নিম্নলিখিত JSON-এর ফলাফল হবে:

1[{
2 "type":"constructor",
3 "payable":false,
4 "stateMutability":"nonpayable"
5 "inputs":[{"name":"testInt","type":"uint256"}],
6 },{
7 "type":"function",
8 "name":"foo",
9 "constant":false,
10 "payable":false,
11 "stateMutability":"nonpayable",
12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
13 "outputs":[{"name":"","type":"address"}]
14 },{
15 "type":"event",
16 "name":"Event",
17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
18 "anonymous":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]

এর মানে আপনি পারেন:

  • স্মার্ট কন্ট্রাক্ট-এ একটি লেনদেন পাঠাতে এবং এর পদ্ধতি কার্যকর করতে
  • ইথিরিয়াম ভার্চুয়াল মেশিন-এ কার্যকর করার সময় একটি পদ্ধতি কার্যকর করতে কত গ্যাস লাগবে তা অনুমান করতে কল করতে
  • একটি চুক্তি স্থাপন (Deploy) করতে
  • এবং আরও অনেক কিছু...

ইউটিলিটি ফাংশন

ইউটিলিটি ফাংশনগুলি আপনাকে সুবিধাজনক শর্টকাট দেয় যা ইথিরিয়ামের সাথে তৈরি করাকে কিছুটা সহজ করে তোলে।

ডিফল্টরূপে ETH মানগুলি Wei-তে থাকে। 1 ETH = 1,000,000,000,000,000,000 WEI – এর মানে আপনি অনেক সংখ্যার সাথে কাজ করছেন! web3.utils.toWei আপনার জন্য ইথারকে Wei-তে রূপান্তর করে।

এবং ethers-এ এটি দেখতে এইরকম:

1// একটি অ্যাকাউন্টের ব্যালেন্স পান (অ্যাড্রেস বা ENS নাম দ্বারা)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" }
4
5// প্রায়শই আপনাকে ব্যবহারকারীর জন্য আউটপুট ফরম্যাট করতে হবে
6// যারা (wei-এর পরিবর্তে) ইথারে ভ্যালু দেখতে পছন্দ করে
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'

উপলব্ধ লাইব্রেরি

Web3.js - ইথিরিয়াম জাভাস্ক্রিপ্ট এপিআই (API)।

Ethers.js - জাভাস্ক্রিপ্ট এবং টাইপস্ক্রিপ্টে সম্পূর্ণ ইথিরিয়াম ওয়ালেট বাস্তবায়ন এবং ইউটিলিটি।

The Graph - ইথিরিয়াম এবং IPFS ডেটা ইনডেক্স করার এবং GraphQL ব্যবহার করে এটি কোয়েরি করার জন্য একটি প্রটোকল।

Alchemy SDK - উন্নত এপিআই (API) সহ Ethers.js-এর চারপাশে র‍্যাপার।

viem - ইথিরিয়ামের জন্য টাইপস্ক্রিপ্ট ইন্টারফেস।

Codex - কয়েক ডজন চেইন জুড়ে রিয়েল-টাইম, সমৃদ্ধ ব্লকচেইন ডেটা এপিআই (API)।

Drift - বিল্ট-ইন ক্যাশিং, হুক এবং টেস্ট মক সহ টাইপস্ক্রিপ্ট মেটা-লাইব্রেরি।

আরও পড়ুন

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

টিউটোরিয়াল: ইথিরিয়ামে জাভাস্ক্রিপ্ট এপিআই (API) এবং ওয়েবসকেট (WebSockets)

  • ওয়েবসকেট (WebSockets) ব্যবহার করা – ইথিরিয়াম ইভেন্টগুলিতে সাবস্ক্রাইব করতে এবং রিয়েল-টাইম JSON-RPC রিকোয়েস্ট করতে Alchemy-এর সাথে ওয়েবসকেট কীভাবে ব্যবহার করবেন।

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