Uniswap kod analizi: 7 akıllı sözleşmeler geliştirme ipucu

robot
Abstract generation in progress

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

Son zamanlarda merkeziyetsiz borsa geliştirme kılavuzu yazarken, Uniswap V3'ün uygulamasına başvurdum ve birçok ilginç bilgi edindim. Defi sözleşmeleri geliştirmeyi ilk kez deneyen bir acemi olarak, bu teknikler sözleşme geliştirmeyi öğrenmek isteyen diğer yeni başlayanlar için oldukça faydalı olmalı.

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şmelerin adresleri rastgele gibi görünür ve tahmin edilmesi zordur. Ancak bazı durumlarda, işlem eşleri ile ilgili bilgileri kullanarak sözleşme adresini çıkarmamız gerekir, örneğin işlem yetkilerini belirlemek veya havuz adresini almak için.

Uniswap, sözleşme oluşturmak için CREATE2 yöntemini benimsemiştir ve adresin tahmin edilebilir olmasını sağlamak için salt parametresini eklemiştir. Yeni adres oluşturma mantığı: hash("0xFF", oluşturucu adresi, salt, initcode). Bu yöntem, sözleşme adreslerinin tahmin edilebilir olmasını sağlayarak oldukça kullanışlı hale getirir.

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

Geri Çağırma Fonksiyonlarını Akıllıca Kullanma

Solidity'de sözleşmeler birbirlerini çağırabilir. Bazı senaryolarda A, B'nin yöntemini çağırır, B çağrılan yöntemde A'yı geri arar; bu model çok faydalıdır.

Uniswap'ın swap işlemi geri çağırma mekanizması kullanır. UniswapV3Pool'un swap yöntemi, gerçek ihtiyaç duyulan Token miktarını ileten swapCallback'ı geri çağırır. Çağrı yapan taraf, geri çağırmada Token'ı aktarmalıdır, bu da swap yönteminin tam ve güvenli bir şekilde gerçekleştirilmesini sağlar, karmaşık değişken kayıtlarına gerek kalmadan.

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

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

Uniswap, geri çağırma fonksiyonunda özel bir hata fırlatarak, ardından bu hatayı yakalayıp gerekli bilgileri çıkartarak çalışır. Bu yöntem, oldukça pratik bir çözüm gibi görünse de, swap yöntemini tahmin edilen talebe özel olarak yeniden yapılandırmaya gerek kalmadan daha sade bir mantık sunar.

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

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

Uniswap kodunda, mevcut fiyat ve likiditeye göre değişim Token miktarını hesaplamak gibi birçok hesaplama bulunmaktadır. Bölme işlemi sırasında hassasiyet kaybını önlemek için, hesaplama sürecinde genellikle "<< FixedPoint96.RESOLUTION" işlemi kullanılır, yani 96 bit sola kaydırma, 2^96 ile çarpmaya eşdeğerdir.

Sol tarafa kaydırdıktan sonra bölme işlemi yaparak, normal ticarette taşma olmadan hassasiyeti garanti edebilirsiniz. Teorik olarak hala küçük bir hassasiyet kaybı olmasına rağmen, kabul edilebilir seviyededir.

Share Yöntemi ile Kazanç Hesaplama

Uniswap, LP( likidite sağlayıcısı )'in işlem ücretleri kazancını kaydetmelidir. Açıkça, her işlemde her LP için işlem ücretlerini kaydetmek mümkün değildir, bu büyük miktarda Gas tüketir.

Çözüm, her pozisyonun son ücret çekiminde her birim likiditenin alması gereken ücreti gösteren feeGrowthInside0LastX128 ve feeGrowthInside1LastX128'yi Position yapısında kaydetmektir.

Toplam işlem ücretini ve her birim likidite dağıtımı için alınan ücreti kaydetmek yeterlidir, LP çekiminde sahip olunan likiditeye göre çekilebilecek ücret hesaplanabilir. Hisse senedi tutmaya benzer, kazanç çekilirken yalnızca geçmiş hisse başına kazancı ve son çekim zamanındaki kazancı bilmek yeterlidir.

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

Tüm bilgilerin zincir üzerinden alınması gerekmez

Blockchain üzerindeki depolama nispeten pahalıdır, bu yüzden tüm bilgilerin zincir üzerinde tutulması 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.

Ticaret havuzları listesi, bilgileri vb. sıradan bir veritabanında saklanabilir, bazıları düzenli olarak zincirden senkronize edilmesi gerekir, ancak verileri almak için zincir veya düğüm RPC arayüzünü gerçek zamanlı olarak çağırmaya gerek yoktur.

Birçok blockchain RPC sağlayıcısı, belirli verilere daha hızlı ve ucuz bir şekilde erişim sağlamak için gelişmiş arayüzler de sunmaktadır. Bu arayüzler genellikle performansı ve verimliliği artırmak için önbellek kullanır.

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

Sözleşme Bölme ve Mevcut Standart Sözleşmeleri Kullanmayı Öğrenin

Bir proje birden fazla gerçek dağıtılmış sözleşme içerebilir. Sadece bir sözleşme dağıtılsa bile, kod miras alarak birden fazla sözleşmeye ayrılarak korunabilir.

Uniswap'ın NonfungiblePositionManager sözleşmesi, birden fazla sözleşmeyi miras almıştır. ERC721Permit sözleşmesi, OpenZeppelin'in ERC721 uygulamasını doğrudan kullanmaktadır; bu, NFT ile pozisyon yönetimini kolaylaştırmakta ve geliştirme verimliliğini artırmaktadır.

Özet

Kendi ellerinle basit bir merkeziyetsiz borsa geliştirmek, Uniswap'ın uygulanışını daha derinlemesine anlamanı sağlar ve gerçek projelerdeki daha fazla bilgi edinmeni sağlar. Teorik öğrenim elbette önemlidir, ancak pratik deneyim daha değerlidir. Umarım bu küçük ipuçları, akıllı sözleşme geliştirme yolunda sana yardımcı olur.

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

UNI-2.14%
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
GasWastervip
· 07-16 11:49
Sözleşmeleri öğrenen herkes bunu görmeli.
View OriginalReply0
MissedAirdropAgainvip
· 07-16 07:39
Sözleşmeyi öğrenmek için geç kaldım...
View OriginalReply0
YieldWhisperervip
· 07-14 20:20
2020'de dyydx'te bu tam deseni gördüm... aslında yeni bir şey değil
View OriginalReply0
MEVictimvip
· 07-14 20:18
Bu kırık bilgileri kontrol etmek gerçekten işe yarıyor mu?
View OriginalReply0
VitaliksTwinvip
· 07-14 20:14
Bir şey var, oldukça gerçekçi.
View OriginalReply0
ForkLibertarianvip
· 07-14 20:13
Uniswap yine yeni bir şey mi deniyor?
View OriginalReply0
QuorumVotervip
· 07-14 20:00
Güzel yazılmış, öğrenme düzenlendi.
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)