Bir ERC-721 pazarı nasıl uygulanır
Bu makalede, Ethereum blok zinciri için Craigslist'in nasıl kodlanacağını göstereceğim.
Gumtree, Ebay ve Craigslist'ten önce, ilan panoları çoğunlukla mantar veya kağıttan yapılmıştır. Okul koridorlarında, gazetelerde, sokak lambalarında ve vitrinlerde ilan panoları bulunurdu.
Bunların tamamı internet ile değişti. Belirli bir ilan panosunu görebilen kişi sayısı, çok büyük miktarda katlanarak arttı. Böylece temsil ettikleri pazarlar çok daha verimli hâle geldi ve küresel boyuta ölçeklendi. Ebay, kökeni bu fiziksel ilan panolarına kadar dayanan devasa bir işletmedir.
Blok zinciri ile bu pazarlar bir kez daha değişmeye hazır, size nasıl olduğunu göstereyim.
Para kazanma
Halka açık bir blok zinciri ilan panosunun iş modelinin Ebay'den ve bir şirketten farklı olması gerekecektir.
İlk olarak, merkeziyetsizleşme açısı bulunmaktadır. Mevcut platformların kendi sunucularını sürdürmesi gerekir. Merkeziyetsiz bir platform kullanıcıları tarafından sürdürüldüğü için çekirdek platformu çalıştırmanın maliyeti, platform sahibi için sıfıra düşer.
Ardından, platforma erişim sağlayan ön uç, web sitesi veya arayüz bulunuyor. Burada birçok seçenek bulunur. Platform sahipleri, erişimi kısıtlayabilir ve bir ücret karşılığında herkesi kendi arayüzünü kullanmaya zorlayabilir. Platform sahipleri ayrıca erişimi açmaya karar vererek (Güç İnsanlarda!) herkesin platform için arayüzler oluşturmasına izin verebilir. Veya mal sahipleri, bu aşırı uçların ortasında herhangi bir yaklaşıma karar verebilir.
Benden daha fazla vizyona sahip iş liderleri bundan nasıl para kazanılacağını bilirler. Tek gördüğüm şey, bunun statükodan farklı olduğu ve büyük ihtimalle bundan para kazanılabileceğidir.
Bir de otomasyon ve ödeme açısı var. Bazı şeyler gayet verimli şekilde token'laştırılarak(opens in a new tab) bir ilan panosunda ticarete açılabilir. Token'laştırılmış varlıklar bir blok zincirinde kolayca aktarılır. Son derece karmaşık ödeme yöntemleri bir blok zincirinde kolayca uygulanabilir.
Burada bir iş fırsatı kokusu alıyorum. İşletme maliyeti olmayan bir ilan panosu, her işleme dahil edilen karmaşık ödeme yollarıyla kolayca uygulanabilir. Eminim birileri bunu ne için kullanacağına dair bir fikir bulacaktır.
Bunu inşa etmenin verdiği mutluluk benim için yeterli. Hadi koda bir göz atalım.
Uygulama
Bir süre önce, iş örneği uygulamaları ve başka farklı şeyler içeren bir açık kaynak deposu(opens in a new tab) başlattık, lütfen bir göz atın.
Bu Ethereum İlan Panosu(opens in a new tab)'nun kodları oradadır, lütfen onları kullanın ve onlardan istediğiniz gibi faydalanın. Sadece kodun denetlenmediğini ve işin içine para katmadan önce kendi durum tespitinizi yapmanız gerektiğini unutmayın.
Panonun temelleri karmaşık değildir. Panodaki tüm reklamlar sadece birkaç alana sahip bir yapı olacaktır:
1struct Trade {2 address poster;3 uint256 item;4 uint256 price;5 bytes32 status; // Open, Executed, Cancelled6}Kopyala
İlanı yayınlayan biri var. Satılık bir ürün. Ürünün fiyatı. Açık, gerçekleştirilmiş veya iptal edilmiş olabilen işlemin durumu.
Tüm bu işlemler bir eşleştirme içerisinde tutulacaktır. Çünkü Solidity'deki her şey bir eşleştirme gibi görünüyor. Ayrıca rahat olduğu için.
1mapping(uint256 => Trade) public trades;Kopyala
Eşleştirme kullanmak, yayınlamadan önce her reklam için bir kimlik bulmamız gerektiği anlamına gelir ve üzerinde işlem yapabilmemiz için bir reklamın kimliğini bilmemiz gerekir. Akıllı sözleşmede veya ön uçta bununla başa çıkmanın birden fazla yolu vardır. Lütfen yardıma ihtiyacınız varsa sormaktan çekinmeyin.
Ardından, ilgilendiğimiz bu öğelerin neler olduğu ve işlem için ödeme yapmak için kullanılan bu para biriminin ne olduğu sorusu geliyor.
Öğeler için, dijital varlıklarla en iyi şekilde çalışmasına(opens in a new tab) rağmen, gerçek dünya öğelerini bir blok zincirinde temsil etmenin bir yolu olan ERC-721(opens in a new tab) arayüzünü uygulamalarını isteyeceğiz. Yapıcıda kendi ERC721 sözleşmemizi belirteceğiz, yani ilan panomuzdaki herhangi bir varlığın önceden token'laştırılmış olması gerekir.
Ödemeler için de benzer bir şey yapacağız. Birçok blok zinciri projesi, kendi ERC-20(opens in a new tab) kripto parasını tanımlar. Bazıları ise DAI gibi bir ana akım parayı kullanmayı tercih ediyor. Bu ilan panosunda, inşa sırasında para biriminize karar vermeniz yeterli olur. Kolay.
1constructor (2 address _currencyTokenAddress, address _itemTokenAddress3) public {4 currencyToken = IERC20(_currencyTokenAddress);5 itemToken = IERC721(_itemTokenAddress);6 tradeCounter = 0;7}Kopyala
Az kaldı. Reklamlarımız, ticaret için öğelerimiz ve ödemeler için bir para birimimiz var. Bir reklam yapmak, bir öğeyi hem ona sahip olduğunuzu hem de muhtemelen farklı bir panoda iki kez yayınlamadığınızı göstermek için emanete koymak anlamına gelir.
Aşağıdaki kod tam olarak onu yapar. Eşyayı emanete koyar, reklamı yaratır ve biraz bakım yapar.
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}Tümünü gösterKopyala
Ticareti kabul etmek; bir reklam (ticaret) seçmek, fiyatı ödemek ve ürünü almak anlamına gelir. Aşağıdaki kod, bir ticaret işlemini alır. Uygun olup olmadığını kontrol eder. Öğeyi verir. Öğeyi alır. Reklamı günceller.
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}Tümünü gösterKopyala
Son olarak, bir alıcı kabul etmeden önce satıcıların bir ticaretten vazgeçme seçeneğimiz var. Bazı modellerde, reklamlar süresi dolmadan önce belirli bir süre yayında olur. Pazarınızın tasarımına bağlı olarak tercihinize kalmıştır.
Kod, bir işlemi gerçekleştirmek için kullanılana çok benzer, yalnızca el değiştiren para yoktur ve öğe reklam yayınlayana geri döner.
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}Tümünü gösterKopyala
Bu kadar. Uygulamanın sonuna geldiniz. Kodla ifade edildiğinde bazı iş kavramlarının ne kadar kısa olduğu oldukça şaşırtıcıdır ve bu da o durumlardan biridir. Depomuzda(opens in a new tab) tam sözleşmeye bakın.
Sonuç
İlan panoları, internet ile büyük miktarda ölçeklenen ve oldukça az tekel niteliğinde kazananla son derece popüler bir iş modeli hâline gelen ortak bir pazar yapılandırmasıdır.
İlan panoları, mevcut devlere meydan okumayı mümkün kılacak çok özel özelliklerle, bir blok zinciri ortamında çoğaltılması kolay bir araçtır.
Bu makalede, bir ilan panosu işinin ticari gerçekliği ile teknolojik uygulama arasında köprü kurmaya çalıştım. Bu bilgi, doğru becerilere sahipseniz, bir vizyon ve uygulama için bir yol haritası oluşturmanıza yardımcı olacaktır.
Her zaman olduğu gibi, eğlenceli bir şey inşa etmek istiyorsanız ve tavsiye almak istiyorsanız, lütfen bana bir şeyler yazın(opens in a new tab)! Her zaman yardımcı olmaktan memnuniyet duyarım.
Son düzenleme: @nhsz(opens in a new tab), 15 Ağustos 2023