Önceki birkaç makaleyi okuyan kullanıcılar, ERC-20 protokollerine ait Token'ların, Uniswap gibi DEX'ler aracılığıyla merkeziyetsizlik ile işlem görebileceğini bilmelidir. Peki, ERC-721 protokolü, yani NFT'ler için merkeziyetsiz işlem nasıl yapılabilir?
Şu anda ana akım bazı NFT borsaları, ticaret yapmak için sipariş verme yöntemini kullanıyor; bu, birer birer ürünlerin süpermarket raflarına yerleştirilmesi gibidir, alıcılar fiyatın uygun olduğunu düşündüklerinde, ürünleri evlerine götürebilirler.
Bu makale, akıllı sözleşmeler yazma ve basit bir ön yüz sayfası oluşturma yoluyla NFT'nin merkeziyetsiz ticaretini gerçekleştirecektir. Bu makalenin yalnızca öğrenme amacıyla kullanıldığını ve gerçek bir üretim ortamında kullanılamayacağını unutmayın.
NFT (Değiştirilemez Token)
NFT, yani eşsiz token, her bir Token'ın eşsiz olduğu ve farklı olduğu anlamına gelir. Bu, ERC-721 protokolünü takip eder. Genel olarak her bir NFT cüzdan içinde farklı bir resim gösterir ve her NFT grubu, ayırt etmek için benzersiz bir ID'ye sahip olacaktır.
NFT'nin özelliklerinden dolayı, fiyat eğrisiyle fiyat belirlemek için ERC-20 gibi bir yöntem kullanılamaz - çünkü her bir Token farklıdır. Bu yüzden şu anda en yaygın işlem şekli, emir defteri biçiminde işlem yapmaktır.
Sipariş Defteri İşlemleri
Sipariş defteri modeli, basitçe, ürün fiyatının insan tarafından belirlendiği, Uniswap gibi fiyatı fiyat eğrisiyle hesaplayan yöntemlerden farklıdır. Sipariş defteri genellikle iki tür işlem moduna ayrılır; biri fiyatlandırma emri, yani satıcının kendi belirlediği satış fiyatıdır, eğer alıcı bu fiyatı uygun bulursa, alıcı satın alma işlemini gerçekleştirebilir. Diğeri ise satın alma emri, yani alıcı kendi ihtiyacına göre bir satın alma emri verir, satıcı bu fiyatı uygun bulursa, satıcı satış işlemini gerçekleştirebilir.
Genel olarak, alım siparişlerinin fiyatı, fiyatlandırma siparişlerinin fiyatından düşük olacaktır. Bu yazıda yalnızca birinci fiyatlandırma yöntemi tanıtılacaktır.
NFT DEX'in fonksiyonları
Bir NFT DEX'in temel işlevleri aşağıdaki temel işlevleri içermelidir:
Ürün listeleme: Bir NFT'yi fiyatlandırmaya göre listelemek
Ürün satın alma: NFT'nin fiyatlandırmasına göre satın alma
DEX işlem ücreti: İşlem fiyatına göre orantılı olarak işlem ücreti alınır.
Ürün ekleme
Ürünleri listelemek için aşağıdaki birkaç şeyi yapmanız gerekiyor:
Ön yüz: Kullanıcı kendi NFT'sini seçer ve bir fiyat belirleyerek listelemeye tıklar.
Protokol: Kullanıcı, protokole yetki ayarlamak zorundadır; bu, kullanıcının NFT'sini kontrol etmesine olanak tanır.
Bu şekilde ürün raflarda yer almış olur. Sözleşmede, kullanıcıların raflara koyduğu ürün fiyatlarının bir Haritasını tutmak gerekmektedir, bu verinin genellikle merkezi bir hizmette tutulması, sözleşmenin yükünü azaltmak için mümkündür, ancak bu makalede bu Harita verisi sözleşme içinde tutulacaktır.
ürün satın al
Ürün satın alırken aşağıdaki birkaç şey meydana gelir:
Ön yüz: Kullanıcı satın almak istediği bir NFT'yi seçer ve satın al butonuna tıklar.
Bu bölümde, sıfırdan bir NFT DEX'i gerçekleştireceğiz, bu yazar tarafından zaten dağıtılmış DEX adresi nft-dex-frontend.vercel.app.
1. Bir NFT oluştur
Test ihtiyaçları için, en iyisi kendi NFT'mize sahip olmaktır. Remix aracılığıyla hızlı bir şekilde ERC-721 protokolüne sahip bir NFT oluşturabiliriz; bu, ilgili şablonu sağlar.
Şablona göre kolayca bir NFT dağıtabiliriz. Elbette bu adımı atlayabilir ve doğrudan hazırladığımız NFT'yi kullanabilirsiniz.
2. Sözleşme Yazımı
Sözleşme yöntemlerimiz aşağıdaki birkaç yöntemi içermelidir:
2.1. Satıcı NFT Yükler
Satıcı, satmak istediği NFT'yi ve ilgili fiyatı belirtmelidir. Listeleme sırasında, kullanıcı NFT'nin yetkilendirme yöntemini imzalamalıdır, böylece akıllı sözleşmemizin bu NFT'yi işlem yapma yetkisi olur, bu şekilde bir alıcı satın aldığında, bu işlem otomatik olarak tamamlanabilir.
Bu nedenle süreç şöyle olmalıdır: 1. Kullanıcı kendi NFT'sini seçer; 2. Fiyatı ayarlar, burada fiyatlandırma stabil coin USDT, USDC veya ETH olabilir; 3. NFT'yi sözleşmeye yetkilendirir.
Sonrasında sözleşmenin listeleme yöntemini çağırabilirsiniz, bu yöntem aşağıdaki birkaç şeyi yapması gerekmektedir:
NFT'nin sahipliğini doğrulama
Listeleme kaydı ekle
Listeleme olayını tetikleme
2.2. Alıcı NFT satın alır
Alıcı, NFT satın alırken, kullanıcı yalnızca istediği NFT'yi seçmeli ve ilgili token'i ödemelidir. Sözleşme seviyesinde aşağıdaki adımlar gerçekleştirilecektir: 1. "listings"'den ilgili NFT verileri okunur; 2. NFT'nin fiyatına göre işlem ücretleri hesaplanır ve bu miktar satış fiyatından düşülür; 3. NFT alıcının eline transfer edilir; 4. satın alma olayı tetiklenir.
2.3. Listeyi İptal Et
Elbette, satıcı fiyatın uygun olmadığını düşünebilir ve listelemeyi iptal etmeyi seçebilir. Listeleme bilgilerini kaydettiğimiz yerde, ürünün geçerliliğini belirtmek için bir isActive alanını sakladık, bu nedenle listelemeyi iptal ettiğimizde bu alanı false olarak ayarlamamız yeterlidir.
2.4. Çekim Ücreti
DEX, her bir işlemde işlem ücreti alabilir, bu işlem ücreti ya sözleşmeye depolanabilir ya da başka bir kendi adresinize aktarılabilir, bu yazıda sözleşmeye depolama yöntemi tercih edilmektedir.
Buraya kadar, sözleşmemizin temel işlevi tamamlanmış sayılır.
3. DEX ön uç geliştirme
Başlamadan önce, bazı araçlar hazırlamamız gerekiyor, aşağıdaki birkaç aracı içermektedir:
Ant Design Web3: Cüzdan bağlantısı ve NFT kartlarının gösterimi için.
Wagmi: Cüzdan ile etkileşim kurmak için kullanılır.
Nextjs + Vercel: Projemizi dağıtmak.
Ön uç uygulamamız üç sayfa içermelidir: Mint, Buy ve Portfolio. Mint, kullanıcıların NFT'mizi Mint etmesine olanak tanımak için, yalnızca bir gösterim amacıyla. Buy, DEX pazarımızdır; kullanıcılar burada NFT'mizi satın alabilir. Portfolio'da kullanıcılar NFT'lerini listeleme ve kaldırma işlemleri yapabilir.
3.1. Cüzdanı Bağla
Kullanıcı cüzdanını bağlayın, Ant Design Web3 ile gerçekleştirin
Kullanıcı cüzdanını bağlama süreci oldukça basittir, Ant Design Web3 tarafından sağlanan bağlantı bileşenini kullanarak bunu gerçekleştirebilirsiniz.
Öncelikle projeyi bir Provider ile sarmalıyoruz, böylece sonraki kodlarda Ant Design Web3'ün yeteneklerini kullanabileceğiz. Ayrıca sepolia test ağına bağlanmamız gerektiği için hız açısından bazı düğüm hizmetlerini kullanmayı öneririm, burada ZAN'ın endpoint'ini kullanıyorum, bu Asya-Pasifik ortamında kullanmak için çok uygun, hızlı ve oldukça maliyet etkin, desteklenen ağlar da oldukça zengin.
Sonrasında cüzdan bağlamak gereken yere bir bağlantı butonu yerleştirin:
Böylece halletmiş olduk, oldukça basit.
3.2. Mint
Mint bir NFT, test Token almak için
Mint sayfasında test amaçlı NFT'ler Mint edebiliriz. Mint, bir sözleşme yazma işlemidir; burada wagmi içindeki useWriteContract yöntemini kullanacağız. Sözleşme adresini, sözleşmenin ABI'sini ve sözleşme parametrelerini belirlememiz yeterlidir.
Sonrasında cüzdan içinde onaylayarak Mint işlemini başarıyla gerçekleştirebilirsiniz.
3.3. Portföy
Kullanıcıların NFT'lerini yönetmek
Burada kullanıcının tüm NFT'lerini göstermemiz gerekiyor. Bunu almak için bazı NFT API'lerini kullanabiliriz, burada sepolia test ağına destek veren NFT API'si pek fazla olmadığından opensea API'sini kullanıyoruz.
Kullanıcının NFT listesini aldıktan sonra, bunların zaten satışa sunulup sunulmadığını belirlemek gerekir. Satışa sunulmamış olanlar satışa sunulabilir, satışa sunulmuş olanlar ise geri alınabilir. Bu tespit, DEX sözleşmesi içindeki "getSellerListings" yönteminden kullanıcının satışa sunduğu NFT'leri almak ve bu NFT'lerin "isAlive" alanına bakarak satışta olup olmadığını belirlemek suretiyle yapılır.
Listeleme sırasında "listNFT" sözleşme yöntemini çağırmanız gerekir, iptal ederken ise "cancelListing" yöntemini çağırmanız gerekir. Listelemeden önce, NFT'nin yetkilendirme yöntemini ek olarak çağırmanız gerekir, NFT'yi sözleşmeye yetkilendirmek için, böylece sonraki işlem tamamlandıktan sonra bu NFT otomatik olarak alıcıya aktarılabilir.
3.4. Satın Al
Buy içinde NFT satın alabilirsiniz.
Öncelikle, zaten listelenmiş olan NFT'leri sergilememiz gerekiyor. Kullanıcının sahip olduğu NFT'leri Portföy'deki gibi sergilemekle benzerlik gösteriyor, ancak burada iki farklılık var: biri küresel olarak sergileniyor, artık belirli bir kullanıcı değil, diğeri ise yalnızca isAlive olan NFT'leri sergilemek.
Satın alırken « purchaseNFT » yöntemini kullanın, bu yöntemi çağırırken satış fiyatını ödemek için ETH kullanmanız gerekmektedir.
Buradaki bu "value", alıcının ödemesi gereken ETH'dir.
Böylece tüm temel yetenekleri içeren bir DEX ön yüz sayfası tamamlandı, bunu vercel'e dağıtabiliriz.
Bu makale ZAN Team (X hesabı @zan_team) üyesi Yeezo (X hesabı @GaoYeezo 75065) tarafından yazılmıştır.
The content is for reference only, not a solicitation or offer. No investment, tax, or legal advice provided. See Disclaimer for more risks disclosure.
Web3 Çaylak Serisi: Sıfırdan Bir NFT DEX Gerçekleştirmek
Önceki birkaç makaleyi okuyan kullanıcılar, ERC-20 protokollerine ait Token'ların, Uniswap gibi DEX'ler aracılığıyla merkeziyetsizlik ile işlem görebileceğini bilmelidir. Peki, ERC-721 protokolü, yani NFT'ler için merkeziyetsiz işlem nasıl yapılabilir?
Şu anda ana akım bazı NFT borsaları, ticaret yapmak için sipariş verme yöntemini kullanıyor; bu, birer birer ürünlerin süpermarket raflarına yerleştirilmesi gibidir, alıcılar fiyatın uygun olduğunu düşündüklerinde, ürünleri evlerine götürebilirler.
Bu makale, akıllı sözleşmeler yazma ve basit bir ön yüz sayfası oluşturma yoluyla NFT'nin merkeziyetsiz ticaretini gerçekleştirecektir. Bu makalenin yalnızca öğrenme amacıyla kullanıldığını ve gerçek bir üretim ortamında kullanılamayacağını unutmayın.
NFT (Değiştirilemez Token)
NFT, yani eşsiz token, her bir Token'ın eşsiz olduğu ve farklı olduğu anlamına gelir. Bu, ERC-721 protokolünü takip eder. Genel olarak her bir NFT cüzdan içinde farklı bir resim gösterir ve her NFT grubu, ayırt etmek için benzersiz bir ID'ye sahip olacaktır.
NFT'nin özelliklerinden dolayı, fiyat eğrisiyle fiyat belirlemek için ERC-20 gibi bir yöntem kullanılamaz - çünkü her bir Token farklıdır. Bu yüzden şu anda en yaygın işlem şekli, emir defteri biçiminde işlem yapmaktır.
Sipariş Defteri İşlemleri
Sipariş defteri modeli, basitçe, ürün fiyatının insan tarafından belirlendiği, Uniswap gibi fiyatı fiyat eğrisiyle hesaplayan yöntemlerden farklıdır. Sipariş defteri genellikle iki tür işlem moduna ayrılır; biri fiyatlandırma emri, yani satıcının kendi belirlediği satış fiyatıdır, eğer alıcı bu fiyatı uygun bulursa, alıcı satın alma işlemini gerçekleştirebilir. Diğeri ise satın alma emri, yani alıcı kendi ihtiyacına göre bir satın alma emri verir, satıcı bu fiyatı uygun bulursa, satıcı satış işlemini gerçekleştirebilir.
Genel olarak, alım siparişlerinin fiyatı, fiyatlandırma siparişlerinin fiyatından düşük olacaktır. Bu yazıda yalnızca birinci fiyatlandırma yöntemi tanıtılacaktır.
NFT DEX'in fonksiyonları
Bir NFT DEX'in temel işlevleri aşağıdaki temel işlevleri içermelidir:
Ürün ekleme
Ürünleri listelemek için aşağıdaki birkaç şeyi yapmanız gerekiyor:
Bu şekilde ürün raflarda yer almış olur. Sözleşmede, kullanıcıların raflara koyduğu ürün fiyatlarının bir Haritasını tutmak gerekmektedir, bu verinin genellikle merkezi bir hizmette tutulması, sözleşmenin yükünü azaltmak için mümkündür, ancak bu makalede bu Harita verisi sözleşme içinde tutulacaktır.
ürün satın al
Ürün satın alırken aşağıdaki birkaç şey meydana gelir:
Bir NFT DEX'in Gerçekleştirilmesi
Bu bölümde, sıfırdan bir NFT DEX'i gerçekleştireceğiz, bu yazar tarafından zaten dağıtılmış DEX adresi nft-dex-frontend.vercel.app.
1. Bir NFT oluştur
Test ihtiyaçları için, en iyisi kendi NFT'mize sahip olmaktır. Remix aracılığıyla hızlı bir şekilde ERC-721 protokolüne sahip bir NFT oluşturabiliriz; bu, ilgili şablonu sağlar.
Şablona göre kolayca bir NFT dağıtabiliriz. Elbette bu adımı atlayabilir ve doğrudan hazırladığımız NFT'yi kullanabilirsiniz.
2. Sözleşme Yazımı
Sözleşme yöntemlerimiz aşağıdaki birkaç yöntemi içermelidir:
2.1. Satıcı NFT Yükler
Satıcı, satmak istediği NFT'yi ve ilgili fiyatı belirtmelidir. Listeleme sırasında, kullanıcı NFT'nin yetkilendirme yöntemini imzalamalıdır, böylece akıllı sözleşmemizin bu NFT'yi işlem yapma yetkisi olur, bu şekilde bir alıcı satın aldığında, bu işlem otomatik olarak tamamlanabilir.
Bu nedenle süreç şöyle olmalıdır: 1. Kullanıcı kendi NFT'sini seçer; 2. Fiyatı ayarlar, burada fiyatlandırma stabil coin USDT, USDC veya ETH olabilir; 3. NFT'yi sözleşmeye yetkilendirir.
Sonrasında sözleşmenin listeleme yöntemini çağırabilirsiniz, bu yöntem aşağıdaki birkaç şeyi yapması gerekmektedir:
2.2. Alıcı NFT satın alır
Alıcı, NFT satın alırken, kullanıcı yalnızca istediği NFT'yi seçmeli ve ilgili token'i ödemelidir. Sözleşme seviyesinde aşağıdaki adımlar gerçekleştirilecektir: 1. "listings"'den ilgili NFT verileri okunur; 2. NFT'nin fiyatına göre işlem ücretleri hesaplanır ve bu miktar satış fiyatından düşülür; 3. NFT alıcının eline transfer edilir; 4. satın alma olayı tetiklenir.
2.3. Listeyi İptal Et
Elbette, satıcı fiyatın uygun olmadığını düşünebilir ve listelemeyi iptal etmeyi seçebilir. Listeleme bilgilerini kaydettiğimiz yerde, ürünün geçerliliğini belirtmek için bir isActive alanını sakladık, bu nedenle listelemeyi iptal ettiğimizde bu alanı false olarak ayarlamamız yeterlidir.
2.4. Çekim Ücreti
DEX, her bir işlemde işlem ücreti alabilir, bu işlem ücreti ya sözleşmeye depolanabilir ya da başka bir kendi adresinize aktarılabilir, bu yazıda sözleşmeye depolama yöntemi tercih edilmektedir.
Buraya kadar, sözleşmemizin temel işlevi tamamlanmış sayılır.
3. DEX ön uç geliştirme
Başlamadan önce, bazı araçlar hazırlamamız gerekiyor, aşağıdaki birkaç aracı içermektedir:
Ön uç uygulamamız üç sayfa içermelidir: Mint, Buy ve Portfolio. Mint, kullanıcıların NFT'mizi Mint etmesine olanak tanımak için, yalnızca bir gösterim amacıyla. Buy, DEX pazarımızdır; kullanıcılar burada NFT'mizi satın alabilir. Portfolio'da kullanıcılar NFT'lerini listeleme ve kaldırma işlemleri yapabilir.
3.1. Cüzdanı Bağla
Kullanıcı cüzdanını bağlama süreci oldukça basittir, Ant Design Web3 tarafından sağlanan bağlantı bileşenini kullanarak bunu gerçekleştirebilirsiniz.
Öncelikle projeyi bir Provider ile sarmalıyoruz, böylece sonraki kodlarda Ant Design Web3'ün yeteneklerini kullanabileceğiz. Ayrıca sepolia test ağına bağlanmamız gerektiği için hız açısından bazı düğüm hizmetlerini kullanmayı öneririm, burada ZAN'ın endpoint'ini kullanıyorum, bu Asya-Pasifik ortamında kullanmak için çok uygun, hızlı ve oldukça maliyet etkin, desteklenen ağlar da oldukça zengin.
Sonrasında cüzdan bağlamak gereken yere bir bağlantı butonu yerleştirin:
3.2. Mint
Mint sayfasında test amaçlı NFT'ler Mint edebiliriz. Mint, bir sözleşme yazma işlemidir; burada wagmi içindeki useWriteContract yöntemini kullanacağız. Sözleşme adresini, sözleşmenin ABI'sini ve sözleşme parametrelerini belirlememiz yeterlidir.
Sonrasında cüzdan içinde onaylayarak Mint işlemini başarıyla gerçekleştirebilirsiniz.
3.3. Portföy
Burada kullanıcının tüm NFT'lerini göstermemiz gerekiyor. Bunu almak için bazı NFT API'lerini kullanabiliriz, burada sepolia test ağına destek veren NFT API'si pek fazla olmadığından opensea API'sini kullanıyoruz.
Kullanıcının NFT listesini aldıktan sonra, bunların zaten satışa sunulup sunulmadığını belirlemek gerekir. Satışa sunulmamış olanlar satışa sunulabilir, satışa sunulmuş olanlar ise geri alınabilir. Bu tespit, DEX sözleşmesi içindeki "getSellerListings" yönteminden kullanıcının satışa sunduğu NFT'leri almak ve bu NFT'lerin "isAlive" alanına bakarak satışta olup olmadığını belirlemek suretiyle yapılır.
Listeleme sırasında "listNFT" sözleşme yöntemini çağırmanız gerekir, iptal ederken ise "cancelListing" yöntemini çağırmanız gerekir. Listelemeden önce, NFT'nin yetkilendirme yöntemini ek olarak çağırmanız gerekir, NFT'yi sözleşmeye yetkilendirmek için, böylece sonraki işlem tamamlandıktan sonra bu NFT otomatik olarak alıcıya aktarılabilir.
3.4. Satın Al
Öncelikle, zaten listelenmiş olan NFT'leri sergilememiz gerekiyor. Kullanıcının sahip olduğu NFT'leri Portföy'deki gibi sergilemekle benzerlik gösteriyor, ancak burada iki farklılık var: biri küresel olarak sergileniyor, artık belirli bir kullanıcı değil, diğeri ise yalnızca isAlive olan NFT'leri sergilemek.
Satın alırken « purchaseNFT » yöntemini kullanın, bu yöntemi çağırırken satış fiyatını ödemek için ETH kullanmanız gerekmektedir.
Buradaki bu "value", alıcının ödemesi gereken ETH'dir.
Böylece tüm temel yetenekleri içeren bir DEX ön yüz sayfası tamamlandı, bunu vercel'e dağıtabiliriz.
Bu makale ZAN Team (X hesabı @zan_team) üyesi Yeezo (X hesabı @GaoYeezo 75065) tarafından yazılmıştır.