create-eth-app দিয়ে আপনার বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp) ফ্রন্টএন্ড ডেভেলপমেন্ট শুরু করুন
গতবার আমরা Solidity-এর সামগ্রিক চিত্র (নতুন ট্যাবে খোলে) দেখেছিলাম এবং ইতিমধ্যে create-eth-app (নতুন ট্যাবে খোলে)-এর কথা উল্লেখ করেছি। এখন আপনি জানতে পারবেন কীভাবে এটি ব্যবহার করতে হয়, এতে কী কী বৈশিষ্ট্য যুক্ত করা হয়েছে এবং কীভাবে এটিকে আরও সম্প্রসারিত করা যায় সে সম্পর্কে অতিরিক্ত ধারণা। Sablier (নতুন ট্যাবে খোলে)-এর প্রতিষ্ঠাতা পল রাজভান বার্গ দ্বারা শুরু করা এই অ্যাপটি আপনার ফ্রন্টএন্ড ডেভেলপমেন্ট শুরু করতে সাহায্য করবে এবং এতে বেছে নেওয়ার জন্য বেশ কয়েকটি ঐচ্ছিক ইন্টিগ্রেশন রয়েছে।
ইনস্টলেশন
ইনস্টলেশনের জন্য Yarn 0.25 বা তার ওপরের সংস্করণ প্রয়োজন (npm install yarn --global)। এটি রান করা খুবই সহজ:
yarn create eth-app my-eth-app
cd my-eth-app
yarn react-app:start
এটি অভ্যন্তরীণভাবে create-react-app (নতুন ট্যাবে খোলে) ব্যবহার করছে। আপনার অ্যাপটি দেখতে, http://localhost:3000/ খুলুন। যখন আপনি প্রোডাকশনে ডিপ্লয় করার জন্য প্রস্তুত হবেন, তখন yarn build দিয়ে একটি মিনিফাইড বান্ডেল তৈরি করুন। এটি হোস্ট করার একটি সহজ উপায় হতে পারে Netlify (নতুন ট্যাবে খোলে)। আপনি একটি GitHub রিপোজিটরি তৈরি করতে পারেন, এটি Netlify-তে যোগ করতে পারেন, বিল্ড কমান্ড সেটআপ করতে পারেন এবং আপনার কাজ শেষ! আপনার অ্যাপটি হোস্ট করা হবে এবং সবার ব্যবহারের জন্য উন্মুক্ত থাকবে। আর এর পুরোটাই সম্পূর্ণ বিনামূল্যে।
বৈশিষ্ট্যসমূহ
React এবং create-react-app
প্রথমত অ্যাপটির মূল অংশ: React এবং create-react-app-এর সাথে আসা সমস্ত অতিরিক্ত বৈশিষ্ট্য। আপনি যদি ইথেরিয়াম ইন্টিগ্রেট করতে না চান তবে শুধুমাত্র এটি ব্যবহার করা একটি দুর্দান্ত বিকল্প। React (নতুন ট্যাবে খোলে) নিজেই ইন্টারেক্টিভ UI তৈরি করাকে খুব সহজ করে তোলে। এটি হয়তো Vue (নতুন ট্যাবে খোলে)-এর মতো নতুনদের জন্য ততটা সহজ নয়, তবে এটি এখনও সবচেয়ে বেশি ব্যবহৃত হয়, এতে আরও বেশি বৈশিষ্ট্য রয়েছে এবং সবচেয়ে গুরুত্বপূর্ণ হলো বেছে নেওয়ার জন্য হাজার হাজার অতিরিক্ত লাইব্রেরি রয়েছে। create-react-app এটি দিয়ে শুরু করাকেও খুব সহজ করে তোলে এবং এর মধ্যে রয়েছে:
- React, JSX, ES6, TypeScript, Flow সিনট্যাক্স সাপোর্ট।
- অবজেক্ট স্প্রেড অপারেটরের মতো ES6-এর বাইরের অতিরিক্ত ল্যাঙ্গুয়েজ ফিচার।
- অটোপ্রিফিক্সড CSS, তাই আপনার -webkit- বা অন্যান্য প্রিফিক্সের প্রয়োজন নেই।
- কভারেজ রিপোর্টিংয়ের জন্য বিল্ট-ইন সাপোর্ট সহ একটি দ্রুত ইন্টারেক্টিভ ইউনিট টেস্ট রানার।
- একটি লাইভ ডেভেলপমেন্ট সার্ভার যা সাধারণ ভুলগুলো সম্পর্কে সতর্ক করে।
- প্রোডাকশনের জন্য JS, CSS এবং ছবিগুলোকে হ্যাশ এবং সোর্সম্যাপ সহ বান্ডেল করার জন্য একটি বিল্ড স্ক্রিপ্ট।
বিশেষ করে create-eth-app নতুন hooks effects (নতুন ট্যাবে খোলে) ব্যবহার করছে। এটি শক্তিশালী, অথচ খুব ছোট তথাকথিত ফাংশনাল কম্পোনেন্ট লেখার একটি পদ্ধতি। create-eth-app-এ এগুলো কীভাবে ব্যবহৃত হয় তা জানতে নিচে Apollo সম্পর্কিত সেকশনটি দেখুন।
Yarn Workspaces
Yarn Workspaces (নতুন ট্যাবে খোলে) আপনাকে একাধিক প্যাকেজ রাখার সুবিধা দেয়, তবে আপনি রুট ফোল্ডার থেকে সেগুলোর সবগুলো পরিচালনা করতে পারবেন এবং yarn install ব্যবহার করে একবারে সবগুলোর জন্য ডিপেন্ডেন্সি ইনস্টল করতে পারবেন। এটি বিশেষ করে ছোট অতিরিক্ত প্যাকেজগুলোর জন্য বেশ কার্যকর, যেমন স্মার্ট কন্ট্রাক্ট অ্যাড্রেস/ABI ম্যানেজমেন্ট (আপনি কোথায় কোন স্মার্ট কন্ট্রাক্ট ডিপ্লয় করেছেন এবং কীভাবে সেগুলোর সাথে যোগাযোগ করবেন তার তথ্য) বা গ্রাফ ইন্টিগ্রেশন, যার উভয়ই create-eth-app-এর অংশ।
ethers.js
যদিও Web3 (নতুন ট্যাবে খোলে) এখনও সবচেয়ে বেশি ব্যবহৃত হয়, তবে গত এক বছরে বিকল্প হিসেবে ethers.js (নতুন ট্যাবে খোলে) অনেক বেশি জনপ্রিয়তা পাচ্ছে এবং এটিই create-eth-app-এ ইন্টিগ্রেট করা হয়েছে। আপনি এটি নিয়ে কাজ করতে পারেন, এটিকে Web3-তে পরিবর্তন করতে পারেন অথবা ethers.js v5 (নতুন ট্যাবে খোলে)-এ আপগ্রেড করার কথা বিবেচনা করতে পারেন যা প্রায় বিটা পর্যায় পার করে ফেলেছে।
The Graph
Restful API (নতুন ট্যাবে খোলে)-এর তুলনায় ডেটা হ্যান্ডেল করার একটি বিকল্প উপায় হলো GraphQL (নতুন ট্যাবে খোলে)। Restful API-গুলোর তুলনায় এগুলোর বেশ কিছু সুবিধা রয়েছে, বিশেষ করে বিকেন্দ্রীকৃত ব্লকচেইন ডেটার ক্ষেত্রে। আপনি যদি এর পেছনের কারণ সম্পর্কে আগ্রহী হন, তবে GraphQL Will Power the Decentralized Web (নতুন ট্যাবে খোলে) দেখতে পারেন।
সাধারণত আপনি সরাসরি আপনার স্মার্ট কন্ট্রাক্ট থেকে ডেটা ফেচ করে থাকেন। সর্বশেষ ট্রেডের সময় জানতে চান? শুধু MyContract.methods.latestTradeTime().call() কল করুন যা একটি ইথেরিয়াম নোড থেকে আপনার বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp)-এ ডেটা ফেচ করে। কিন্তু আপনার যদি শত শত ভিন্ন ডেটা পয়েন্টের প্রয়োজন হয় তখন কী হবে? এর ফলে নোডে শত শত ডেটা ফেচ করতে হবে, প্রতিবার একটি RTT (নতুন ট্যাবে খোলে) প্রয়োজন হবে যা আপনার dapp-কে ধীর এবং অদক্ষ করে তুলবে। এর একটি সমাধান হতে পারে আপনার কন্ট্রাক্টের ভেতরে একটি ফেচার কল ফাংশন ব্যবহার করা যা একবারে একাধিক ডেটা রিটার্ন করে। তবে এটি সবসময় আদর্শ নয়।
তাছাড়া আপনি হয়তো ঐতিহাসিক ডেটার প্রতিও আগ্রহী হতে পারেন। আপনি শুধু শেষ ট্রেডের সময়ই নয়, বরং আপনার নিজের করা সমস্ত ট্রেডের সময়ও জানতে চান। create-eth-app সাবগ্রাফ প্যাকেজটি ব্যবহার করুন, ডকুমেন্টেশন (নতুন ট্যাবে খোলে) পড়ুন এবং এটিকে আপনার নিজের কন্ট্রাক্টগুলোর সাথে মানিয়ে নিন। আপনি যদি জনপ্রিয় স্মার্ট কন্ট্রাক্টগুলো খুঁজছেন, তবে সেগুলোর জন্য হয়তো আগে থেকেই একটি সাবগ্রাফ থাকতে পারে। সাবগ্রাফ এক্সপ্লোরার (নতুন ট্যাবে খোলে) চেক করে দেখুন।
একবার আপনার কাছে একটি সাবগ্রাফ থাকলে, এটি আপনাকে আপনার dapp-এ একটি সাধারণ কোয়েরি লেখার সুবিধা দেয় যা আপনার প্রয়োজনীয় ঐতিহাসিক ডেটা সহ সমস্ত গুরুত্বপূর্ণ ব্লকচেইন ডেটা নিয়ে আসে, যার জন্য শুধুমাত্র একটি ফেচ প্রয়োজন।
Apollo
Apollo Boost (নতুন ট্যাবে খোলে) ইন্টিগ্রেশনের কারণে আপনি সহজেই আপনার React dapp-এ গ্রাফ ইন্টিগ্রেট করতে পারবেন। বিশেষ করে যখন React hooks এবং Apollo (নতুন ট্যাবে খোলে) ব্যবহার করা হয়, তখন ডেটা ফেচ করা আপনার কম্পোনেন্টে একটি একক GraphQl কোয়েরি লেখার মতোই সহজ:
const { loading, error, data } = useQuery(myGraphQlQuery)
React.useEffect(() => {
if (!loading && !error && data) {
console.log({ data })
}
}, [loading, error, data])
টেমপ্লেটসমূহ
এর পাশাপাশি আপনি বেশ কয়েকটি ভিন্ন টেমপ্লেট থেকে বেছে নিতে পারেন। এখন পর্যন্ত আপনি একটি Aave, Compound, ইউনিসোয়াপ বা Sablier ইন্টিগ্রেশন ব্যবহার করতে পারেন। এগুলো সবই আগে থেকে তৈরি করা সাবগ্রাফ ইন্টিগ্রেশনের পাশাপাশি গুরুত্বপূর্ণ সার্ভিস স্মার্ট কন্ট্রাক্ট অ্যাড্রেস যোগ করে। শুধু yarn create eth-app my-eth-app --with-template aave-এর মতো ক্রিয়েশন কমান্ডে টেমপ্লেটটি যোগ করুন।
Aave
Aave (নতুন ট্যাবে খোলে) হলো একটি বিকেন্দ্রীকৃত অর্থ ঋণ প্রদান মার্কেট। আমানতকারীরা প্যাসিভ ইনকাম উপার্জনের জন্য মার্কেটে তারল্য প্রদান করে, অন্যদিকে ঋণগ্রহীতারা জামানত ব্যবহার করে ঋণ নিতে সক্ষম হয়। Aave-এর একটি অনন্য বৈশিষ্ট্য হলো এই ফ্ল্যাশ লোন (নতুন ট্যাবে খোলে) যা আপনাকে কোনো জামানত ছাড়াই অর্থ ধার করার সুবিধা দেয়, যতক্ষণ না আপনি একটি ট্রানজ্যাকশনের মধ্যে ঋণ ফেরত দেন। এটি উদাহরণস্বরূপ আরবিট্রেজ ট্রেডিংয়ে আপনাকে অতিরিক্ত নগদ অর্থ প্রদানের জন্য কার্যকর হতে পারে।
যেসব ট্রেড করা টোকেন আপনাকে সুদ উপার্জন করে দেয় সেগুলোকে aTokens বলা হয়।
যখন আপনি create-eth-app-এর সাথে Aave ইন্টিগ্রেট করা বেছে নেবেন, তখন আপনি একটি সাবগ্রাফ ইন্টিগ্রেশন (নতুন ট্যাবে খোলে) পাবেন। Aave The Graph ব্যবহার করে এবং ইতিমধ্যে আপনাকে Ropsten (নতুন ট্যাবে খোলে) এবং মেইননেট (নতুন ট্যাবে খোলে)-এ র (raw) (নতুন ট্যাবে খোলে) বা ফরম্যাটেড (নতুন ট্যাবে খোলে) আকারে বেশ কয়েকটি ব্যবহারের জন্য প্রস্তুত সাবগ্রাফ প্রদান করে।
Compound
Compound (নতুন ট্যাবে খোলে) অনেকটা Aave-এর মতোই। এই ইন্টিগ্রেশনে ইতিমধ্যে নতুন Compound v2 সাবগ্রাফ (নতুন ট্যাবে খোলে) অন্তর্ভুক্ত রয়েছে। এখানে সুদ উপার্জনকারী টোকেনগুলোকে আশ্চর্যজনকভাবে cTokens বলা হয়।
ইউনিসোয়াপ
ইউনিসোয়াপ (নতুন ট্যাবে খোলে) হলো একটি বিকেন্দ্রীকৃত এক্সচেঞ্জ (DEX)। তারল্য প্রদানকারীরা ট্রেডের উভয় পক্ষের জন্য প্রয়োজনীয় টোকেন বা ইথার প্রদান করে ফি উপার্জন করতে পারে। এটি ব্যাপকভাবে ব্যবহৃত হয় এবং তাই খুব বিস্তৃত পরিসরের টোকেনগুলোর জন্য এর তারল্য সবচেয়ে বেশি। আপনি সহজেই এটিকে আপনার dapp-এ ইন্টিগ্রেট করতে পারেন, উদাহরণস্বরূপ, ব্যবহারকারীদের তাদের ETH-কে DAI-এর সাথে সোয়াপ করার অনুমতি দিতে।
দুর্ভাগ্যবশত, এই লেখাটি তৈরি করার সময় ইন্টিগ্রেশনটি শুধুমাত্র ইউনিসোয়াপ v1-এর জন্য ছিল এবং সদ্য প্রকাশিত v2 (নতুন ট্যাবে খোলে)-এর জন্য নয়।
Sablier
Sablier (নতুন ট্যাবে খোলে) ব্যবহারকারীদের স্ট্রিমিং মানি পেমেন্টের সুবিধা দেয়। একটি নির্দিষ্ট বেতনের দিনের পরিবর্তে, প্রাথমিক সেটআপের পর কোনো অতিরিক্ত পরিচালনা ছাড়াই আপনি আসলে আপনার টাকা অনবরত পেতে থাকেন। এই ইন্টিগ্রেশনে এর নিজস্ব সাবগ্রাফ (নতুন ট্যাবে খোলে) অন্তর্ভুক্ত রয়েছে।
এরপর কী?
create-eth-app সম্পর্কে আপনার কোনো প্রশ্ন থাকলে, Sablier কমিউনিটি সার্ভারে (নতুন ট্যাবে খোলে) যান, যেখানে আপনি create-eth-app-এর লেখকদের সাথে যোগাযোগ করতে পারবেন। পরবর্তী কিছু প্রাথমিক পদক্ষেপ হিসেবে আপনি Material UI (নতুন ট্যাবে খোলে)-এর মতো একটি UI ফ্রেমওয়ার্ক ইন্টিগ্রেট করতে চাইতে পারেন, আপনার প্রকৃতপক্ষে প্রয়োজনীয় ডেটার জন্য GraphQL কোয়েরি লিখতে পারেন এবং ডিপ্লয়মেন্ট সেটআপ করতে পারেন।
