Son zamanlarda bir merkeziyetsiz borsa geliştirme projesine katıldığımda, tanınmış bir DEX'in kod uygulamasını referans aldım ve birçok pratik akıllı sözleşme geliştirme tekniği öğrendim. Daha önce ağırlıklı olarak NFT sözleşmeleri geliştiren bir geliştirici olarak, bu benim DeFi sözleşmesi geliştirmedeki ilk deneyimim. Burada, yeni başlayan geliştiricilere yardımcı olabilecek bazı küçük ipuçlarını paylaşmak istiyorum.
Tahmin Edilebilir Sözleşme Adresi
Genellikle dağıtılan kontratların aldığı adresler rastgele görünür, çünkü nonce ile ilgilidir. Ancak bazı senaryolarda, işlem bilgileri aracılığıyla kontrat adresini tahmin etmemiz gerekir; bu, işlem yetkisini belirlemede veya havuz adresini elde etmede oldukça faydalıdır.
Bir yöntem, oluşturulan adresin tahmin edilebilir olmasını sağlamak için salt parametresini ekleyerek CREATE2 kullanarak bir sözleşme oluşturmaktır. Yeni adresin hesaplama formülü şöyledir:
Yeni adres = hash("0xFF", oluşturucu adres, tuz, initcode)
Geri Çağırma Fonksiyonunu Akıllıca Kullanma
Solidity'de sözleşmeler birbirini çağırabilir. Bazı senaryolarda, A yöntemi B'yi çağırır, B çağrılan yöntemde A'yı geri arar; bu model oldukça kullanışlıdır.
Örneğin, bir DEX'te işlem yaparken, havuz sözleşmesinin swap yöntemi swapCallback'i geri çağıracak ve gereken Token miktarını iletecektir. Çağrıyı yapan taraf, geri çağırmada Token'ı aktarmalıdır, swap'i birden fazla çağrıya ayırmamalıdır. Bu, swap yönteminin bütünlüğünü ve güvenliğini sağlar.
Hata ile bilgi iletimi
Belirli bir DEX'in kodunda, pool sözleşmesinin swap yöntemini işlem simülasyonu yapmak ve gereken Token'ı tahmin etmek için try-catch ile sarmalayın. Tahmin sırasında Token gerçekten değiştirilmediğinden, hata fırlatılacaktır. Özel bir hata fırlatarak ve ardından hata bilgilerini yakalayıp çözerek, tahmin sonuçlarını elde edebilirsiniz.
Bu teknik, tahmini talep için swap yöntemini özel olarak değiştirmeyi önleyerek, mantığı sade tutar.
Büyük sayı işleme hassasiyeti sorunları
Fiyat ve likidite hesaplamaları yapılırken, bölme işleminin hassasiyet kaybını önlemek için önce 96 bit sola kaydırılabilir (, bu da 2^96) ile çarpmaya eşdeğerdir, ardından işlem yapılabilir. Bu şekilde, normal işlemlerde taşma olmadan hassasiyet garanti edilebilir.
Share modu kazanç hesaplama
LP işlem ücretlerinin kazancını kaydederken, her işlemde her LP'yi kaydetmek mümkün değildir, bu büyük miktarda Gas tüketir. Bir çözüm, toplam işlem ücretini ve her birim likiditeye tahsis edilmesi gereken ücreti kaydetmektir. LP çekim işlemi sırasında, sahip olunan likiditeye göre çekilebilir ücreti hesaplamak, hisse senedi temettüsüne benzer.
Zincir Üstü ve Zincir Dışı Veri Birleşimi
Tüm bilgilerin zincire eklenmesi veya zincirden alınması gerekmez. İşlem havuzu listesi, havuz bilgileri gibi veriler normal bir veritabanında saklanabilir ve düzenli olarak zincirden senkronize edilebilir. Bu, performansı ve verimliliği artırabilir. Tabii ki, kritik işlemler yine de zincirde gerçekleştirilmelidir.
Sözleşme Bölme ve Yeniden Kullanım
Büyük projeler, birden fazla gerçek dağıtılmış sözleşme içerebilir. Tek bir sözleşme dağıtılmış olsa bile, bakım kolaylığı için miras alarak birden fazla sözleşmeye bölünebilir. Aynı zamanda, ERC721 gibi mevcut standart sözleşmeleri kullanmayı öğrenmek, geliştirme verimliliğini artırabilir.
Uygulama, en iyi öğrenme yoludur. Basit bir DEX'i uygulayarak, bazı karmaşık projelerin kod uygulamasını daha derinlemesine anlamak ve gerçek projelerdeki daha fazla bilgi edinmek mümkündür. Bu küçük ipuçlarının, sözleşme geliştirmek isteyen yeni başlayanlar için faydalı olmasını umuyorum.
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
DEX sözleşme geliştirme için gerekli yedi teknik Çaylakların okuması gerekenler
Sözleşme Geliştirme Küçük İpuçları Paylaşımı
Son zamanlarda bir merkeziyetsiz borsa geliştirme projesine katıldığımda, tanınmış bir DEX'in kod uygulamasını referans aldım ve birçok pratik akıllı sözleşme geliştirme tekniği öğrendim. Daha önce ağırlıklı olarak NFT sözleşmeleri geliştiren bir geliştirici olarak, bu benim DeFi sözleşmesi geliştirmedeki ilk deneyimim. Burada, yeni başlayan geliştiricilere yardımcı olabilecek bazı küçük ipuçlarını paylaşmak istiyorum.
Tahmin Edilebilir Sözleşme Adresi
Genellikle dağıtılan kontratların aldığı adresler rastgele görünür, çünkü nonce ile ilgilidir. Ancak bazı senaryolarda, işlem bilgileri aracılığıyla kontrat adresini tahmin etmemiz gerekir; bu, işlem yetkisini belirlemede veya havuz adresini elde etmede oldukça faydalıdır.
Bir yöntem, oluşturulan adresin tahmin edilebilir olmasını sağlamak için salt parametresini ekleyerek CREATE2 kullanarak bir sözleşme oluşturmaktır. Yeni adresin hesaplama formülü şöyledir:
Yeni adres = hash("0xFF", oluşturucu adres, tuz, initcode)
Geri Çağırma Fonksiyonunu Akıllıca Kullanma
Solidity'de sözleşmeler birbirini çağırabilir. Bazı senaryolarda, A yöntemi B'yi çağırır, B çağrılan yöntemde A'yı geri arar; bu model oldukça kullanışlıdır.
Örneğin, bir DEX'te işlem yaparken, havuz sözleşmesinin swap yöntemi swapCallback'i geri çağıracak ve gereken Token miktarını iletecektir. Çağrıyı yapan taraf, geri çağırmada Token'ı aktarmalıdır, swap'i birden fazla çağrıya ayırmamalıdır. Bu, swap yönteminin bütünlüğünü ve güvenliğini sağlar.
Hata ile bilgi iletimi
Belirli bir DEX'in kodunda, pool sözleşmesinin swap yöntemini işlem simülasyonu yapmak ve gereken Token'ı tahmin etmek için try-catch ile sarmalayın. Tahmin sırasında Token gerçekten değiştirilmediğinden, hata fırlatılacaktır. Özel bir hata fırlatarak ve ardından hata bilgilerini yakalayıp çözerek, tahmin sonuçlarını elde edebilirsiniz.
Bu teknik, tahmini talep için swap yöntemini özel olarak değiştirmeyi önleyerek, mantığı sade tutar.
Büyük sayı işleme hassasiyeti sorunları
Fiyat ve likidite hesaplamaları yapılırken, bölme işleminin hassasiyet kaybını önlemek için önce 96 bit sola kaydırılabilir (, bu da 2^96) ile çarpmaya eşdeğerdir, ardından işlem yapılabilir. Bu şekilde, normal işlemlerde taşma olmadan hassasiyet garanti edilebilir.
Share modu kazanç hesaplama
LP işlem ücretlerinin kazancını kaydederken, her işlemde her LP'yi kaydetmek mümkün değildir, bu büyük miktarda Gas tüketir. Bir çözüm, toplam işlem ücretini ve her birim likiditeye tahsis edilmesi gereken ücreti kaydetmektir. LP çekim işlemi sırasında, sahip olunan likiditeye göre çekilebilir ücreti hesaplamak, hisse senedi temettüsüne benzer.
Zincir Üstü ve Zincir Dışı Veri Birleşimi
Tüm bilgilerin zincire eklenmesi veya zincirden alınması gerekmez. İşlem havuzu listesi, havuz bilgileri gibi veriler normal bir veritabanında saklanabilir ve düzenli olarak zincirden senkronize edilebilir. Bu, performansı ve verimliliği artırabilir. Tabii ki, kritik işlemler yine de zincirde gerçekleştirilmelidir.
Sözleşme Bölme ve Yeniden Kullanım
Büyük projeler, birden fazla gerçek dağıtılmış sözleşme içerebilir. Tek bir sözleşme dağıtılmış olsa bile, bakım kolaylığı için miras alarak birden fazla sözleşmeye bölünebilir. Aynı zamanda, ERC721 gibi mevcut standart sözleşmeleri kullanmayı öğrenmek, geliştirme verimliliğini artırabilir.
Uygulama, en iyi öğrenme yoludur. Basit bir DEX'i uygulayarak, bazı karmaşık projelerin kod uygulamasını daha derinlemesine anlamak ve gerçek projelerdeki daha fazla bilgi edinmek mümkündür. Bu küçük ipuçlarının, sözleşme geliştirmek isteyen yeni başlayanlar için faydalı olmasını umuyorum.