Web3 Geliştiricilerin Bilmesi Gerekenler: Uniswap Sözleşmesinden Elde Edilen Değerli Deneyimler
Son zamanlarda, merkeziyetsiz bir borsa geliştirme kılavuzu yazarken Uniswap V3'ün kod uygulamasını derinlemesine inceledim ve oldukça fazla şey öğrendim. Defi akıllı sözleşme geliştirmeye yeni başlayan biri olarak, bu teknikler benim için kesinlikle aydınlatıcı oldu. Bu deneyimlerin, akıllı sözleşme geliştirmeye başlamak isteyen diğer arkadaşlar için de büyük faydası olacağına inanıyorum.
Tahmin Sözleşmesi Adresinin Püf Noktaları
Genellikle, bir sözleşme dağıtıldıktan sonra elde edilen adres rastgele gibi görünür ve tahmin edilmesi zordur. Ancak Uniswap'ta, işlem çiftleri ve ilgili bilgiler aracılığıyla sözleşme adresini türetebiliriz. Bu, işlem yetkilerini belirleme veya havuz adreslerini elde etme gibi durumlarda oldukça kullanışlıdır.
Uniswap, CREATE2 yöntemini kullanarak sözleşme oluşturur ve "salt" parametresini ekleyerek oluşturulan adresin tahmin edilebilir olmasını sağlar. Belirli adres oluşturma mantığı: yeni adres = hash("0xFF", oluşturucu adresi, salt, initcode).
Geri Çağırma Fonksiyonlarını Etkili Kullanma
Bazı senaryolarda, sözleşmeler arası karşılıklı çağrılar oldukça faydalıdır. Örneğin, A metodu B'yi çağırır, B çağrıldığı metodun içinde A'yı geri arar.
Uniswap'ta, UniswapV3Pool sözleşmesinin swap yöntemini kullanarak işlem yapıldığında, swapCallback geri çağrılır ve hesaplanan gerçek gerekli Token miktarını iletir. Çağıran taraf, geri çağırmada gerekli Token'ları UniswapV3Pool'a aktarmalıdır. Bu tasarım, swap yönteminin güvenliğini ve mantıksal bütünlüğünü sağlar ve karmaşık değişken kaydı gerektirmez.
Anormal iletim bilgisi, try-catch ile işlem tahmini
Uniswap'ın Quoter sözleşmesinde, UniswapV3Pool'ün swap yöntemini simüle etmek için try-catch kullanılır. Bu, takas işlemi sırasında gereken Token'ı tahmin etmek içindir. Tahmin sırasında Token'lar gerçekten değiştirilmeyeceği için bir hata tetiklenir. Uniswap, işlem geri çağırma fonksiyonunda özel bir hata fırlatarak, ardından bu hatayı yakalayarak gereken bilgileri çıkarır.
Bu yöntem hileli gibi görünse de son derece pratiktir. İşlem talebini tahmin etmek için swap yöntemini özel olarak değiştirmeye gerek yoktur, mantık daha basittir.
Büyük sayı hesaplamaları ile hassasiyet sorununu çözme
Uniswap kodunda, mevcut fiyat ve likiditeye göre Token miktarını hesaplamak gibi birçok hesaplama mantığı bulunmaktadır. Bölme işleminin hassasiyet kaybına neden olmasını önlemek için, hesaplama sürecinde sıkça "<< FixedPoint96.RESOLUTION" işlemi kullanılmaktadır; bu, 96 bit sola kaydırma anlamına gelir ve 2^96 ile çarpmaya eşdeğerdir. Normal işlemlerde taşma olmaması koşuluyla ( genellikle uint256 ile hesaplanır, bu yöntem hassasiyeti etkili bir şekilde garanti altına alır.
![Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Share mekanizması ile kazanç hesaplama
Uniswap, LP) likidite sağlayıcısı ('in işlem ücretleri kazancını kaydetmelidir. Açıkça, her işlemde her bir LP için ayrı ayrı işlem ücretlerini kaydetmek mümkün değildir, bu da büyük miktarda Gas tüketir.
Uniswap'ın çözümü, Position yapısında feeGrowthInside0LastX128 ve feeGrowthInside1LastX128 tanımlamaktır; bu, her pozisyonun son ücret çekiminde her birim likiditenin alması gereken ücreti kaydeder.
Bu yöntem yalnızca toplam işlem ücretini ve her birim likiditenin alacağı işlem ücretini kaydetmeyi gerektirir. LP çekim yaptığında, sahip olduğu likiditeye göre çekilebilecek işlem ücreti hesaplanabilir. Bu, hisse senedi sahiplerinin şirketin geçmiş hisse başına kazancı ve son çekim zamanındaki kazancı dikkate alarak mevcut çekilebilecek kazancı hesaplamasına benzer.
![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(
Zincir Üzerindeki Bilgi Elde Etmenin Dengesi
Blockchain üzerindeki depolama nispeten pahalıdır ve tüm bilgilerin zincire eklenmesi veya zincirden alınması gerekmez. Örneğin, Uniswap ön yüz web sitesinin çağırdığı birçok arayüz, geleneksel Web2 arayüzleridir.
Ticaret havuzu listesi, ticaret havuzu bilgileri vb. normal bir veritabanında saklanabilir, bazıları zincirden düzenli olarak senkronize edilmesi gerekebilir. İlgili verilere erişmek için zincir veya düğüm hizmetlerinin RPC arayüzlerini gerçek zamanlı olarak çağırmaya gerek yoktur.
Elbette, ana işlemler zincir üzerinde gerçekleştirilmelidir. Şu anda birçok blockchain RPC sağlayıcısı, belirli verilere daha hızlı ve daha ekonomik bir şekilde erişim sağlayan gelişmiş arayüzler sunmaktadır.
Sözleşme Bölme ve Standart Sözleşme Yeniden 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, kodu birden fazla sözleşmeye ayırmak için miras alma yoluyla bakımını yapabiliriz.
Örneğin, Uniswap'ın NonfungiblePositionManager sözleşmesi birden fazla sözleşmeyi devralmıştır. Ayrıca, ERC721Permit sözleşmesi doğrudan OpenZeppelin'in ERC721 standart sözleşmesini kullanmaktadır. Bu, pozisyonları NFT yöntemiyle yönetmeyi kolaylaştırmakla kalmaz, aynı zamanda mevcut standart sözleşmeleri kullanarak geliştirme verimliliğini artırır.
Sonuç
Pratik yaparak gerçek bilgiye ulaşılır. Basit bir merkeziyetsiz borsa geliştirme sürecine bizzat katılmak, Uniswap'ın kod uygulamalarını daha derinlemesine anlamanıza yardımcı olurken aynı zamanda gerçek projelerdeki bilgi noktalarını öğrenmenizi sağlar. Web3 ve Defi projeleri geliştirme ile ilgileniyorsanız, ilgili pratik kursları incelemeyi düşünebilirsiniz; adım adım basit bir borsa oluşturabilirsiniz. Bu, öğreniminiz için büyük fayda sağlayacaktır.
![Web3 Yeni Başlangıç Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(
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.
6 Likes
Reward
6
4
Share
Comment
0/400
AirdropHunter9000
· 08-04 14:09
Defi sadece bir sıfıra düşme oyunu değil mi... anlayanlar anlar
View OriginalReply0
TokenAlchemist
· 08-04 14:09
lmao CREATE2'nin belirleyici adresler için ne olduğunu bilmemek... tbh ngmi
View OriginalReply0
RugpullAlertOfficer
· 08-04 14:08
Bu kesinlikle acemi için sıfırdan bir eğitim!
View OriginalReply0
AllTalkLongTrader
· 08-04 14:02
Kodu değil adrese bakmak, tembellik mi yoksa yükseklik mi?
Uniswap akıllı sözleşmelerini analiz eden 7 büyük ipucu: Web3 geliştiricileri için okunması gerekenler
Web3 Geliştiricilerin Bilmesi Gerekenler: Uniswap Sözleşmesinden Elde Edilen Değerli Deneyimler
Son zamanlarda, merkeziyetsiz bir borsa geliştirme kılavuzu yazarken Uniswap V3'ün kod uygulamasını derinlemesine inceledim ve oldukça fazla şey öğrendim. Defi akıllı sözleşme geliştirmeye yeni başlayan biri olarak, bu teknikler benim için kesinlikle aydınlatıcı oldu. Bu deneyimlerin, akıllı sözleşme geliştirmeye başlamak isteyen diğer arkadaşlar için de büyük faydası olacağına inanıyorum.
Tahmin Sözleşmesi Adresinin Püf Noktaları
Genellikle, bir sözleşme dağıtıldıktan sonra elde edilen adres rastgele gibi görünür ve tahmin edilmesi zordur. Ancak Uniswap'ta, işlem çiftleri ve ilgili bilgiler aracılığıyla sözleşme adresini türetebiliriz. Bu, işlem yetkilerini belirleme veya havuz adreslerini elde etme gibi durumlarda oldukça kullanışlıdır.
Uniswap, CREATE2 yöntemini kullanarak sözleşme oluşturur ve "salt" parametresini ekleyerek oluşturulan adresin tahmin edilebilir olmasını sağlar. Belirli adres oluşturma mantığı: yeni adres = hash("0xFF", oluşturucu adresi, salt, initcode).
Geri Çağırma Fonksiyonlarını Etkili Kullanma
Bazı senaryolarda, sözleşmeler arası karşılıklı çağrılar oldukça faydalıdır. Örneğin, A metodu B'yi çağırır, B çağrıldığı metodun içinde A'yı geri arar.
Uniswap'ta, UniswapV3Pool sözleşmesinin swap yöntemini kullanarak işlem yapıldığında, swapCallback geri çağrılır ve hesaplanan gerçek gerekli Token miktarını iletir. Çağıran taraf, geri çağırmada gerekli Token'ları UniswapV3Pool'a aktarmalıdır. Bu tasarım, swap yönteminin güvenliğini ve mantıksal bütünlüğünü sağlar ve karmaşık değişken kaydı gerektirmez.
Anormal iletim bilgisi, try-catch ile işlem tahmini
Uniswap'ın Quoter sözleşmesinde, UniswapV3Pool'ün swap yöntemini simüle etmek için try-catch kullanılır. Bu, takas işlemi sırasında gereken Token'ı tahmin etmek içindir. Tahmin sırasında Token'lar gerçekten değiştirilmeyeceği için bir hata tetiklenir. Uniswap, işlem geri çağırma fonksiyonunda özel bir hata fırlatarak, ardından bu hatayı yakalayarak gereken bilgileri çıkarır.
Bu yöntem hileli gibi görünse de son derece pratiktir. İşlem talebini tahmin etmek için swap yöntemini özel olarak değiştirmeye gerek yoktur, mantık daha basittir.
Büyük sayı hesaplamaları ile hassasiyet sorununu çözme
Uniswap kodunda, mevcut fiyat ve likiditeye göre Token miktarını hesaplamak gibi birçok hesaplama mantığı bulunmaktadır. Bölme işleminin hassasiyet kaybına neden olmasını önlemek için, hesaplama sürecinde sıkça "<< FixedPoint96.RESOLUTION" işlemi kullanılmaktadır; bu, 96 bit sola kaydırma anlamına gelir ve 2^96 ile çarpmaya eşdeğerdir. Normal işlemlerde taşma olmaması koşuluyla ( genellikle uint256 ile hesaplanır, bu yöntem hassasiyeti etkili bir şekilde garanti altına alır.
![Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Share mekanizması ile kazanç hesaplama
Uniswap, LP) likidite sağlayıcısı ('in işlem ücretleri kazancını kaydetmelidir. Açıkça, her işlemde her bir LP için ayrı ayrı işlem ücretlerini kaydetmek mümkün değildir, bu da büyük miktarda Gas tüketir.
Uniswap'ın çözümü, Position yapısında feeGrowthInside0LastX128 ve feeGrowthInside1LastX128 tanımlamaktır; bu, her pozisyonun son ücret çekiminde her birim likiditenin alması gereken ücreti kaydeder.
Bu yöntem yalnızca toplam işlem ücretini ve her birim likiditenin alacağı işlem ücretini kaydetmeyi gerektirir. LP çekim yaptığında, sahip olduğu likiditeye göre çekilebilecek işlem ücreti hesaplanabilir. Bu, hisse senedi sahiplerinin şirketin geçmiş hisse başına kazancı ve son çekim zamanındaki kazancı dikkate alarak mevcut çekilebilecek kazancı hesaplamasına benzer.
![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(
Zincir Üzerindeki Bilgi Elde Etmenin Dengesi
Blockchain üzerindeki depolama nispeten pahalıdır ve tüm bilgilerin zincire eklenmesi veya zincirden alınması gerekmez. Örneğin, Uniswap ön yüz web sitesinin çağırdığı birçok arayüz, geleneksel Web2 arayüzleridir.
Ticaret havuzu listesi, ticaret havuzu bilgileri vb. normal bir veritabanında saklanabilir, bazıları zincirden düzenli olarak senkronize edilmesi gerekebilir. İlgili verilere erişmek için zincir veya düğüm hizmetlerinin RPC arayüzlerini gerçek zamanlı olarak çağırmaya gerek yoktur.
Elbette, ana işlemler zincir üzerinde gerçekleştirilmelidir. Şu anda birçok blockchain RPC sağlayıcısı, belirli verilere daha hızlı ve daha ekonomik bir şekilde erişim sağlayan gelişmiş arayüzler sunmaktadır.
Sözleşme Bölme ve Standart Sözleşme Yeniden 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, kodu birden fazla sözleşmeye ayırmak için miras alma yoluyla bakımını yapabiliriz.
Örneğin, Uniswap'ın NonfungiblePositionManager sözleşmesi birden fazla sözleşmeyi devralmıştır. Ayrıca, ERC721Permit sözleşmesi doğrudan OpenZeppelin'in ERC721 standart sözleşmesini kullanmaktadır. Bu, pozisyonları NFT yöntemiyle yönetmeyi kolaylaştırmakla kalmaz, aynı zamanda mevcut standart sözleşmeleri kullanarak geliştirme verimliliğini artırır.
Sonuç
Pratik yaparak gerçek bilgiye ulaşılır. Basit bir merkeziyetsiz borsa geliştirme sürecine bizzat katılmak, Uniswap'ın kod uygulamalarını daha derinlemesine anlamanıza yardımcı olurken aynı zamanda gerçek projelerdeki bilgi noktalarını öğrenmenizi sağlar. Web3 ve Defi projeleri geliştirme ile ilgileniyorsanız, ilgili pratik kursları incelemeyi düşünebilirsiniz; adım adım basit bir borsa oluşturabilirsiniz. Bu, öğreniminiz için büyük fayda sağlayacaktır.
![Web3 Yeni Başlangıç Serisi: Uniswap Kodundan Öğrendiğim Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(