---
title: "কীভাবে একটি ERC-721 মার্কেট তৈরি করবেন"
description: "কীভাবে একটি বিকেন্দ্রীকৃত ক্লাসিফাইড বোর্ডে টোকেনাইজ করা আইটেম বিক্রির জন্য রাখা যায়"
author: "আলবার্তো কুয়েস্তা কানাডা"
tags:
  - স্মার্ট কন্ট্রাক্ট
  - erc-721
  - Solidity
  - টোকেন
skill: intermediate
breadcrumb: "ERC-721 মার্কেট"
lang: bn
published: 2020-03-19
source: Hackernoon
sourceUrl: https://hackernoon.com/how-to-implement-an-erc721-market-1e1a32j9
---

এই আর্টিকেলে, আমি আপনাদের দেখাব কীভাবে ইথেরিয়াম ব্লকচেইনের জন্য Craigslist কোড করতে হয়।

Gumtree, Ebay এবং Craigslist-এর আগে, ক্লাসিফাইড বোর্ডগুলো মূলত কর্ক বা কাগজ দিয়ে তৈরি হতো। স্কুলের করিডোর, সংবাদপত্র, রাস্তার ল্যাম্পপোস্ট এবং দোকানের সামনে ক্লাসিফাইড বোর্ড থাকত।

ইন্টারনেটের মাধ্যমে এই সবকিছু বদলে গেছে। একটি নির্দিষ্ট ক্লাসিফাইড বোর্ড দেখতে পাওয়া মানুষের সংখ্যা বহুগুণে বৃদ্ধি পেয়েছে। এর ফলে, তারা যে মার্কেটগুলোর প্রতিনিধিত্ব করে সেগুলো আরও বেশি কার্যকর হয়ে উঠেছে এবং বিশ্বব্যাপী প্রসারিত হয়েছে। Ebay একটি বিশাল ব্যবসা, যার উৎপত্তি এই ফিজিক্যাল ক্লাসিফাইড বোর্ডগুলো থেকেই।

ব্লকচেইনের মাধ্যমে এই মার্কেটগুলো আবারও পরিবর্তিত হতে চলেছে, চলুন আমি আপনাদের দেখাই কীভাবে।

## মনিটাইজেশন {#monetization}

একটি পাবলিক ব্লকচেইন ক্লাসিফাইড বোর্ডের বিজনেস মডেল Ebay এবং অন্যান্য কোম্পানির থেকে আলাদা হতে হবে।

প্রথমত, এখানে [বিকেন্দ্রীকরণের বিষয়টি](/developers/docs/web2-vs-web3/) রয়েছে। বিদ্যমান প্ল্যাটফর্মগুলোকে তাদের নিজস্ব সার্ভার রক্ষণাবেক্ষণ করতে হয়। একটি বিকেন্দ্রীকৃত প্ল্যাটফর্ম এর ব্যবহারকারীদের দ্বারা পরিচালিত হয়, তাই প্ল্যাটফর্মের মালিকের জন্য মূল প্ল্যাটফর্মটি চালানোর খরচ শূন্যে নেমে আসে।

এরপর রয়েছে ফ্রন্ট এন্ড, ওয়েবসাইট বা ইন্টারফেস যা প্ল্যাটফর্মে অ্যাক্সেস দেয়। এখানে অনেকগুলো বিকল্প রয়েছে। প্ল্যাটফর্মের মালিকরা অ্যাক্সেস সীমিত করতে পারেন এবং ফি নিয়ে সবাইকে তাদের ইন্টারফেস ব্যবহার করতে বাধ্য করতে পারেন। প্ল্যাটফর্মের মালিকরা অ্যাক্সেস উন্মুক্ত করার সিদ্ধান্তও নিতে পারেন (জনগণের হাতে ক্ষমতা!) এবং যে কাউকে প্ল্যাটফর্মের জন্য ইন্টারফেস তৈরি করার সুযোগ দিতে পারেন। অথবা মালিকরা এই দুই চরমপন্থার মাঝামাঝি কোনো পদ্ধতিও বেছে নিতে পারেন।

_আমার চেয়ে বেশি দূরদর্শী বিজনেস লিডাররা জানবেন কীভাবে এটি মনিটাইজ করতে হয়। আমি শুধু দেখতে পাচ্ছি যে এটি বর্তমান অবস্থার চেয়ে আলাদা এবং সম্ভবত লাভজনক।_

তাছাড়া, এখানে অটোমেশন এবং পেমেন্টের বিষয়টিও রয়েছে। কিছু জিনিস খুব [কার্যকরভাবে টোকেনাইজ](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com) করা যায় এবং একটি ক্লাসিফাইড বোর্ডে ট্রেড করা যায়। টোকেনাইজ করা সম্পদগুলো ব্লকচেইনে সহজেই ট্রান্সফার করা যায়। অত্যন্ত জটিল পেমেন্ট পদ্ধতিগুলো ব্লকচেইনে সহজেই প্রয়োগ করা যায়।

আমি এখানে একটি ব্যবসার সুযোগ দেখতে পাচ্ছি। কোনো রানিং কস্ট ছাড়াই একটি ক্লাসিফাইড বোর্ড সহজেই তৈরি করা যায়, যেখানে প্রতিটি ট্রানজ্যাকশনে জটিল পেমেন্ট পাথ অন্তর্ভুক্ত থাকে। আমি নিশ্চিত কেউ না কেউ এটি কী কাজে ব্যবহার করা যায় সে সম্পর্কে একটি আইডিয়া নিয়ে আসবে।

আমি এটি তৈরি করতে পেরেই খুশি। চলুন কোডটি দেখে নেওয়া যাক।

## ইমপ্লিমেন্টেশন {#implementation}

কিছুদিন আগে আমরা বিজনেস কেসের উদাহরণ এবং অন্যান্য জিনিসপত্র নিয়ে একটি [ওপেন সোর্স রিপোজিটরি](https://github.com/HQ20/contracts?ref=hackernoon.com) শুরু করেছি, অনুগ্রহ করে একবার দেখে নিন।

এই [ইথেরিয়াম ক্লাসিফাইড বোর্ডের](https://github.com/HQ20/contracts/tree/master/contracts/classifieds?ref=hackernoon.com) কোড সেখানে রয়েছে, অনুগ্রহ করে এটি ব্যবহার করুন এবং পরীক্ষা করুন। শুধু মনে রাখবেন যে কোডটি অডিট করা হয়নি এবং এতে টাকা বিনিয়োগ করার আগে আপনাকে নিজের দায়িত্ব সম্পর্কে সচেতন হতে হবে।

বোর্ডের বেসিক বিষয়গুলো জটিল নয়। বোর্ডের সমস্ত বিজ্ঞাপনগুলো কয়েকটি ফিল্ডসহ একটি স্ট্রাক্ট (struct) হবে:

```solidity
struct Trade {
  address poster;
  uint256 item;
  uint256 price;
  bytes32 status; // উন্মুক্ত, সম্পাদিত, বাতিল
}
```

সুতরাং কেউ একজন বিজ্ঞাপন পোস্ট করছে। বিক্রির জন্য একটি আইটেম। আইটেমটির একটি দাম। ট্রেডের স্ট্যাটাস যা ওপেন, এক্সিকিউটেড বা বাতিল হতে পারে।

এই সমস্ত ট্রেডগুলো একটি ম্যাপিংয়ে রাখা হবে। কারণ Solidity-তে সবকিছুই ম্যাপিং বলে মনে হয়। এছাড়াও কারণ এটি সুবিধাজনক।

```solidity
mapping(uint256 => Trade) public trades;
```

ম্যাপিং ব্যবহার করার মানে হলো পোস্ট করার আগে আমাদের প্রতিটি বিজ্ঞাপনের জন্য একটি আইডি তৈরি করতে হবে, এবং এটি নিয়ে কাজ করার আগে আমাদের একটি বিজ্ঞাপনের আইডি জানতে হবে। স্মার্ট কন্ট্রাক্ট বা ফ্রন্ট-এন্ডে এটি পরিচালনা করার একাধিক উপায় রয়েছে। আপনার যদি কোনো নির্দেশনার প্রয়োজন হয় তবে অনুগ্রহ করে জিজ্ঞাসা করুন।

এরপর প্রশ্ন আসে যে আমরা কোন আইটেমগুলো নিয়ে কাজ করি এবং ট্রানজ্যাকশনের জন্য পেমেন্ট করতে কোন কারেন্সি ব্যবহার করা হয়।

আইটেমগুলোর জন্য, আমরা শুধু চাইব যে তারা [ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com) ইন্টারফেস ইমপ্লিমেন্ট করুক, যা মূলত ব্লকচেইনে বাস্তব জগতের আইটেমগুলোকে উপস্থাপন করার একটি উপায়, যদিও এটি [ডিজিটাল সম্পদের সাথে সবচেয়ে ভালো কাজ করে](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com)। আমরা কনস্ট্রাক্টরে আমাদের নিজস্ব ERC721 কন্ট্রাক্ট নির্দিষ্ট করতে যাচ্ছি, যার মানে হলো আমাদের ক্লাসিফাইড বোর্ডের যেকোনো সম্পদ আগে থেকেই টোকেনাইজ করা থাকতে হবে।

পেমেন্টের জন্য, আমরা একই রকম কিছু করতে যাচ্ছি। বেশিরভাগ ব্লকচেইন প্রজেক্ট তাদের নিজস্ব [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com) ক্রিপ্টোকারেন্সি নির্ধারণ করে। অন্য কেউ কেউ DAI-এর মতো মূলধারার কারেন্সি ব্যবহার করতে পছন্দ করে। এই ক্লাসিফাইড বোর্ডে, আপনাকে শুধু কনস্ট্রাকশনের সময় সিদ্ধান্ত নিতে হবে যে আপনার কারেন্সি কী হবে। একদম সহজ।

```solidity
constructor (
  address _currencyTokenAddress, address _itemTokenAddress
) public {
  currencyToken = IERC20(_currencyTokenAddress);
  itemToken = IERC721(_itemTokenAddress);
  tradeCounter = 0;
}
```

আমরা প্রায় শেষের দিকে। আমাদের কাছে বিজ্ঞাপন, ট্রেড করার জন্য আইটেম এবং পেমেন্টের জন্য একটি কারেন্সি রয়েছে। একটি বিজ্ঞাপন তৈরি করার অর্থ হলো একটি আইটেমকে এসক্রো (escrow)-তে রাখা, যাতে দেখানো যায় যে আপনার কাছে এটি আছে এবং আপনি এটি দুবার পোস্ট করেননি, সম্ভবত অন্য কোনো বোর্ডে।

নিচের কোডটি ঠিক এই কাজটিই করে। আইটেমটিকে এসক্রোতে রাখে, বিজ্ঞাপন তৈরি করে এবং কিছু আনুষঙ্গিক কাজ করে।

```solidity
function openTrade(uint256 _item, uint256 _price)
  public
{
  itemToken.transferFrom(msg.sender, address(this), _item);
  trades[tradeCounter] = Trade({
    poster: msg.sender,
    item: _item,
    price: _price,
    status: "Open"
  });
  tradeCounter += 1;
  emit TradeStatusChange(tradeCounter - 1, "Open");
}
```

ট্রেড গ্রহণ করার অর্থ হলো একটি বিজ্ঞাপন (ট্রেড) বেছে নেওয়া, দাম পরিশোধ করা এবং আইটেমটি গ্রহণ করা। নিচের কোডটি একটি ট্রেড পুনরুদ্ধার করে। এটি উপলব্ধ কিনা তা চেক করে। আইটেমের জন্য পেমেন্ট করে। আইটেমটি পুনরুদ্ধার করে। বিজ্ঞাপনটি আপডেট করে।

```solidity
function executeTrade(uint256 _trade)
  public
{
  Trade memory trade = trades[_trade];
  require(trade.status == "Open", "Trade is not Open.");
  currencyToken.transferFrom(msg.sender, trade.poster, trade.price);
  itemToken.transferFrom(address(this), msg.sender, trade.item);
  trades[_trade].status = "Executed";
  emit TradeStatusChange(_trade, "Executed");
}
```

সবশেষে, ক্রেতা গ্রহণ করার আগে বিক্রেতাদের ট্রেড থেকে সরে আসার একটি বিকল্প আমাদের কাছে রয়েছে। কিছু মডেলে, বিজ্ঞাপনগুলো মেয়াদ শেষ হওয়ার আগে একটি নির্দিষ্ট সময়ের জন্য লাইভ থাকে। আপনার মার্কেটের ডিজাইনের ওপর নির্ভর করে এটি আপনার পছন্দ।

কোডটি ট্রেড এক্সিকিউট করার জন্য ব্যবহৃত কোডের মতোই, শুধু এখানে কোনো কারেন্সি হাতবদল হয় না এবং আইটেমটি বিজ্ঞাপনদাতার কাছে ফিরে যায়।

```solidity
function cancelTrade(uint256 _trade)
  public
{
  Trade memory trade = trades[_trade];
  require(
    msg.sender == trade.poster,
    "Trade can be cancelled only by poster."
  );
  require(trade.status == "Open", "Trade is not Open.");
  itemToken.transferFrom(address(this), trade.poster, trade.item);
  trades[_trade].status = "Cancelled";
  emit TradeStatusChange(_trade, "Cancelled");
}
```

এটুকুই। আপনি ইমপ্লিমেন্টেশনের শেষ পর্যায়ে পৌঁছে গেছেন। কোডে প্রকাশ করার সময় কিছু বিজনেস কনসেপ্ট কতটা কমপ্যাক্ট হতে পারে তা বেশ আশ্চর্যজনক, এবং এটি সেই ক্ষেত্রগুলোর মধ্যে একটি। [আমাদের রিপোতে](https://github.com/HQ20/contracts/blob/master/contracts/classifieds/Classifieds.sol) সম্পূর্ণ কন্ট্রাক্টটি চেক করুন।

## উপসংহার {#conclusion}

ক্লাসিফাইড বোর্ডগুলো হলো একটি সাধারণ মার্কেট কনফিগারেশন যা ইন্টারনেটের সাথে ব্যাপকভাবে প্রসারিত হয়েছে এবং কয়েকজন একচেটিয়া বিজয়ীর সাথে একটি অত্যন্ত জনপ্রিয় বিজনেস মডেলে পরিণত হয়েছে।

ক্লাসিফাইড বোর্ডগুলো ব্লকচেইন পরিবেশে প্রতিলিপি করার জন্য একটি সহজ টুলও বটে, যার খুব নির্দিষ্ট কিছু বৈশিষ্ট্য রয়েছে যা বিদ্যমান জায়ান্টদের জন্য একটি চ্যালেঞ্জ তৈরি করা সম্ভব করবে।

এই আর্টিকেলে, আমি একটি ক্লাসিফাইড বোর্ড ব্যবসার বাস্তবতার সাথে প্রযুক্তিগত ইমপ্লিমেন্টেশনের একটি সেতু তৈরি করার চেষ্টা করেছি। আপনার যদি সঠিক দক্ষতা থাকে তবে এই জ্ঞান আপনাকে ইমপ্লিমেন্টেশনের জন্য একটি ভিশন এবং রোডম্যাপ তৈরি করতে সাহায্য করবে।

সবসময়ের মতো, আপনি যদি মজার কিছু তৈরি করতে চান এবং কিছু পরামর্শ চান, তবে অনুগ্রহ করে [আমাকে জানান](https://albertocuesta.es/)! আমি সবসময় সাহায্য করতে প্রস্তুত।