مرکزی مواد پر جائیں

ERC-721 مارکیٹ کو کیسے نافذ کیا جائے

اسمارٹ کانٹریکٹس
erc-721
Solidity
ٹوکنز
درمیانی
البرٹو کویسٹا کینیڈا
19 مارچ، 2020
8 منٹ کی پڑھائی

اس مضمون میں، میں آپ کو دکھاؤں گا کہ ایتھیریم (Ethereum) بلاک چین کے لیے Craigslist کو کیسے کوڈ کیا جائے۔

Gumtree، Ebay اور Craigslist سے پہلے، کلاسیفائیڈ بورڈز زیادہ تر کارک یا کاغذ کے بنے ہوتے تھے۔ اسکول کی راہداریوں، اخبارات، اسٹریٹ لائٹس، اور دکانوں کے سامنے کلاسیفائیڈ بورڈز موجود ہوتے تھے۔

انٹرنیٹ کے ساتھ یہ سب بدل گیا۔ کسی مخصوص کلاسیفائیڈ بورڈ کو دیکھنے والے لوگوں کی تعداد میں کئی گنا اضافہ ہو گیا۔ اس کے ساتھ، وہ مارکیٹیں جن کی یہ نمائندگی کرتے ہیں، بہت زیادہ موثر ہو گئیں اور عالمی سطح تک پھیل گئیں۔ Ebay ایک بہت بڑا کاروبار ہے جس کی ابتدا انہی جسمانی کلاسیفائیڈ بورڈز سے ہوتی ہے۔

بلاک چین کے ساتھ یہ مارکیٹیں ایک بار پھر تبدیل ہونے والی ہیں، آئیے میں آپ کو دکھاتا ہوں کہ کیسے۔

مونیٹائزیشن

پبلک بلاک چین کلاسیفائیڈ بورڈ کا بزنس ماڈل Ebay اور دیگر کمپنیوں سے مختلف ہونا چاہیے۔

سب سے پہلے، ڈی سینٹرلائزیشن کا پہلو ہے۔ موجودہ پلیٹ فارمز کو اپنے سرورز خود برقرار رکھنے پڑتے ہیں۔ ایک ڈی سینٹرلائزڈ پلیٹ فارم کو اس کے صارفین برقرار رکھتے ہیں، اس لیے پلیٹ فارم کے مالک کے لیے بنیادی پلیٹ فارم چلانے کی لاگت صفر ہو جاتی ہے۔

پھر فرنٹ اینڈ (front end) ہے، یعنی وہ ویب سائٹ یا انٹرفیس جو پلیٹ فارم تک رسائی فراہم کرتا ہے۔ یہاں بہت سے اختیارات موجود ہیں۔ پلیٹ فارم کے مالکان رسائی کو محدود کر سکتے ہیں اور ہر ایک کو اپنا انٹرفیس استعمال کرنے پر مجبور کر سکتے ہیں، اور اس کی فیس وصول کر سکتے ہیں۔ پلیٹ فارم کے مالکان رسائی کو کھلا رکھنے کا فیصلہ بھی کر سکتے ہیں (عوام کو طاقت!) اور کسی کو بھی پلیٹ فارم کے لیے انٹرفیس بنانے کی اجازت دے سکتے ہیں۔ یا مالکان ان دونوں انتہاؤں کے درمیان کوئی بھی طریقہ کار اختیار کرنے کا فیصلہ کر سکتے ہیں۔

مجھ سے زیادہ وژن رکھنے والے بزنس لیڈرز جان لیں گے کہ اسے کیسے مونیٹائز کیا جائے۔ میں صرف یہ دیکھتا ہوں کہ یہ موجودہ صورتحال سے مختلف ہے اور شاید منافع بخش بھی ہے۔

مزید برآں، آٹومیشن اور ادائیگیوں کا پہلو بھی ہے۔ کچھ چیزوں کو بہت مؤثر طریقے سے ٹوکنائز (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}

تو کوئی اشتہار پوسٹ کر رہا ہے۔ فروخت کے لیے ایک شے ہے۔ شے کی قیمت ہے۔ ٹریڈ کا اسٹیٹس جو اوپن (open)، ایگزیکیوٹڈ (executed) یا کینسلڈ (cancelled) ہو سکتا ہے۔

یہ تمام ٹریڈز ایک میپنگ (mapping) میں رکھی جائیں گی۔ کیونکہ Solidity میں ہر چیز ایک میپنگ معلوم ہوتی ہے۔ اور اس لیے بھی کہ یہ آسان ہے۔

1mapping(uint256 => Trade) public trades;

میپنگ استعمال کرنے کا مطلب صرف یہ ہے کہ ہمیں ہر اشتہار کو پوسٹ کرنے سے پہلے اس کے لیے ایک آئی ڈی (id) بنانی ہوگی، اور اس پر کام کرنے سے پہلے ہمیں اشتہار کی آئی ڈی معلوم ہونی چاہیے۔ اسمارٹ کانٹریکٹ یا فرنٹ اینڈ میں اس سے نمٹنے کے کئی طریقے ہیں۔ اگر آپ کو کچھ رہنمائی کی ضرورت ہو تو براہ کرم پوچھیں۔

اس کے بعد یہ سوال آتا ہے کہ وہ کون سی اشیاء ہیں جن کا ہم لین دین کرتے ہیں، اور وہ کون سی کرنسی ہے جو ٹرانزیکشن کی ادائیگی کے لیے استعمال ہوتی ہے۔

اشیاء کے لیے، ہم صرف یہ پوچھنے جا رہے ہیں کہ وہ ERC-721 (opens in a new tab) انٹرفیس کو نافذ کریں، جو دراصل بلاک چین میں حقیقی دنیا کی اشیاء کی نمائندگی کرنے کا ایک طریقہ ہے، حالانکہ یہ ڈیجیٹل اثاثوں کے ساتھ بہترین کام کرتا ہے (opens in a new tab)۔ ہم کنسٹرکٹر (constructor) میں اپنا ERC721 کانٹریکٹ متعین کرنے جا رہے ہیں، جس کا مطلب ہے کہ ہمارے کلاسیفائیڈ بورڈ میں موجود کسی بھی اثاثے کو پہلے سے ٹوکنائز کیا جانا ضروری ہے۔

ادائیگیوں کے لیے، ہم کچھ ایسا ہی کرنے جا رہے ہیں۔ زیادہ تر بلاک چین پروجیکٹس اپنی ERC-20 (opens in a new tab) کرپٹو کرنسی خود متعین کرتے ہیں۔ کچھ دوسرے مین اسٹریم کرنسی جیسے DAI استعمال کرنے کو ترجیح دیتے ہیں۔ اس کلاسیفائیڈ بورڈ میں، آپ کو صرف کنسٹرکشن کے وقت یہ فیصلہ کرنا ہوگا کہ آپ کی کرنسی کیا ہوگی۔ آسان ہے۔

1constructor (
2 address _currencyTokenAddress, address _itemTokenAddress
3) public {
4 currencyToken = IERC20(_currencyTokenAddress);
5 itemToken = IERC721(_itemTokenAddress);
6 tradeCounter = 0;
7}

ہم منزل کے قریب پہنچ رہے ہیں۔ ہمارے پاس اشتہارات، تجارت کے لیے اشیاء اور ادائیگیوں کے لیے ایک کرنسی ہے۔ اشتہار بنانے کا مطلب یہ ہے کہ کسی شے کو ایسکرو (escrow) میں رکھا جائے تاکہ یہ ظاہر کیا جا سکے کہ آپ کے پاس یہ موجود ہے اور آپ نے اسے دو بار پوسٹ نہیں کیا ہے، ممکنہ طور پر کسی مختلف بورڈ میں۔

نیچے دیا گیا کوڈ بالکل یہی کرتا ہے۔ شے کو ایسکرو میں رکھتا ہے، اشتہار بناتا ہے، اور کچھ ہاؤس کیپنگ (housekeeping) کرتا ہے۔

1function openTrade(uint256 _item, uint256 _price)
2 public
3{
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 public
3{
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 public
3{
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)! مجھے مدد کرنے میں ہمیشہ خوشی ہوتی ہے۔

صفحہ کی آخری اپ ڈیٹ: 3 مارچ، 2026

کیا یہ ٹیوٹوریل مددگار تھا؟