Uniswap kontrat geliştirme için 7 büyük ipucu: Öngörülebilir adreslerden on-chain ve off-chain dengeye

robot
Abstract generation in progress

Sözleşme geliştirme ipuçları: Uniswap kodundan öğrenilen deneyimler

Son zamanlarda merkeziyetsiz bir borsa için bir kılavuz yazarken, Uniswap V3'ün uygulamasını inceledim ve pek çok ilginç bilgi öğrendim. Defi sözleşme geliştirmeye yeni başlayan biri olarak, bu ipuçları benim için çok ilham verici oldu; akıllı sözleşme geliştirmek isteyen diğer arkadaşlara da yardımcı 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

Yaygın olarak dağıtılan sözleşme adresleri, nonce ile ilişkili olduğundan rastgele gibi görünmektedir. Ancak belirli senaryolar altında, işlem çiftleri bilgilerini kullanarak sözleşme adresini çıkarmamız gerekiyor, örneğin işlem izinlerini belirlemek veya havuz adresini almak için.

Uniswap, CREATE2 kullanarak sözleşme oluştururken, bir salt parametresi ekledi. Böylece üretilen sözleşme adresi tahmin edilebilir hale geliyor ve "yeni adres = hash('0xFF', oluşturucu adresi, salt, initcode)" mantığına dayanıyor.

Geri Çağırma Fonksiyonlarını Uygun Şekilde Kullanma

Solidity'de, sözleşmeler birbirlerini çağırabilir. Bazen A sözleşmesi B sözleşmesinin yöntemini çağırır, B daha sonra A'nın yöntemini geri arar; bu bazı senaryolarda çok faydalıdır.

Örneğin, Uniswap'ın işlem sürecinde, UniswapV3Pool sözleşmesinin swap yöntemine çağrı yapıldığında, swapCallback geri çağrılır ve gerekli Token miktarını iletir. Çağrıyı yapan taraf, geri çağrıda gerekli Token'ı aktarmalıdır; bu, işlem mantığının bütünlüğünü ve güvenliğini sağlamak için gereklidir.

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

Hata ile bilgi iletimi, işlem tahmini için try catch kullanarak gerçekleştirin

Uniswap'ın Quoter sözleşmesinde, UniswapV3Pool'un swap yöntemini çalıştırmak için try catch ile sarmalanmıştır. Bu, işlem tahmininde gereken Token'ı simüle etmek içindir, ancak tahmin sırasında Token'lar gerçekten değiştirilmeyeceği için hata verecektir.

Uniswap, işlem geri çağırma fonksiyonunda özel hatalar fırlatarak ve sonra bu hataları yakalayıp bilgileri çözümleyerek çalışır. Bu yöntem görünüşte hileli olsa da, oldukça pratiktir; swap yöntemini tahmini talep için özel olarak dönüştürmeye gerek yoktur.

Büyük Sayı İşleme Hassasiyeti Sorunu

Uniswap kodunda, mevcut fiyat ve likiditeye göre değişim yapılacak Token miktarını hesaplamak gibi çok sayıda hesaplama yer alıyor. Bölme işleminin hassasiyetini kaybetmemek için, hesaplama sürecinde sıkça "<< FixedPoint96.RESOLUTION" işlemi kullanılır, bu da 2^96 ile çarpma anlamına gelir.

Bu yöntem, normal işlemlerin aşırı yüklenmeden korunmasını sağlarken (genellikle uint256 ile hesaplanır) aynı zamanda hassasiyeti de garanti eder. Teorik olarak en küçük birimlerde hâlâ hassasiyet kaybı yaşanabilir, ancak bu kabul edilebilir bir durumdur.

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

Share Yöntemiyle Kazanç Hesaplama

Uniswap'ta likidite sağlayıcılarının (LP) ücret kazançlarının kaydedilmesi gerekir. Her işlemde her LP için ücret kaydetmekten (büyük miktarda Gas harcamak) kaçınmak için Uniswap, zekice bir yöntem kullanmıştır.

Position yapısında feeGrowthInside0LastX128 ve feeGrowthInside1LastX128 tanımlanmıştır, her pozisyonun son kez komisyon ücreti çekildiğinde her birimlik likiditenin alması gereken komisyon ücretini kaydeder. Böylece sadece toplam komisyon ücreti ve her birimlik likidite için dağıtım miktarını kaydetmek yeterlidir, LP çekim yaptığında sahip olduğu likiditeye göre çekilebilir komisyon ücreti hesaplanır.

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

Zincir Üstü ve Zincir Dışı Bilgi Elde Etme Dengesinin Sağlanması

Blockchain üzerinde depolama göreceli olarak pahalıdır ve tüm bilgilerin zincir üzerinde olması veya zincirden alınması gerekmez. Örneğin, Uniswap'in ön yüzü tarafından çağrılan birçok arayüz geleneksel Web2 arayüzleridir.

İşlem havuzları listesi, işlem havuz bilgileri vb. sıradan bir veritabanında saklanabilir ve düzenli olarak zincirden senkronize edilebilir. İlgili verilere erişmek için zinciri veya düğüm hizmetinin RPC arayüzünü gerçek zamanlı olarak çağırmaya gerek yoktur.

Bazı blok zinciri RPC sağlayıcıları, verileri daha hızlı ve ucuz bir şekilde almak için gelişmiş arayüzler sunmaktadır. Bu arayüzler genellikle performansı ve verimliliği artırmak için önbellekleme kullanır.

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

Bir proje birden fazla gerçek konuşlandırılmış sözleşme içerebilir. Sadece bir sözleşme konuşlandırılsa bile, kod miras alarak birden fazla sözleşmeye bölünebilir.

Örneğin, Uniswap'ın NonfungiblePositionManager sözleşmesi birden fazla sözleşmeden miras alır. ERC721Permit sözleşmesi doğrudan OpenZeppelin'in standart ERC721 sözleşmesini kullanarak, hem NFT ile pozisyon yönetimini kolaylaştırır hem de geliştirme verimliliğini artırır.

Sonuç

Uygulama, en iyi öğrenme yöntemidir. Basit bir merkeziyetsiz borsa oluşturmayı deneyerek, Uniswap'ın kod uygulamasını daha derinlemesine anlayabilir ve gerçek projelerdeki daha fazla bilgi edinebilirsiniz. Bu deneyimlerin, Web3 ve Defi proje geliştirme konusunda istekli arkadaşlara yardımcı olmasını umuyorum.

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

UNI1.07%
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
  • 6
  • Share
Comment
0/400
StableNomadvip
· 21h ago
istatistiksel olarak konuşursak, uniswap hala en temiz kod tabanına sahip...sadece söylüyorum
View OriginalReply0
StablecoinAnxietyvip
· 21h ago
Adres bu kadar kritik bir şekilde tahmin edilebilir!
View OriginalReply0
PumpStrategistvip
· 21h ago
Tsk tsk, DEX de Oracle Makine oyunları oynuyor, büyük fonların oynanabilirliği bir kez daha arttı.
View OriginalReply0
ZkProofPuddingvip
· 21h ago
Pro'nun sözleşmesini çok iyi anlıyor.
View OriginalReply0
ILCollectorvip
· 21h ago
Uni gibi Rug Pull yapmayı öğrenme.
View OriginalReply0
FudVaccinatorvip
· 21h ago
Güvenilir değerli öngörüler oldu.
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)