Ana içeriğe geç

Bir ERC-721 pazarı nasıl uygulanır

akıllı sözleşmelererc-721katılıktoken'lar
Orta düzey
Alberto Cuesta Cañada
Hackernoon(opens in a new tab)
19 Mart 2020
5 dakikalık okuma minute read

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, Cancelled
6}
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 _itemTokenAddress
3) 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 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}
Tümünü göster
Kopyala

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 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}
Tümünü göster
Kopyala

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 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}
Tümünü göster
Kopyala

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.

Bu rehber yararlı oldu mu?