ERC-721 मार्केट कैसे लागू करें
इस लेख में, मैं आपको दिखाऊंगा कि इथेरियम ब्लॉकचेन के लिए Craigslist को कैसे कोड किया जाए।
Gumtree, Ebay और Craigslist से पहले, क्लासिफाइड बोर्ड (classified boards) ज़्यादातर कॉर्क या कागज़ के बने होते थे। स्कूल के गलियारों, अखबारों, स्ट्रीटलाइट्स और दुकानों के सामने क्लासिफाइड बोर्ड हुआ करते थे।
इंटरनेट के साथ यह सब बदल गया। किसी विशिष्ट क्लासिफाइड बोर्ड को देखने वाले लोगों की संख्या कई गुना बढ़ गई। इसके साथ, वे जिन बाज़ारों का प्रतिनिधित्व करते हैं, वे बहुत अधिक कुशल हो गए और वैश्विक आकार तक बढ़ गए। Ebay एक बहुत बड़ा व्यवसाय है जिसकी उत्पत्ति इन्हीं भौतिक क्लासिफाइड बोर्ड से हुई है।
ब्लॉकचेन के साथ ये बाज़ार एक बार फिर से बदलने के लिए तैयार हैं, आइए मैं आपको दिखाता हूँ कि कैसे।
मुद्रीकरण
सार्वजनिक ब्लॉकचेन क्लासिफाइड बोर्ड का बिजनेस मॉडल Ebay और अन्य कंपनियों से अलग होना चाहिए।
सबसे पहले, विकेंद्रीकरण का दृष्टिकोण है। मौजूदा प्लेटफॉर्म्स को अपने स्वयं के सर्वर बनाए रखने की आवश्यकता होती है। एक विकेंद्रीकृत प्लेटफॉर्म का रखरखाव इसके उपयोगकर्ताओं द्वारा किया जाता है, इसलिए प्लेटफॉर्म के मालिक के लिए मुख्य प्लेटफॉर्म को चलाने की लागत शून्य हो जाती है।
फिर फ्रंट एंड (front end) आता है, वह वेबसाइट या इंटरफ़ेस जो प्लेटफॉर्म तक पहुंच प्रदान करता है। यहाँ कई विकल्प हैं। प्लेटफॉर्म के मालिक पहुंच को प्रतिबंधित कर सकते हैं और शुल्क लेकर सभी को अपने इंटरफ़ेस का उपयोग करने के लिए मजबूर कर सकते हैं। प्लेटफॉर्म के मालिक पहुंच को खुला रखने (लोगों को शक्ति!) का निर्णय भी ले सकते हैं और किसी को भी प्लेटफॉर्म के लिए इंटरफ़ेस बनाने की अनुमति दे सकते हैं। या मालिक इन चरम सीमाओं के बीच का कोई भी दृष्टिकोण तय कर सकते हैं।
मुझसे अधिक दूरदृष्टि वाले बिजनेस लीडर्स जानेंगे कि इसका मुद्रीकरण कैसे किया जाए। मैं बस इतना देखता हूँ कि यह यथास्थिति से अलग है और संभवतः लाभदायक है।
इसके अलावा, ऑटोमेशन और भुगतान का दृष्टिकोण भी है। कुछ चीजों को बहुत प्रभावी ढंग से टोकनाइज़ (opens in a new tab) किया जा सकता है और क्लासिफाइड बोर्ड में उनका व्यापार किया जा सकता है। टोकनाइज़्ड संपत्तियों को ब्लॉकचेन में आसानी से स्थानांतरित किया जा सकता है। अत्यधिक जटिल भुगतान विधियों को ब्लॉकचेन में आसानी से लागू किया जा सकता है।
मुझे यहाँ बस एक व्यावसायिक अवसर दिखाई दे रहा है। बिना किसी रनिंग कॉस्ट (running cost) वाले क्लासिफाइड बोर्ड को आसानी से लागू किया जा सकता है, जिसमें प्रत्येक लेन-देन में जटिल भुगतान पथ शामिल हों। मुझे यकीन है कि कोई न कोई इस बात का विचार लेकर आएगा कि इसका उपयोग किस लिए किया जाए।
मैं बस इसे बनाकर खुश हूँ। आइए कोड पर एक नज़र डालें।
कार्यान्वयन
कुछ समय पहले हमने व्यावसायिक मामलों के उदाहरण कार्यान्वयन और अन्य चीज़ों के साथ एक ओपन सोर्स रिपॉजिटरी (opens in a new tab) शुरू की थी, कृपया एक नज़र डालें।
इस इथेरियम क्लासिफाइड बोर्ड (opens in a new tab) का कोड वहाँ मौजूद है, कृपया इसका उपयोग करें और इसके साथ प्रयोग करें। बस इस बात का ध्यान रखें कि कोड का ऑडिट नहीं किया गया है और इसमें पैसा लगाने से पहले आपको अपनी खुद की जांच (due diligence) करनी होगी।
बोर्ड की मूल बातें जटिल नहीं हैं। बोर्ड में सभी विज्ञापन (adverts) कुछ फ़ील्ड्स के साथ केवल एक स्ट्रक्ट (struct) होंगे:
struct Trade {
address poster;
uint256 item;
uint256 price;
bytes32 status; // खुला, निष्पादित, रद्द
}
तो कोई विज्ञापन पोस्ट कर रहा है। बिक्री के लिए एक आइटम। आइटम की कीमत। व्यापार (trade) की स्थिति जो खुली (open), निष्पादित (executed) या रद्द (cancelled) हो सकती है।
इन सभी व्यापारों को एक मैपिंग (mapping) में रखा जाएगा। क्योंकि Solidity में सब कुछ एक मैपिंग लगता है। और इसलिए भी क्योंकि यह सुविधाजनक है।
mapping(uint256 => Trade) public trades;
मैपिंग का उपयोग करने का मतलब सिर्फ इतना है कि हमें प्रत्येक विज्ञापन को पोस्ट करने से पहले उसके लिए एक आईडी (id) बनानी होगी, और उस पर काम करने से पहले हमें विज्ञापन की आईडी जाननी होगी। स्मार्ट कॉन्ट्रैक्ट या फ्रंट-एंड में इससे निपटने के कई तरीके हैं। यदि आपको कुछ सुझाव चाहिए तो कृपया पूछें।
इसके बाद यह सवाल आता है कि वे कौन से आइटम हैं जिनका हम व्यापार करते हैं, और यह कौन सी मुद्रा है जिसका उपयोग लेन-देन के भुगतान के लिए किया जाता है।
आइटम्स के लिए, हम बस यह पूछने जा रहे हैं कि वे ERC-721 (opens in a new tab) इंटरफ़ेस को लागू करते हैं, जो वास्तव में ब्लॉकचेन में वास्तविक दुनिया के आइटम्स का प्रतिनिधित्व करने का एक तरीका है, हालांकि यह डिजिटल संपत्तियों के साथ सबसे अच्छा काम करता है (opens in a new tab)। हम कंस्ट्रक्टर में अपना खुद का ERC721 अनुबंध निर्दिष्ट करने जा रहे हैं, जिसका अर्थ है कि हमारे क्लासिफाइड बोर्ड में किसी भी संपत्ति को पहले से ही टोकनाइज़ किया जाना चाहिए।
भुगतान के लिए, हम कुछ ऐसा ही करने जा रहे हैं। अधिकांश ब्लॉकचेन प्रोजेक्ट अपनी खुद की ERC-20 (opens in a new tab) क्रिप्टोकरेंसी परिभाषित करते हैं। कुछ अन्य DAI जैसी मुख्यधारा की क्रिप्टोकरेंसी का उपयोग करना पसंद करते हैं। इस क्लासिफाइड बोर्ड में, आपको बस निर्माण (construction) के समय यह तय करना होगा कि आपकी मुद्रा क्या होगी। आसान है।
constructor (
address _currencyTokenAddress, address _itemTokenAddress
) public {
currencyToken = IERC20(_currencyTokenAddress);
itemToken = IERC721(_itemTokenAddress);
tradeCounter = 0;
}
हम वहां पहुंच रहे हैं। हमारे पास विज्ञापन, व्यापार के लिए आइटम और भुगतान के लिए एक मुद्रा है। विज्ञापन बनाने का मतलब है किसी आइटम को एस्क्रो (escrow) में रखना ताकि यह दिखाया जा सके कि वह आपके पास है और आपने उसे दो बार पोस्ट नहीं किया है, संभवतः किसी अलग बोर्ड में।
नीचे दिया गया कोड बिल्कुल यही करता है। आइटम को एस्क्रो में रखता है, विज्ञापन बनाता है, और कुछ हाउसकीपिंग (housekeeping) करता है।
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");
}
व्यापार को स्वीकार करने का मतलब है एक विज्ञापन (व्यापार) चुनना, कीमत चुकाना, आइटम प्राप्त करना। नीचे दिया गया कोड एक व्यापार प्राप्त करता है। जांचता है कि यह उपलब्ध है। आइटम का भुगतान करता है। आइटम प्राप्त करता है। विज्ञापन को अपडेट करता है।
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");
}
अंत में, हमारे पास विक्रेताओं के लिए खरीदार द्वारा इसे स्वीकार करने से पहले व्यापार से पीछे हटने का विकल्प है। कुछ मॉडलों में, विज्ञापन समाप्त होने से पहले कुछ समय के लिए लाइव रहते हैं। यह आपकी पसंद है, जो आपके बाज़ार के डिज़ाइन पर निर्भर करता है।
यह कोड व्यापार को निष्पादित करने के लिए उपयोग किए जाने वाले कोड के समान ही है, बस इसमें कोई मुद्रा का लेन-देन नहीं होता है और आइटम वापस विज्ञापन पोस्ट करने वाले के पास चला जाता है।
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");
}
बस इतना ही। आप कार्यान्वयन के अंत तक पहुँच गए हैं। यह काफी आश्चर्यजनक है कि कोड में व्यक्त किए जाने पर कुछ व्यावसायिक अवधारणाएं कितनी संक्षिप्त होती हैं, और यह उन्हीं मामलों में से एक है। हमारे रेपो में (opens in a new tab) पूरा अनुबंध देखें।
निष्कर्ष
क्लासिफाइड बोर्ड एक सामान्य बाज़ार कॉन्फ़िगरेशन हैं जो इंटरनेट के साथ बड़े पैमाने पर बढ़े, और कुछ एकाधिकारवादी विजेताओं के साथ एक बेहद लोकप्रिय बिजनेस मॉडल बन गए।
क्लासिफाइड बोर्ड ब्लॉकचेन वातावरण में दोहराने के लिए एक आसान टूल भी हैं, जिनमें बहुत विशिष्ट विशेषताएं हैं जो मौजूदा दिग्गजों को चुनौती देना संभव बनाएंगी।
इस लेख में, मैंने क्लासिफाइड बोर्ड व्यवसाय की व्यावसायिक वास्तविकता को तकनीकी कार्यान्वयन के साथ जोड़ने का प्रयास किया है। यदि आपके पास सही कौशल है, तो यह ज्ञान आपको कार्यान्वयन के लिए एक दृष्टिकोण और रोडमैप बनाने में मदद करेगा।
हमेशा की तरह, यदि आप कुछ मज़ेदार बनाने जा रहे हैं और कुछ सलाह चाहते हैं, तो कृपया मुझे एक संदेश भेजें (opens in a new tab)! मुझे मदद करने में हमेशा खुशी होती है।