Uniswap kodunun sırları: Defi Çaylaklarına yardımcı olacak 7 büyük sözleşme geliştirme ipucu

Uniswap kodundan öğrenilen akıllı sözleşme geliştirme ipuçları

Son zamanlarda merkeziyetsiz borsa geliştirme kılavuzu yazarken, Uniswap V3'ün kod uygulamasını inceledim ve birçok değerli bilgi edindim. Defi sözleşmesi geliştirmeyi ilk kez deneyen bir geliştirici olarak, bu ipuçları sözleşme geliştirmek isteyen yeni başlayanlar için çok faydalı olacak.

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

Tahmin Edilebilir Sözleşme Dağıtım Adresi

Genellikle dağıtılan sözleşmenin elde ettiği adres rastgele gibi görünmektedir, çünkü nonce ile ilgilidir. Ancak bazı durumlarda, işlem çiftleri ve ilgili bilgileri kullanarak sözleşme adresini çıkarmamız gerekebilir, örneğin işlem yetkisini belirlemek veya havuz adresini almak.

Uniswap, CREATE2 yöntemini kullanarak sözleşme oluşturur ve üretilen adresin tahmin edilebilir olmasını sağlamak için salt parametresini ekler. Yeni adresin hesaplama mantığı şudur: hash("0xFF", oluşturucu adresi, salt, initcode).

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

Geri Çağırma Fonksiyonlarının Uygun Kullanımı

Solidity'de sözleşmeler birbirlerini çağırabilir. Belirli senaryolarda, A'nın B'nin metodunu çağırması ve B'nin çağrılan metodunda A'yı geri araması oldukça faydalıdır.

Uniswap'ta, UniswapV3Pool sözleşmesinin swap metodunu kullanarak işlem yapıldığında, swapCallback geri çağrılır ve bu işlemde gerçekten gereken Token iletilir. Çağrıyı yapan taraf, geri çağırma sırasında gerekli Token'ı UniswapV3Pool'a aktarmalıdır, swap metodunu iki parçaya ayırmamalıdır. Bu, swap metodunun güvenliğini ve eksiksiz bir şekilde yürütülmesini sağlar, karmaşık değişken kayıtlarına gerek kalmadan.

Hata ile bilgi iletimi, işlem tahmini için try catch kullanımı

Uniswap'ın Quoter sözleşmesinde, UniswapV3Pool'un swap yöntemini try catch ile sarmalayarak çalıştırıyoruz. Bu, swap yönteminin işlem için gereken Token'ı tahmin etmesini simüle etmek içindir, ancak tahmin sırasında gerçek bir Token değişimi gerçekleşmeyecek, bu yüzden hata verecektir.

Uniswap, ticaret geri çağırma fonksiyonunda özel bir hata fırlatarak, ardından bu hatayı yakalayarak gerekli bilgileri hata mesajından çıkarır. Bu yöntem akıllıca görünüyor, ancak oldukça pratik; swap yöntemini tahmini ticaret talebi için yeniden yapılandırmak gerekmez ve mantık daha basittir.

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

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

Uniswap kodunda, mevcut fiyat ve likiditeye göre değişim token'larını hesaplamak gibi birçok hesaplama mantığı vardır. Bölme işleminin hassasiyet kaybını önlemek için, hesaplama sürecinde sık sık "<< FixedPoint96.RESOLUTION" işlemi kullanılır, yani 96 bit sola kaydırma, bu da 2^96 ile çarpmaya eşdeğerdir.

Sol tarafa kaydırma işlemi yapıldıktan sonra bölme işlemi gerçekleştirilebilir, bu da normal işlemler sırasında taşma olmadan hassasiyeti garanti eder. Teorik olarak en küçük birimlerde hassasiyet kaybı hala olabilir, ancak bu kabul edilebilir.

Share Yöntemi ile Kazanç Hesaplama

Uniswap, LP( likidite sağlayıcısı )'in işlem ücretlerini kaydetmesi gerekir. Her işlemde her bir LP için işlem ücretlerini kaydetmek için büyük miktarda Gas harcamak istemeyen Uniswap, zekice bir yöntem kullanmıştır.

Position yapısında feeGrowthInside0LastX128 ve feeGrowthInside1LastX128 bulunur, her pozisyonda son komisyon çekiminde her likiditenin alması gereken komisyonu kaydeder. Sadece toplam komisyon ve her likiditenin alması gereken komisyonu kaydetmek yeterlidir, LP çekim yaparken sahip olduğu likiditeye göre çekilebilecek komisyonu hesaplayabilir.

Web3 Yeni Başlayanlar Serisi: Uniswap Kodlarından Öğrendiğim Kontrat Geliştirme İpuçları

Zincir Üzerindeki Bilgi Elde Etme Stratejisi

Tüm bilgilerin zincirden alınması gerekmez. Zincir üzerinde depolama oldukça pahalıdır, birçok bilgi normal veritabanlarında depolanabilir ve düzenli olarak zincirden senkronize edilebilir.

Ticaret havuzu listesi, ticaret havuzu bilgileri vb. gibi veriler, gerçek zamanlı olarak zincir veya düğüm hizmetlerinin RPC arayüzlerini çağırmadan normal bir veritabanında saklanabilir. Elbette, ana işlemler hala zincir üzerinde gerçekleştirilir.

Sözleşme Bölme ve Standart Sözleşme Kullanımı

Bir proje birden fazla gerçek dağıtılmış sözleşme içerebilir. Gerçek dağıtımda yalnızca bir sözleşme olsa bile, kod miras alma yoluyla birden fazla sözleşmeye ayrılarak bakım yapılabilir.

Örneğin, Uniswap'ın NonfungiblePositionManager sözleşmesi birden fazla sözleşmeyi devralır. OpenZeppelin'in ERC721 sözleşmesini kullanarak, NFT ile pozisyonları yönetmek kolaylaşırken, geliştirme verimliliği de artar.

Sonuç

Pratik en iyi öğrenme yöntemidir. Basit bir merkeziyetsiz borsa uygulaması yapmayı denemek, Uniswap'ın kod uygulamasını derinlemesine anlamanıza ve gerçek projelerdeki daha fazla bilgi edinmenize yardımcı olur. Web3 ve Defi projeleri geliştirme ile ilgileniyorsanız, ilgili pratik kursları inceleyebilir ve basit bir borsa oluşturmayı adım adım tamamlayabilirsiniz.

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

UNI-5.64%
DEFI-4.45%
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
No comments
  • Pin
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)