DEX projeleri için 7 pratik sözleşme geliştirme ipucu

Sözleşme Geliştirme Küçük İpuçları Toplaması

Son zamanlarda merkeziyetsiz bir borsa geliştirirken, tanınmış bir DEX'in kod uygulamasını referans aldım ve birçok pratik sözleşme geliştirme tekniği öğrendim. Defi sözleşme geliştirmeye yeni başlayan biri olarak, bu teknikler bana büyük bir ilham verdi. Diğer sözleşme geliştirmeyi öğrenmek isteyen arkadaşlar için de faydalı olacağına inanıyorum.

Web3 Yeni Başlangıç Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları

Tahmin Edilebilir Sözleşme Adresi

Genellikle dağıtılan sözleşmelerin elde edilen adresleri rastgele görünür ve tahmin edilmesi zordur. Ancak bazı durumlarda, işlem eşleşme bilgilerinden sözleşme adresini çıkarmamız gerekir; örneğin, işlem yetkisini belirlemek veya havuz adresini almak için.

Bu, CREATE2 yöntemi kullanılarak sözleşme oluşturularak gerçekleştirilebilir. Spesifik olarak, sözleşme oluşturulurken salt parametresi eklenir:

katılık pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());

Bu şekilde oluşturulan sözleşme adresi tahmin edilebilir, oluşturma mantığı şudur:

Yeni adres = hash("0xFF", yaratıcının adresi, tuz, initcode)

Web3 Yeni Başlangıç Serisi: Uniswap Kodundan Öğrendiğim Akıllı Sözleşme Geliştirme İpuçları

Geri Çağırma Fonksiyonlarını Kullanma

Bazı senaryolarda, sözleşmelerin birbirini çağırması yararlıdır. Örneğin, A'nın B'nin metodunu çağırması, B'nin çağrılan metodunda A'yı geri aramasıdır.

Bir işlem örneği olarak, havuz sözleşmesinin swap yöntemini çağırdığınızda, swapCallback'i geri çağırır ve hesaplanan gerçek gerekli Token miktarını iletir. Çağrılan taraf, geri çağırma sırasında Token'ı havuz sözleşmesine aktarmalıdır, bu da swap yönteminin tam olarak uygulanmasını ve güvenliğini sağlar, karmaşık değişken kayıtlarına gerek kalmaz.

Hata ile Bilgi İletimi

Tahmini işlem yaparken, swap yöntemini simüle etmemiz gerekiyor ama Token'ları gerçek anlamda değiştirmiyoruz. İşlem geri çağırma fonksiyonunda özel bir hata fırlatabiliriz, ardından bu hatayı yakalayıp gerekli bilgileri çıkartabiliriz.

Bu yöntem hileli gibi görünüyor, ama oldukça pratik. Tahmini işlemler için özel olarak swap yöntemini değiştirmeye gerek yok, mantık daha basit.

Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları

Büyük sayıların hassasiyet sorununu çözme

Fiyat ve likidite hesaplamalarında, bölme işleminin hassasiyetini kaybetmemesi için, ('in 2^96) ile çarpılmasına eşdeğer olan sola kaydırma işlemi kullanılabilir.

Örneğin:

katılık numerator1 = FullMath.mulDiv(likidite << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96);

Bu, normal ticaretin taşmasını önlerken hassasiyetin korunmasını sağlar. Teorik olarak hala çok küçük bir hassasiyet kaybı olsa da, kabul edilebilir bir seviyededir.

Paylaşım Yöntemi ile Kazanç Hesaplama

Her işlemde tüm LP'lere işlem ücretlerini kaydetmekten kaçınmak için, Paylaşım yöntemi kullanılabilir.

Sadece toplam işlem ücretini ve her bir likiditeye tahsis edilmesi gereken işlem ücretini kaydetmeniz yeterlidir. LP çekildiğinde, sahip olunan likiditeye göre çekilebilecek işlem ücreti hesaplanır, hisse senedi temettüsüne benzer.

Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları

Zincir Dışı Verilerin Makul Kullanımı

Tüm bilgilerin zincire eklenmesi veya zincirden alınması gerekmez. İşlem havuzu listesi, temel bilgiler gibi veriler normal bir veritabanında saklanabilir, düzenli olarak senkronize edilebilir.

Bazı gelişmiş RPC arayüzleri ayrıca performansı ve verimliliği artırabilecek önbellek optimizasyonu ile veri alma yöntemleri sunmaktadır.

Sözleşme Bölme ve Yeniden Kullanma

Büyük projeler, birden fazla gerçek dağıtım sözleşmesine bölünebilir veya miras alarak birden fazla sözleşme halinde bakım yapılabilir.

Aynı zamanda, ERC721 gibi mevcut standart sözleşmelerin yeniden kullanılabilirliği, geliştirme verimliliğini artırır. Örneğin:

katılık sözleşme NonfungiblePositionManager'dır INonfungiblePositionManager, PeripheryImmutableState, PoolInitializer, Likidite Yönetimi, PeripheryValidation, Multicall, ERC721Permit, PeripheryPayments, NFTAçıklayıcı { // ... }

Başarılı projelerin kod uygulamalarını öğrenmek ve kendi başınıza geliştirmeyi denemek, merkeziyetsiz borsalar hakkında daha derin bir anlayış kazanmanıza yardımcı olabilir. Umarım bu küçük ipuçları, akıllı sözleşme geliştirmenize yardımcı olur!

Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları

UNI-12.04%
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.
  • Reward
  • 5
  • Repost
  • Share
Comment
0/400
LayerZeroEnjoyervip
· 08-01 16:48
BTC'ler bitti, hâlâ defi araştırıyorlar.
View OriginalReply0
degenwhisperervip
· 08-01 00:26
Kes doğrudan uni'nin kodunu kopyala
View OriginalReply0
GateUser-40edb63bvip
· 07-29 21:17
Bu akıllı sözleşmeler kancası ne kadar gelişmiş!
View OriginalReply0
PoetryOnChainvip
· 07-29 21:03
Aslında uni'yi kopyalamak işte...
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate App
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)