Uniswap kod analizi: 7 pratik kontrat geliştirme ipucu

robot
Abstract generation in progress

Sözleşme Geliştirmenin Pratik İpuçları: Uniswap Kodundan Öğrenilen Deneyimler

Son zamanlarda merkeziyetsiz bir borsa için bir öğretici geliştirirken, Uniswap V3'ün kod uygulamalarını inceledim ve birçok ilginç bilgi edindim. Defi sözleşmeleri geliştirmeyi ilk kez deneyen bir geliştirici olarak, bu teknikler sözleşme geliştirmeyi öğrenmek isteyen acemiler için çok faydalı olacaktır.

Şimdi bu pratik ipuçlarına bakalım, bazıları gerçekten de harika beceriler olarak adlandırılabilir.

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

Tahmin Sözleşmesi Dağıtım Adresi

Genel olarak, dağıtım sözleşmesi ile elde edilen adresler rastgele görünmektedir, çünkü nonce ile ilgilidir ve tahmin edilmesi zordur. Ancak bazı senaryolarda, işlem çiftleri ve ilgili bilgiler aracılığıyla sözleşme adresini çıkarmamız gerekir. Bu, işlem yetkilerini belirlemede veya havuz adreslerini elde etmede faydalıdır.

Uniswap, sözleşmeyi oluşturmak için CREATE2 yöntemini kullanarak, oluşturulan sözleşme adresinin tahmin edilebilir olmasını sağlamak için salt parametresi eklemiştir. Yeni adresin oluşturulma mantığı şöyledir: hash("0xFF", oluşturucu adresi, salt, initcode). Bu yöntem, sözleşme adresinin tahmin edilebilir olmasını sağlayarak sonraki işlemleri kolaylaştırır.

![Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme Küçük İpuçları](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

Geri Çağırma Fonksiyonlarının Akıllıca Kullanımı

Solidity'de sözleşmeler birbirlerini çağırabilir. Yaygın bir senaryo, A yönteminin B'yi çağırmasıdır; B, çağrıldığı yöntem içinde A'yı geri çağırır. Bu, bazı durumlarda çok kullanışlıdır.

Uniswap'ı örnek alırsak, UniswapV3Pool sözleşmesinin swap yöntemini kullanarak işlem yapıldığında, swapCallback'i geri çağırır ve bu işlem için gereken Token'ı aktarır. Çağıran taraf, geri çağırma işleminde gerekli Token'ı UniswapV3Pool'a aktarmalıdır. Bu tasarım, swap yönteminin tam olarak yürütülmesini ve güvenliğini sağlar, karmaşık değişken kayıtlarına gerek kalmaz.

Hata iletimi kullanarak, try catch ile işlem tahmini gerçekleştirmek

Uniswap'ın Quoter sözleşmesinde, UniswapV3Pool'un swap yöntemini çalıştırmak için try catch kullanılır. Bu, swap yöntemini simüle ederek işlem için gereken Token'ı tahmin etmek içindir. Tahmin sırasında gerçek bir Token değişimi gerçekleşmeyeceğinden hata verecektir. Uniswap, işlem geri çağırma işlevinde özel bir hata fırlatarak, ardından bu hatayı yakalayıp gerekli bilgileri çıkarır.

Bu yöntem görünüşte kurnaz, ancak çok kullanışlı. Tahmini ticaret talebi için takas yöntemini değiştirmekten kaçınıyor, mantığı daha basit hale getiriyor.

![Web3 Yeni Başlayanlar Serisi: Uniswap Kodlarından Öğrendiğim Akıllı Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Büyük sayılarla hassasiyet sorununu çözme

Uniswap kodunda, mevcut fiyat ve likiditeye göre değişim token'larını hesaplamak gibi birçok hesaplama mantığı bulunmaktadır. Bölme işleminin hassasiyet kaybına yol açmasını önlemek için, Uniswap sıklıkla "<< FixedPoint96.RESOLUTION" işlemini kullanır, yani 96 bit sola kaydırma, 2^96 ile çarpmaya eşdeğerdir. Normal işlem sırasında taşma olmadan, önce sola kaydırma işlemi yapıldıktan sonra bölme işlemi gerçekleştirilir ve genellikle uint256 ile ) hesaplanarak ( hassasiyeti garanti edilir.

Teorik olarak hala küçük bir hassasiyet kaybı olmasına rağmen, bu düzeydeki hata genellikle kabul edilebilir.

Share Yöntemiyle Kazanç Hesaplama

Uniswap, LP) likidite sağlayıcısı ('in işlem ücretlerini kaydetmesi gerekmektedir. Her işlemde her bir LP için işlem ücretlerini kaydetmenin yüksek miktarda Gas tüketimine neden olmaması için Uniswap, zekice bir yöntem kullanmıştır.

Position yapısında feeGrowthInside0LastX128 ve feeGrowthInside1LastX128 tanımlanmıştır, her pozisyonun son komisyon çekiminde her bir likiditenin alması gereken komisyonu kaydeder. Böylece toplam komisyon ve her bir likiditenin alması gereken komisyonu kaydetmek yeterlidir, LP çekim yaparken sahip olduğu likiditeye göre çekilebilecek komisyonu hesaplayabilir. Bu, hisse senedi temettü mekanizmasına benzer, çekim sırasında yalnızca şirketin geçmiş başına kazancını ve son çekimdeki kazancı bilmek yeterlidir.

![Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

Bilgi Edinme Yöntemlerini Akıllıca Seçin

Zincir üzerindeki depolama görece pahalıdır, bu nedenle tüm bilgilerin zincire eklenmesi veya zincirden alınması gerekmez. Örneğin, Uniswap'ın ön yüz web sitesi tarafından çağrılan birçok arayüz, geleneksel Web2 arayüzleridir.

İşlem havuzu listesi, işlem havuzu bilgileri vb. normal bir veritabanında saklanabilir, bazı verilerin belirli aralıklarla zincir üzerinden senkronize edilmesi gerekebilir, ancak ilgili verilere erişmek için zincir veya düğüm hizmetlerinin RPC arayüzüne anlık çağrı yapılması gerekmez.

Bazı blockchain RPC sağlayıcıları, belirli verilere daha hızlı ve daha ekonomik bir şekilde erişim sağlamak için gelişmiş arayüzler sunar. Bu arayüzler genellikle performansı ve verimliliği artırmak için önbelleği kullanır.

Elbette, ana işlemler hala zincir üzerinde gerçekleştirilmelidir.

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

Bir proje birden fazla gerçek dağıtım sözleşmesi içerebilir. Gerçek dağıtımda yalnızca bir sözleşme olsa bile, sözleşmeyi miras alma yoluyla birden fazla parçaya ayırarak bakımını yapabiliriz.

Örneğin, Uniswap'ın NonfungiblePositionManager sözleşmesi birden fazla sözleşmeden miras alıyor. ERC721Permit sözleşmesini uygularken, doğrudan @openzeppelin/contracts/token/ERC721/ERC721.sol sözleşmesi kullanıldı. Bu, NFT yöntemiyle pozisyon yönetimini kolaylaştırmanın yanı sıra mevcut standart sözleşmelerden yararlanarak geliştirme verimliliğini artırır.

Özet

Basit bir merkeziyetsiz borsa geliştirme pratiği, Uniswap'ın kod uygulamasını daha derinlemesine anlamanıza yardımcı olacak ve gerçek projelerdeki daha fazla bilgi edinmenizi sağlayacaktır. Bu tekniklerin, akıllı sözleşme geliştirmeyi öğrenmek isteyen yeni başlayanlar için çok faydalı olacağına inanıyorum.

![Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Akıllı Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(

UNI3.89%
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
  • 7
  • Share
Comment
0/400
DataPickledFishvip
· 21h ago
Yine kodları inceliyorum, kafam ağrıyor!
View OriginalReply0
PermabullPetevip
· 21h ago
Açıkça kaybetmekteyim, bunları anlamıyorum, sadece kaybetmeyi biliyorum.
View OriginalReply0
MEVSandwichVictimvip
· 22h ago
Bu CREATE2 gerçekten oldukça gelişmiş, hakikaten uni'ye yakışır.
View OriginalReply0
MrRightClickvip
· 22h ago
Hey create2 gerçekten harika!
View OriginalReply0
PanicSeller69vip
· 22h ago
Kod köpeği bile ağladı.
View OriginalReply0
BearMarketBardvip
· 22h ago
老干爹 gerçekten boğa.
View OriginalReply0
Deconstructionistvip
· 22h ago
Yine üretim kodunu araştırıyorsun, öğrenemiyorum artık.
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)