Uniswap sözleşme geliştirme 7 büyük ipucu: Merkezi Olmayan Finans projelerinin verimliliğini ve güvenliğini artırma

robot
Abstract generation in progress

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

Son zamanlarda merkeziyetsiz borsa geliştirme kılavuzunu yazarken, Uniswap V3'ün kod uygulamasını araştırarak birçok sözleşme geliştirme tekniği öğrendim. Defi sözleşme geliştirmeye yeni başlayan biri olarak, bu küçük ipuçları benim için çok ilham verici oldu. Diğer sözleşme geliştirmeyi öğrenmek isteyen yeni başlayanlar için de faydalı olacağına inanıyorum.

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

Öngörülebilir Sözleşme Dağıtım Adresi

Genellikle dağıtılan sözleşmelerin elde edilen adresleri rastgele gibi görünür ve tahmin edilmesi zordur. Ancak bazı durumlarda, işlem çiftleri ve ilgili bilgiler aracılığıyla sözleşme adresini çıkarmamız gerekir; örneğin, işlem yetkilerini değerlendirmek veya havuz adresini almak gibi.

Uniswap, CREATE2 yöntemini kullanarak sözleşme oluşturur ve "salt" parametresini ekleyerek oluşturulan sözleşme adresinin tahmin edilebilir olmasını sağlar. Yeni adres oluşturma mantığı şudur: hash("0xFF", oluşturucu adresi, salt, initcode). Bu yöntem birçok durumda oldukça kullanışlıdır.

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

Geri çağırma fonksiyonlarını iyi kullanma

Solidity'de sözleşmeler birbirlerini çağırabilir. Bazen A, B'nin bir yöntemini çağırır, B de çağrılan yöntemde A'yı geri çağırır, bu bazı senaryolar için oldukça faydalıdır.

Örneğin, Uniswap'ın swap yönteminde, UniswapV3Pool sözleşmesi swapCallback'ı çağırır ve bu çağrıya işlem için gereken Token'ı iletir. Çağrıcı, callback içinde gerekli Token'ı UniswapV3Pool'a aktarmalıdır, swap yöntemini parçalamak yerine. Bu, swap yönteminin güvenliğini ve tam 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 çalıştırmak için try catch kullanılarak sarılır. Bu, takas simülasyonu yaparak işlem için gereken Token'ı tahmin etmek içindir. Tahmin sırasında Token'lar gerçek bir şekilde değiş tokuş edilmez, bu nedenle hata verir. Uniswap, geri çağırma fonksiyonunda özel bir hata fırlatarak, ardından bu hatayı yakalayarak gerekli bilgileri çözümler.

Bu yöntem hileli gibi görünse de oldukça pratiktir. Swap yöntemini tahmini işlem talebine göre değiştirmeye gerek yoktur, mantık daha basittir.

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

Büyük Sayılar Hassasiyet Sorununu Çözer

Uniswap kodu birçok hesaplama mantığı içerir, örneğin mevcut fiyat ve likiditeye göre takas edilen Token'ları hesaplamak. Bölme işleminin hassasiyetini kaybetmemesi için, hesaplama sürecinde genellikle "<< FixedPoint96.RESOLUTION" işlemi kullanılır, bu da 96 bit sola kaydırma anlamına gelir, yani 2^96 ile çarpmakla eşdeğerdir. Sola kaydırdıktan sonra yapılan bölme işlemi, normal işlemlerde taşma olmaması durumunda hassasiyeti garanti eder.

Teorik olarak hala küçük bir hassasiyet kaybı olsa da, artık kabul edilebilir.

Paylaşım Yöntemi ile Kazanç Hesaplama

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

Uniswap'ın Position yapısı, her pozisyonun son ücret tahsilatı sırasında her bir likidite sağlayıcısının alması gereken ücreti kaydeden feeGrowthInside0LastX128 ve feeGrowthInside1LastX128 içerir.

Sadece toplam işlem ücretini ve her bir likiditeye tahsis edilmesi gereken işlem ücretini kaydedin, LP çekiminde, sahip olunan likiditeye göre çekilebilecek işlem ücreti hesaplanır. Şirket hisselerine sahip olmaya benzer, kazanç çekiminde yalnızca tarihsel 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ı

Anahtar olmayan bilgilerin zincire eklenmesine gerek yoktur

Blok zinciri üzerindeki depolama görece pahalıdır ve tüm bilgilerin zincire alınması veya zincir üzerinden alınması gerekmez. Örneğin, Uniswap ön yüzünün çağırdığı birçok arayüz geleneksel Web2 arayüzleridir.

İşlem havuzu listesi, bilgileri vb. normal veritabanında saklanabilir, bazıları zincir üzerinde periyodik olarak senkronize edilmelidir. İlgili verilere erişmek için zincir veya düğüm hizmetlerinin RPC arayüzünü gerçek zamanlı olarak çağırmaya gerek yoktur.

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

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

Bir proje birden fazla gerçek dağıtım sözleşmesi içerebilir. Gerçek dağıtım yalnızca bir tane olsa bile, miras alarak birden fazla sözleşmeye bölünebilir.

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

Sonuç

Basit bir merkeziyetsiz borsa geliştirmek, Uniswap'ın kod uygulamasını daha derinlemesine anlamanızı sağlar ve gerçek projelerdeki daha fazla bilgi edinmenize yardımcı olur. Ne kadar çok makale okursanız okuyun, pratik yapmak her zaman daha iyidir; umarım bu deneyimler, sözleşme geliştirmek isteyen yeni başlayanlara yardımcı olur.

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

UNI0.66%
DEFI-1.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
  • 10
  • Repost
  • Share
Comment
0/400
GasGuzzlervip
· 07-18 21:18
Kendine gel, Çaylaklarla bu kadar derin oynamayın.
View OriginalReply0
LowCapGemHuntervip
· 07-17 14:17
Geliştirici deneyimli kullanıcılar için gerekli ipuçları.
View OriginalReply0
SmartMoneyWalletvip
· 07-15 22:24
On-chain işlemler gözümden kaçamaz.
View OriginalReply0
WalletDetectivevip
· 07-15 22:24
v3 bu kadar basit mi? İzledikten sonra hiçbir şey anlamadığımı fark ettim.
View OriginalReply0
gas_guzzlervip
· 07-15 22:21
Yine kendi yeteneğiyle Klip Kuponlar alıyor.
View OriginalReply0
AllInDaddyvip
· 07-15 21:55
V3'ün kodu gerçekten sert.
View OriginalReply0
SleepyValidatorvip
· 07-15 21:55
Bu kadar ayrıntılı konuşmak, kendi kaynağınızı döndürmekten daha iyi değil.
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)