
আপনি যা শিখবেন
Arbitrage Contract Deployer হলো একটি Node.js কমান্ড-লাইন টুলকিট, যার মাধ্যমে টার্মিনাল থেকেই Solidity কনট্র্যাক্ট কম্পাইল, ডিপ্লয় এবং ব্যবহার করা যায়। এই টিউটোরিয়ালে এটি ইনস্টল করা, Ethereum Mainnet-এর সঙ্গে একটি ওয়ালেট সংযুক্ত করা, কনট্র্যাক্ট ডিপ্লয় করা, ইন্টার্যাক্টিভ মেনু ব্যবহার করা এবং সমর্থিত mempool কার্যকলাপ পর্যবেক্ষণ করার পদ্ধতি ব্যাখ্যা করা হয়েছে।
গুরুত্বপূর্ণ: এই প্রজেক্টটি শুধু Ethereum Mainnet-এ কাজ করে। লেনদেনে প্রকৃত ETH ব্যবহার হয় এবং এতে বাস্তব অর্থ খরচ হতে পারে। নিশ্চিত করার আগে প্রতিটি কনট্র্যাক্ট, ঠিকানা এবং লেনদেন যাচাই করুন।
প্রধান বৈশিষ্ট্য
- Remix বা Hardhat ছাড়াই প্রয়োজন অনুযায়ী
solcব্যবহার করে Solidity কনট্র্যাক্ট কম্পাইল করে। - স্থানীয় ফাইল,
node_modules, GitHub এবং npm-সামঞ্জস্যপূর্ণ CDN থেকে import সমাধান করে। - RPC সংযোগের মাধ্যমে Ethereum Mainnet-এ কনট্র্যাক্ট ডিপ্লয় করে।
- ডিপ্লয় করা ঠিকানা, ABI এবং তারিখ
deployments.json-এ সংরক্ষণ করে। - কনট্র্যাক্ট ডিপ্লয় এবং ফাংশন কল করার জন্য অ্যারো-কী ইন্টারফেস দেয়।
- কনট্র্যাক্টের ফাংশনগুলোকে শুধু-পঠন, write বা payable অপারেশন হিসেবে শ্রেণিবদ্ধ করে।
- গ্যাসের আনুমানিক পরিমাণ, ফি এবং ETH ও USD-তে আনুমানিক খরচ দেখায়।
- ফি অনুমানের জন্য ETH/USD হার পেতে Chainlink oracle ব্যবহার করে।
- ফরম্যাট করা লেনদেন আউটপুটসহ আলাদা mempool stream প্রক্রিয়া চালাতে পারে।
পূর্বশর্ত
আপনার Node.js 18 বা তার পরের সংস্করণ প্রয়োজন, কারণ প্রজেক্টটির বিল্ট-ইন fetch কার্যকারিতা দরকার। README-তে npm 9 বা তার পরের সংস্করণও উল্লেখ করা হয়েছে। আপনার একটি Ethereum Mainnet RPC endpoint, একটি ওয়ালেটের private key এবং নিশ্চিত করা যেকোনো ডিপ্লয়মেন্ট বা write লেনদেনের ফি পরিশোধের জন্য পর্যাপ্ত ETH থাকতে হবে।
প্রজেক্ট ইনস্টল করুন
১. রিপোজিটরি ক্লোন করুন
প্রজেক্টটি ক্লোন করে তার ডিরেক্টরিতে প্রবেশ করুন। আপনি যে রিপোজিটরি ব্যবহার করছেন, তার অবস্থান অনুযায়ী রিপোজিটরি পাথটি প্রতিস্থাপন করুন।
git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>আপনি রিপোজিটরিটি ZIP আর্কাইভ হিসেবেও ডাউনলোড করে স্থানীয় কোনো ফোল্ডারে extract করতে পারেন।
২. নির্ভরতা ইনস্টল করুন
package.json-এ ঘোষিত প্যাকেজগুলো ইনস্টল করুন:
npm installএতে প্রধান দুটি নির্ভরতা ইনস্টল হবে:
- Provider, wallet, ABI পরিচালনা এবং লেনদেনের জন্য
ethers। - Node.js থেকে Solidity কম্পাইল করার জন্য
solc।
ইনস্টলেশনের পর প্রজেক্টে একটি node_modules ডিরেক্টরি থাকা উচিত। এটি না থাকলে npm install-এর আউটপুট পরীক্ষা করুন এবং এগিয়ে যাওয়ার আগে ইনস্টলেশন ত্রুটি সমাধান করুন।
ওয়ালেট ও RPC সংযোগ কনফিগার করুন
প্রজেক্টের root-এ .env নামে একটি ফাইল তৈরি করুন। এতে আপনার private key এবং একটি Ethereum Mainnet RPC URL যোগ করুন:
PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.comREADME-তে এই উদাহরণ RPC endpoint-গুলো দেওয়া আছে:
https://ethereum-rpc.publicnode.comhttps://eth.llamarpc.comhttps://cloudflare-eth.comhttps://mainnet.infura.io/v3/<KEY>https://eth-mainnet.g.alchemy.com/v2/<KEY>
.env ব্যক্তিগত রাখুন এবং নিশ্চিত করুন যে এটি .gitignore-এ অন্তর্ভুক্ত আছে। এই ফাইলে এমন শংসাপত্র থাকে, যা কখনোই কোনো public repository-তে commit করা উচিত নয়।
ইন্টার্যাক্টিভ ডিপ্লয়য়ার চালু করুন
এই কমান্ড দিয়ে প্রধান ইন্টারফেস চালু করুন:
node startপ্রজেক্টে npm start script সংজ্ঞায়িত থাকলে বিকল্পভাবে চালাতে পারেন:
npm startঅ্যাপ্লিকেশনটি network, wallet এবং balance পরীক্ষা করে, তারপর ইন্টার্যাক্টিভ মেনু খুলবে। সাধারণত মেনুতে এ ধরনের অপশন থাকতে পারে:
=== Ethereum Contract Deployer ===
i Network: mainnet (chainId 1)
i Wallet: 0x8c27...66CdC
i Balance: 0.5 ETH
! THIS IS MAINNET - transactions cost real money!
Main menu
> Deploy Arbitrage.sol
Open deployed Arbitrage (0x2d7A..., 2025-01-15)
Exitকোনো আইটেম নির্বাচন করতে অ্যারো কী ব্যবহার করুন, নির্বাচন নিশ্চিত করতে Enter চাপুন এবং লেনদেন অনুমোদনের অনুরোধ এলে প্রদর্শিত OK বা Cancel নিয়ন্ত্রণ ব্যবহার করুন। বের হতে Ctrl+C চাপুন।
একটি Solidity কনট্র্যাক্ট কম্পাইল ও ডিপ্লয় করুন
১. একটি Solidity ফাইল যোগ বা নির্বাচন করুন
প্রজেক্ট ডিরেক্টরিতে একটি Solidity ফাইল রাখুন, অথবা deployment menu-এর মাধ্যমে বিদ্যমান .sol ফাইল নির্বাচন করুন। কম্পাইলারটি ফাইলের নামের ভিত্তিতে কনট্র্যাক্ট তৈরি করে এবং সমর্থিত import স্বয়ংক্রিয়ভাবে সমাধান করে।
২. কম্পাইলেশন ও ডিপ্লয়মেন্টের বিবরণ পর্যালোচনা করুন
প্রধান মেনু থেকে Deploy <file>.sol নির্বাচন করুন। অ্যাপ্লিকেশনটি কনট্র্যাক্ট কম্পাইল করে, deployment transaction প্রস্তুত করে এবং নিশ্চিতকরণের অনুরোধের আগে গ্যাসের প্রয়োজনীয়তা দেখায়।
৩. লেনদেন নিশ্চিত করুন
গ্যাসের আনুমানিক পরিমাণ, বর্তমান ফি, সর্বোচ্চ ফি, wallet balance এবং কনট্র্যাক্টের বিবরণ পর্যালোচনা করুন। মানগুলো এবং target network সঠিক হলেই কেবল নিশ্চিত করুন। লেনদেনটি mined হওয়ার পর টুলটি ডিপ্লয় করা ঠিকানা এবং একটি Etherscan লিংক দেখায়।
ডিপ্লয়মেন্টের তথ্য স্থানীয়ভাবে deployments.json-এ সংরক্ষিত হয়। এর ফলে পরে ঠিকানা ও ABI আবার না লিখেই ডিপ্লয় করা কনট্র্যাক্ট খুলতে পারবেন।
গ্যাসের প্রিভিউ বুঝুন
ডিপ্লয়মেন্ট এবং সমর্থিত write অপারেশনের আগে টুলটি গ্যাসের একটি প্রিভিউ দেখায়। README-তে নথিভুক্ত প্রক্রিয়া অনুযায়ী এর হিসাব করা হয়:
estimateGasআনুমানিক গ্যাসের প্রয়োজনীয়তা প্রদান করে।- গ্যাসের limit নির্ধারণ করা হয় আনুমানিক পরিমাণের সঙ্গে ১০ শতাংশ buffer যোগ করে।
- প্রতি গ্যাসে সর্বোচ্চ ফি নির্ধারণ করা হয় base fee-এর দুই গুণের সঙ্গে priority fee যোগ করে।
- ইন্টারফেসে বর্তমান block-এর প্রত্যাশিত ফি এবং সম্ভাব্য সর্বোচ্চ ফি দুটিই দেখানো হয়।
- ফি ডলারে অনুমান করতে Chainlink ETH/USD rate ব্যবহার করা হয়।
একটি প্রিভিউতে আনুমানিক গ্যাস ইউনিট, গ্যাস লিমিট, বেস ফি, প্রায়োরিটি ফি, প্রতি গ্যাসে সর্বোচ্চ ফি, প্রত্যাশিত ETH খরচ, সর্বোচ্চ ETH খরচ এবং ওয়ালেট ব্যালেন্সের মতো মান থাকতে পারে। সর্বোচ্চ ফিকে একটি ঊর্ধ্বসীমার আনুমানিক হিসাব হিসেবে বিবেচনা করুন এবং নিশ্চিত করুন যে আপনার ব্যালেন্স লেনদেনটি সম্পন্ন করার জন্য যথেষ্ট।
সংরক্ষিত ডিপ্লয়মেন্ট খুলুন এবং ফাংশন কল করুন
Open deployed <name> নির্বাচন করে আগে deployments.json-এ সংরক্ষিত কোনো কনট্র্যাক্টের সঙ্গে কাজ করুন। ইন্টারফেসটি ফাংশনের আচরণ অনুযায়ী উপলভ্য ফাংশনগুলোর লেবেল দেখায়:
[read]এমনviewএবংpureফাংশন শনাক্ত করে, যেগুলো লেনদেন পাঠায় না।[write]এমন স্টেট পরিবর্তনকারী ফাংশন শনাক্ত করে, যেগুলোর জন্য লেনদেন প্রয়োজন।[payable]এমন ফাংশন শনাক্ত করে, যেগুলো ETH গ্রহণ করতে পারে।[info] Contract balanceকনট্র্যাক্টের ব্যালেন্স দেখায়।<- Back to main menuপ্রধান মেনুতে ফিরে যায়।
শুধু-পাঠযোগ্য কল ব্যবহার করে কনট্র্যাক্টের স্টেট পরিদর্শন করা যায়। Write এবং payable কল গ্যাস প্রিভিউয়ের মধ্য দিয়ে যায় এবং লেনদেন পাঠানোর আগে নিশ্চিতকরণ প্রয়োজন। ইন্টারফেসে একটি OK অ্যাকশনও রয়েছে, যাতে কোনো অপারেশন জমা না দিয়ে বাতিল করতে পারেন।
মেমপুল স্ট্রিম চালান
মেমপুল স্ট্রিম একটি পৃথক প্রক্রিয়া হিসেবে চলে। এটি ম্যানুয়ালি চালু করুন:
node mempool.jsস্ট্রিমটি শনাক্ত কার্যকলাপকে ক্রেতা, রাউটার, ETH-এর পরিমাণ, টোকেন, মেথড, লেনদেনের ID এবং ফলাফলের স্ট্যাটাস আউটপুটের মতো বিস্তারিত তথ্যসহ ফরম্যাট করে। README-তে স্ট্রিমের সমর্থিত ওয়ার্কফ্লোর জন্য ডিল ও মুনাফা প্রদর্শনের উদাহরণও রয়েছে।
টোকেনের উৎস হলো erc20.json, যা Sequence Token Directory-এর Uniswap Token List Schema ফরম্যাট অনুসরণ করে। লোডারটি সরাসরি একটি টোকেন অ্যারে অথবা tokens অ্যারে-সম্বলিত একটি অবজেক্ট গ্রহণ করে। এটি অবৈধ ঠিকানা ও শূন্য ঠিকানা বাদ দেয়, chainId 1 সমান এমন টোকেন রাখে এবং প্রতিটি টোকেনের ঠিকানা, প্রতীক ও নাম বের করে।
erc20.json অনুপস্থিত থাকলে স্ট্রিমটি র্যান্ডম ঠিকানায় ফিরে যায় এবং একটি সতর্কবার্তা দেখায়। Ctrl+C দিয়ে স্ট্রিম বন্ধ করুন, অথবা ইন্টার্যাক্টিভ ইন্টারফেসে স্টপ অপশন দেখা গেলে সেটি ব্যবহার করুন।
Solidity ইমপোর্ট ব্যবহার করুন
বিল্ট-ইন কম্পাইলার বিভিন্ন ধরনের ইমপোর্ট সমর্থন করে:
- GitHub URL, যেমন
import "https://github.com/Uniswap/v3-core/..."; - npm-ধাঁচের CDN ইমপোর্ট, যেমন
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - স্থানীয়
node_modules-এ থাকা প্যাকেজ। - আপেক্ষিক স্থানীয় ইমপোর্ট, যেমন
import "./MyLib.sol";
github.com/owner/repo/blob/branch/path ফর্মের GitHub লিংকগুলো স্বয়ংক্রিয়ভাবে সমতুল্য raw.githubusercontent.com লিংকে রূপান্তরিত হয়।
প্রজেক্টের কাঠামো
প্রধান ফাইল ও ডিরেক্টরিগুলোর ভূমিকা:
start.jsহলোnode start-এর এন্ট্রি পয়েন্ট।deploy.js-এ ডিপ্লয়মেন্ট লজিক ও ইন্টার্যাক্টিভ মেনু রয়েছে।mempool.jsপৃথক মেমপুল স্ট্রিম চালায়।erc20.json-এ স্ট্রিমে ব্যবহৃত টোকেন তালিকা রয়েছে।deployments.jsonসংরক্ষিত ডিপ্লয়মেন্ট ডেটা রাখে এবং স্বয়ংক্রিয়ভাবে তৈরি হয়।lib/ui.jsরং, মেনু, বক্স ও লগিং পরিচালনা করে।lib/env.jsএনভায়রনমেন্ট ভেরিয়েবল, ডিপ্লয়মেন্ট ডেটা ও এক্সপ্লোরার লিংক পরিচালনা করে।lib/compile.jsকম্পাইলেশন ও ইমপোর্ট রেজোলিউশন পরিচালনা করে।lib/chain.jsগ্যাস, রসিদ ও ETH-এর মূল্য পরিচালনা করে।lib/contract.jsডিপ্লয়মেন্ট, ফাংশন কল ও স্ট্রিম চালু করা পরিচালনা করে।
উন্নত টিপস ও অপারেশনাল যাচাই
- নিশ্চিত করুন যে আপনার RPC এন্ডপয়েন্ট Ethereum Mainnet-এর জন্য। অ্যাপ্লিকেশনটি চেইন ID
1প্রত্যাশা করে এবং অন্য নেটওয়ার্ক প্রত্যাখ্যান করে। - ডিপ্লয়মেন্ট বা write অপারেশন নিশ্চিত করার আগে ওয়ালেট ব্যালেন্স পরীক্ষা করুন।
- স্থানীয় ডিপ্লয়মেন্ট ডেটা হিসেবে
deployments.jsonব্যবহার করুন এবং সংবেদনশীল বা অনিচ্ছাকৃত পরীক্ষার তথ্য কমিট করা এড়িয়ে চলুন। - লেনদেন জমা দেওয়ার আগে কনট্র্যাক্টের সোর্স কোড, ইমপোর্ট করা নির্ভরতা, গন্তব্য ঠিকানা ও payable মান পর্যালোচনা করুন।
node -e "console.log(require('solc').version())"দিয়ে ইনস্টল করা Solidity কম্পাইলারের সংস্করণ পরীক্ষা করুন।ls node_modules | headদিয়ে নির্ভরতাগুলো উপস্থিত আছে কি না যাচাই করুন।- মনে রাখবেন, বর্তমান রোডম্যাপ অনুযায়ী প্রজেক্টটি multisig সাপোর্ট, TypeScript টাইপে ABI এক্সপোর্ট বা Tenderly লেনদেন সিমুলেশন প্রদান করে না।
নিরাপত্তা চেকলিস্ট
- কখনো
PRIVATE_KEYপ্রকাশ বা কমিট করবেন না। .env-কে.gitignore-এ রাখুন।- অপারেশনের জন্য প্রয়োজনীয় অর্থের বেশি নেই এমন একটি ওয়ালেট ব্যবহার করুন।
- OK নির্বাচন করার আগে প্রতিটি গ্যাস প্রিভিউ পড়ুন।
- ইন্টারফেসে Ethereum Mainnet এবং চেইন ID
1দেখানো হচ্ছে কি না যাচাই করুন। - write বা payable ফাংশন ব্যবহারের আগে কনট্র্যাক্ট ও ঠিকানাগুলো সতর্কতার সঙ্গে পরীক্ষা করুন।
দরকারি কমান্ড
npm install
node start
npm start
node mempool.js
node -e "console.log(require('solc').version())"
ls node_modules | headউপসংহার
Arbitrage Contract Deployer Solidity কম্পাইল করা, Ethereum Mainnet-এ কনট্র্যাক্ট ডিপ্লয় করা, সংরক্ষিত ডিপ্লয়মেন্ট পুনরায় খোলা, কনট্র্যাক্ট ফাংশন কল করা এবং লেনদেনের খরচ পর্যালোচনার জন্য টার্মিনাল-ভিত্তিক ওয়ার্কফ্লো প্রদান করে। Node.js, নির্ভরতাগুলো এবং একটি নিরাপদ .env ফাইল কনফিগার করা হলে, ইন্টার্যাক্টিভ মেনু গ্যাস ও ETH/USD-এর আনুমানিক হিসাব দেখিয়ে ডিপ্লয়মেন্ট ও কনট্র্যাক্ট অপারেশনের নির্দেশনা দেয়। সব Mainnet লেনদেনে প্রকৃত অর্থ ব্যবহৃত হয়, তাই সতর্কতার সঙ্গে কাজ করুন এবং বিস্তারিত পর্যালোচনা করার পরই প্রতিটি লেনদেন নিশ্চিত করুন।
প্রকল্পটি MIT লাইসেন্সের অধীনে প্রকাশিত। অবদান রাখার সময় কমিটে শংসাপত্র অন্তর্ভুক্ত করা যাবে না এবং নিশ্চিত করতে হবে যে deployments.json-এ কেবল উপযুক্ত স্থানীয় ডেটা রয়েছে।
