কীভাবে একটি ERC-721 মার্কেট তৈরি করবেন
এই আর্টিকেলে, আমি আপনাদের দেখাবো কীভাবে ইথিরিয়াম ব্লকচেইন এর জন্য Craigslist কোড করতে হয়।
Gumtree, Ebay এবং Craigslist-এর আগে, ক্লাসিফাইড বোর্ডগুলো বেশিরভাগই কর্ক বা কাগজ দিয়ে তৈরি হতো। স্কুলের করিডোর, সংবাদপত্র, রাস্তার আলো, এবং দোকানের সামনে ক্লাসিফাইডস বোর্ড থাকত।
ইন্টারনেটের সাথে সাথে এই সবকিছু বদলে গেছে। একটি নির্দিষ্ট ক্লাসিফাইড বোর্ড দেখতে পাওয়া মানুষের সংখ্যা বহুগুণে বৃদ্ধি পেয়েছে। এর ফলে, তারা যে মার্কেটগুলোর প্রতিনিধিত্ব করে সেগুলো অনেক বেশি কার্যকর হয়ে উঠেছে এবং বিশ্বব্যাপী প্রসারিত হয়েছে। Ebay হলো একটি বিশাল ব্যবসা যার উৎপত্তি এই ফিজিক্যাল ক্লাসিফাইডস বোর্ডগুলো থেকে।
ব্লকচেইন এর মাধ্যমে এই মার্কেটগুলো আবারও পরিবর্তিত হতে চলেছে, চলুন আমি আপনাদের দেখাই কীভাবে।
মনিটাইজেশন
একটি পাবলিক ব্লকচেইন ক্লাসিফাইডস বোর্ডের বিজনেস মডেল Ebay এবং অন্যান্য কোম্পানির থেকে আলাদা হতে হবে।
প্রথমত, এখানে ডিসেন্ট্রালাইজেশন এর বিষয়টি রয়েছে। বিদ্যমান প্ল্যাটফর্মগুলোকে তাদের নিজস্ব সার্ভার রক্ষণাবেক্ষণ করতে হয়। একটি ডিসেন্ট্রালাইজড প্ল্যাটফর্ম এর ব্যবহারকারীদের দ্বারা পরিচালিত হয়, তাই প্ল্যাটফর্মের মালিকের জন্য মূল প্ল্যাটফর্মটি চালানোর খরচ শূন্যে নেমে আসে।
এরপর রয়েছে ফ্রন্ট এন্ড, ওয়েবসাইট বা ইন্টারফেস যা প্ল্যাটফর্মে অ্যাক্সেস দেয়। এখানে অনেকগুলো বিকল্প রয়েছে। প্ল্যাটফর্মের মালিকরা অ্যাক্সেস সীমিত করতে পারেন এবং সবাইকে তাদের ইন্টারফেস ব্যবহার করতে বাধ্য করতে পারেন, যার জন্য একটি ফি চার্জ করা হতে পারে। প্ল্যাটফর্মের মালিকরা অ্যাক্সেস উন্মুক্ত করার সিদ্ধান্তও নিতে পারেন (জনগণের ক্ষমতা!) এবং যে কাউকে প্ল্যাটফর্মের জন্য ইন্টারফেস তৈরি করার অনুমতি দিতে পারেন। অথবা মালিকরা এই দুই চরমপন্থার মাঝামাঝি কোনো পদ্ধতি বেছে নিতে পারেন।
আমার চেয়ে বেশি দূরদর্শী বিজনেস লিডাররা জানবেন কীভাবে এটিকে মনিটাইজ করতে হয়। আমি শুধু দেখতে পাচ্ছি যে এটি বর্তমান অবস্থা থেকে আলাদা এবং সম্ভবত লাভজনক।
এছাড়া, অটোমেশন এবং পেমেন্টের বিষয়টিও রয়েছে। কিছু জিনিস খুব কার্যকরভাবে টোকেনাইজ (opens in a new tab) করা যায় এবং একটি ক্লাসিফাইডস বোর্ডে ট্রেড করা যায়। টোকেনাইজড অ্যাসেটগুলো ব্লকচেইন এ সহজেই ট্রান্সফার করা যায়। অত্যন্ত জটিল পেমেন্ট পদ্ধতিগুলো ব্লকচেইন এ সহজেই ইমপ্লিমেন্ট করা যায়।
আমি এখানে একটি ব্যবসার সুযোগ দেখতে পাচ্ছি। কোনো রানিং কস্ট ছাড়াই একটি ক্লাসিফাইডস বোর্ড সহজেই ইমপ্লিমেন্ট করা যেতে পারে, যেখানে প্রতিটি লেনদেন এর মধ্যে জটিল পেমেন্ট পাথ অন্তর্ভুক্ত থাকে। আমি নিশ্চিত কেউ না কেউ এটি কী কাজে ব্যবহার করা যায় সে সম্পর্কে একটি আইডিয়া নিয়ে আসবে।
আমি এটি তৈরি করেই খুশি। চলুন কোডটি দেখে নেওয়া যাক।
ইমপ্লিমেন্টেশন
কিছু সময় আগে আমরা বিজনেস কেস উদাহরণের ইমপ্লিমেন্টেশন এবং অন্যান্য জিনিসপত্র নিয়ে একটি ওপেন সোর্স রিপোজিটরি (opens in a new tab) শুরু করেছিলাম, অনুগ্রহ করে একবার দেখে নিন।
এই Ethereum Classifieds Board (opens in a new tab)-এর কোড সেখানে রয়েছে, অনুগ্রহ করে এটি ব্যবহার করুন এবং পরীক্ষা করুন। শুধু মনে রাখবেন যে কোডটি অডিট করা হয়নি এবং এতে টাকা বিনিয়োগ করার আগে আপনাকে নিজের যাচাই-বাছাই করে নিতে হবে।
বোর্ডের বেসিক বিষয়গুলো জটিল নয়। বোর্ডের সমস্ত বিজ্ঞাপনগুলো কয়েকটি ফিল্ডসহ একটি স্ট্রাক্ট (struct) হবে:
1struct Trade {2 address poster;3 uint256 item;4 uint256 price;5 bytes32 status; // উন্মুক্ত, সম্পাদিত, বাতিলকৃত6}সুতরাং কেউ একজন বিজ্ঞাপনটি পোস্ট করছে। বিক্রির জন্য একটি আইটেম। আইটেমটির একটি দাম। ট্রেডের স্ট্যাটাস যা ওপেন, এক্সিকিউটেড বা বাতিল হতে পারে।
এই সমস্ত ট্রেডগুলো একটি ম্যাপিংয়ে রাখা হবে। কারণ Solidity-তে সবকিছুই একটি ম্যাপিং বলে মনে হয়। এছাড়াও কারণ এটি সুবিধাজনক।
1mapping(uint256 => Trade) public trades;একটি ম্যাপিং ব্যবহার করার মানে হলো পোস্ট করার আগে আমাদের প্রতিটি বিজ্ঞাপনের জন্য একটি আইডি তৈরি করতে হবে, এবং এটি নিয়ে কাজ করার আগে আমাদের একটি বিজ্ঞাপনের আইডি জানতে হবে। স্মার্ট কন্ট্রাক্ট বা ফ্রন্ট-এন্ডে এটি পরিচালনা করার একাধিক উপায় রয়েছে। আপনার যদি কোনো নির্দেশনার প্রয়োজন হয় তবে অনুগ্রহ করে জিজ্ঞাসা করুন।
এরপর প্রশ্ন আসে যে আমরা কোন আইটেমগুলো নিয়ে কাজ করি এবং লেনদেন এর জন্য কোন কারেন্সি ব্যবহার করা হয়।
আইটেমগুলোর জন্য, আমরা শুধু চাইব যে তারা ERC-721 (opens in a new tab) ইন্টারফেস ইমপ্লিমেন্ট করুক, যা মূলত ব্লকচেইন এ বাস্তব জগতের আইটেমগুলোকে উপস্থাপন করার একটি উপায়, যদিও এটি ডিজিটাল অ্যাসেটগুলোর সাথে সবচেয়ে ভালো কাজ করে (opens in a new tab)। আমরা কনস্ট্রাক্টরে আমাদের নিজস্ব ERC721 কন্ট্রাক্ট নির্দিষ্ট করতে যাচ্ছি, যার মানে হলো আমাদের ক্লাসিফাইডস বোর্ডের যেকোনো অ্যাসেট আগে থেকেই টোকেনাইজ করা থাকতে হবে।
পেমেন্টের জন্য, আমরা একই রকম কিছু করতে যাচ্ছি। বেশিরভাগ ব্লকচেইন প্রজেক্ট তাদের নিজস্ব ERC-20 (opens in a new tab) ক্রিপটোকারেন্সি সংজ্ঞায়িত করে। অন্য কেউ কেউ DAI-এর মতো মূলধারার কারেন্সি ব্যবহার করতে পছন্দ করে। এই ক্লাসিফাইডস বোর্ডে, আপনাকে শুধু কনস্ট্রাকশনের সময় সিদ্ধান্ত নিতে হবে যে আপনার কারেন্সি কী হবে। সহজ।
1constructor (2 address _currencyTokenAddress, address _itemTokenAddress3) public {4 currencyToken = IERC20(_currencyTokenAddress);5 itemToken = IERC721(_itemTokenAddress);6 tradeCounter = 0;7}আমরা লক্ষ্যের দিকে এগোচ্ছি। আমাদের কাছে বিজ্ঞাপন, ট্রেড করার জন্য আইটেম এবং পেমেন্টের জন্য একটি কারেন্সি রয়েছে। একটি বিজ্ঞাপন তৈরি করার অর্থ হলো একটি আইটেমকে এসক্রো (escrow)-তে রাখা, যাতে দেখানো যায় যে আপনার কাছে এটি আছে এবং আপনি এটি দুবার পোস্ট করেননি, সম্ভবত অন্য কোনো বোর্ডে।
নিচের কোডটি ঠিক এই কাজটিই করে। আইটেমটিকে এসক্রোতে রাখে, বিজ্ঞাপন তৈরি করে এবং কিছু আনুষঙ্গিক কাজ করে।
1function openTrade(uint256 _item, uint256 _price)2 public3{4 itemToken.transferFrom(msg.sender, address(this), _item);5 trades[tradeCounter] = Trade({6 poster: msg.sender,7 item: _item,8 price: _price,9 status: "Open"10 });11 tradeCounter += 1;12 emit TradeStatusChange(tradeCounter - 1, "Open");13}সব দেখানট্রেড গ্রহণ করার অর্থ হলো একটি বিজ্ঞাপন (ট্রেড) বেছে নেওয়া, দাম পরিশোধ করা এবং আইটেমটি গ্রহণ করা। নিচের কোডটি একটি ট্রেড রিট্রিভ করে। এটি অ্যাভেইলেবল কিনা তা চেক করে। আইটেমের দাম পরিশোধ করে। আইটেমটি রিট্রিভ করে। বিজ্ঞাপনটি আপডেট করে।
1function executeTrade(uint256 _trade)2 public3{4 Trade memory trade = trades[_trade];5 require(trade.status == "Open", "Trade is not Open.");6 currencyToken.transferFrom(msg.sender, trade.poster, trade.price);7 itemToken.transferFrom(address(this), msg.sender, trade.item);8 trades[_trade].status = "Executed";9 emit TradeStatusChange(_trade, "Executed");10}সব দেখানসবশেষে, ক্রেতা গ্রহণ করার আগে বিক্রেতাদের ট্রেড থেকে পিছিয়ে আসার একটি অপশন আমাদের কাছে রয়েছে। কিছু মডেলে, বিজ্ঞাপনগুলো মেয়াদ শেষ হওয়ার আগে একটি নির্দিষ্ট সময়ের জন্য লাইভ থাকে। আপনার মার্কেটের ডিজাইনের ওপর নির্ভর করে এটি আপনার পছন্দ।
কোডটি একটি ট্রেড এক্সিকিউট করার জন্য ব্যবহৃত কোডের মতোই, শুধু পার্থক্য হলো এখানে কোনো কারেন্সি হাতবদল হয় না এবং আইটেমটি বিজ্ঞাপনদাতার কাছে ফিরে যায়।
1function cancelTrade(uint256 _trade)2 public3{4 Trade memory trade = trades[_trade];5 require(6 msg.sender == trade.poster,7 "Trade can be cancelled only by poster."8 );9 require(trade.status == "Open", "Trade is not Open.");10 itemToken.transferFrom(address(this), trade.poster, trade.item);11 trades[_trade].status = "Cancelled";12 emit TradeStatusChange(_trade, "Cancelled");13}সব দেখানএই তো। আপনি ইমপ্লিমেন্টেশনের শেষ পর্যন্ত পৌঁছে গেছেন। কোডে প্রকাশ করার সময় কিছু বিজনেস কনসেপ্ট কতটা কমপ্যাক্ট হতে পারে তা বেশ আশ্চর্যজনক, এবং এটি সেই ক্ষেত্রগুলোর মধ্যে একটি। সম্পূর্ণ কন্ট্রাক্টটি আমাদের রিপোতে (opens in a new tab) চেক করুন।
উপসংহার
ক্লাসিফাইডস বোর্ডগুলো হলো একটি সাধারণ মার্কেট কনফিগারেশন যা ইন্টারনেটের সাথে ব্যাপকভাবে প্রসারিত হয়েছে, এবং কয়েকজন একচেটিয়া বিজয়ীর সাথে একটি অত্যন্ত জনপ্রিয় বিজনেস মডেলে পরিণত হয়েছে।
ক্লাসিফাইডস বোর্ডগুলো ব্লকচেইন পরিবেশে রেপ্লিকেট করার জন্য একটি সহজ টুলও বটে, যার খুব নির্দিষ্ট কিছু ফিচার রয়েছে যা বিদ্যমান জায়ান্টদের জন্য একটি চ্যালেঞ্জ তৈরি করা সম্ভব করবে।
এই আর্টিকেলে, আমি একটি ক্লাসিফাইডস বোর্ড ব্যবসার ব্যবসায়িক বাস্তবতার সাথে প্রযুক্তিগত ইমপ্লিমেন্টেশনের সেতুবন্ধন তৈরি করার চেষ্টা করেছি। আপনার যদি সঠিক দক্ষতা থাকে তবে এই জ্ঞান আপনাকে ইমপ্লিমেন্টেশনের জন্য একটি ভিশন এবং একটি রোডম্যাপ তৈরি করতে সাহায্য করবে।
বরাবরের মতো, আপনি যদি মজার কিছু তৈরি করতে চান এবং কিছু পরামর্শ চান, তবে অনুগ্রহ করে আমাকে জানান (opens in a new tab)! আমি সবসময় সাহায্য করতে পেরে আনন্দিত।
পেজ সর্বশেষ আপডেট: ১৫ আগস্ট, ২০২৩