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.
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.
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(
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.
9 Likes
Reward
9
7
Share
Comment
0/400
DataPickledFish
· 5h ago
Yine kodları inceliyorum, kafam ağrıyor!
View OriginalReply0
PermabullPete
· 5h ago
Açıkça kaybetmekteyim, bunları anlamıyorum, sadece kaybetmeyi biliyorum.
View OriginalReply0
MEVSandwichVictim
· 6h ago
Bu CREATE2 gerçekten oldukça gelişmiş, hakikaten uni'ye yakışır.
View OriginalReply0
MrRightClick
· 6h ago
Hey create2 gerçekten harika!
View OriginalReply0
PanicSeller69
· 6h ago
Kod köpeği bile ağladı.
View OriginalReply0
BearMarketBard
· 6h ago
老干爹 gerçekten boğa.
View OriginalReply0
Deconstructionist
· 6h ago
Yine üretim kodunu araştırıyorsun, öğrenemiyorum artık.
Uniswap kod analizi: 7 pratik kontrat geliştirme ipucu
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.
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.
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(