7 pratik ipucu, akıllı sözleşmeler geliştirmeyi öğrenmenize yardımcı olur

robot
Abstract generation in progress

Sözleşme geliştirmede ince teknikler

Son zamanlarda merkeziyetsiz borsa geliştirme sürecini araştırırken, bazı tanınmış projelerin kod uygulamalarını inceledim ve birçok ilginç bilgi edindim. Defi sözleşmesi geliştirmeye ilk kez girişen bir geliştirici olarak, bu küçük ipuçları sözleşme geliştirmeyi öğrenmek isteyen acemiler için oldukça faydalı.

Bu ince hilelere bir göz atalım, bazıları gerçekten de şaşırtıcı beceriler olarak adlandırılabilir.

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şmenin elde edilen adresi nonce ile ilgili olduğu için rastgele görünür. Ancak bazı durumlarda, işlem eşdeğer bilgilerini kullanarak sözleşme adresini çıkarmamız gerekir, örneğin işlem yetkisini belirlemek veya havuz adresini almak gibi.

Bir yöntem, CREATE2 kullanarak sözleşme oluşturmak ve salt parametresini eklemektir: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); Bu şekilde oluşturulan sözleşme adresi tahmin edilebilir, oluşturma mantığı yeni adres = hash("0xFF", oluşturucu adres, salt, initcode).

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

Geri çağırma fonksiyonunu ustaca kullanma

Solidity'de sözleşmeler birbirlerini çağırabilir. Bir model A'nın B'nin yöntemini çağırmasıdır, B çağrılan yöntemde A'yı geri çağırır, bu bazı senaryolarda çok kullanışlıdır.

Örneğin, UniswapV3Pool sözleşmesinin swap metodunu kullanarak işlem yaparken, swapCallback'i geri çağırır ve hesaplanan bu işlem için gerçekten gerekli Token'i iletir. Çağrıcı, geri çağırma sırasında gerekli Token'i UniswapV3Pool'a aktarmalıdır, swap metodunu iki parçaya ayırmamalıdır. Bu, swap metodunun güvenliğini ve tam olarak uygulanmasını garanti eder, karmaşık değişken kayıtlarına gerek kalmadan.

Anormallik ile bilgi iletimi, işlem tahmini gerçekleştirmek için try catch kullanın.

Bazı sözleşmelerde, ticaret geri çağırma işlevinde özel hatalar fırlatarak, ardından bu hatayı yakalayıp hata mesajından gerekli bilgileri çözerek ticaret tahmini gerçekleştirilir. Bu yöntem görünüşte hileli olsa da oldukça pratiktir, tahmin ticaret ihtiyaçları için swap yöntemini yeniden yapılandırmaya gerek yoktur, mantık daha basittir.

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

Büyük sayılar hassasiyet sorununu çözer

Büyük hesaplamalar içeren senaryolarda, mevcut fiyat ve likiditeye göre değişim token'lerini hesaplamak için, bölme işlemlerinin neden olduğu hassasiyet kaybından kaçınılmalıdır. Bir yöntem, << FixedPoint96.RESOLUTION gibi sola kaydırma işlemi kullanmaktır, bu da 2^96 ile çarpmaya eşdeğerdir. Sola kaydırmadan sonra yapılan bölme işlemi, normal işlemlerde taşma olmadığında hassasiyeti garanti eder.

Paylaşım yöntemi ile kazanç hesaplama

Her işlemde her LP için işlem ücretlerini kaydetmek mümkün olmayan, LP( likidite sağlayıcı ) ücret kazançlarını kaydetmesi gereken senaryolar için, bu büyük miktarda Gas tüketir.

Bir çözüm, toplam işlem ücretini ve her bir likiditeye dağıtılması gereken işlem ücretini kaydetmektir. LP, işlem ücretlerini çekerken, sahip olduğu likiditeye göre çekilebilecek işlem ücretini hesaplar. Bu, hisse senedi sahiplerinin temettü çekme mekanizmasına benzer.

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

Zincir üstü ve zincir altı bilgi edinme dengesi

Tüm bilgilerin zincir üzerinden alınması gerekmez. Zincir üzerindeki depolama görece pahalıdır, birçok bilgi geleneksel veritabanlarında saklanabilir, örneğin işlem havuzu listesi, işlem havuzu bilgileri vb. Bu veriler, zincir üzerinden düzenli olarak senkronize edilebilir, gerçek zamanlı olarak zincir veya düğüm hizmetlerinin RPC arayüzüne çağrı yapılmasına gerek yoktur.

Bazı blok zinciri 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 önbellek kullanır.

Sözleşme Bölme ve Standart Sözleşme 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, kod, miras alma yoluyla birden fazla sözleşmeye bölünebilir ve bakım yapılabilir.

Ayrıca, mevcut standart sözleşmelerden, örneğin ERC721'den yararlanarak sözleşme geliştirme verimliliğini artırabilirsiniz. Bu sadece yönetimi kolaylaştırmakla kalmaz, aynı zamanda olgun standartlardan yararlanarak geliştirme hızını ve güvenliğini artırır.

özet

Gerçek uygulama geliştirme, akıllı sözleşme geliştirmeyi öğrenmenin en etkili yoludur. Basit bir merkeziyetsiz borsa uygulaması yapmayı denemek, tanınmış projelerin kod uygulamalarını daha derinlemesine anlamanıza yardımcı olacak ve gerçek projelerdeki daha fazla bilgi noktası öğrenmenizi sağlayacaktır. Uygulama yapın, buna kesinlikle yardımcı olacağına inanıyorum.

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

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
  • Repost
  • Share
Comment
0/400
ServantOfSatoshivip
· 08-12 16:04
Bu, tam olarak "sarsıcı işlemler" demek değil mi?
View OriginalReply0
mev_me_maybevip
· 08-11 22:32
Yeni başlayanlar kafe ne büyük sırlar keşfetti, hepsi eski laflar.
View OriginalReply0
CommunityLurkervip
· 08-11 16:39
Çaylak mı? Önce bir hello world yazmanızı öneririm.
View OriginalReply0
Blockwatcher9000vip
· 08-10 12:50
Güzel bir şekilde söylemek, tekniklerdir. Gerçekte ise her türlü kurnaz hareketlerdir.
View OriginalReply0
OnChainDetectivevip
· 08-10 12:46
create2 dağıtımını uzun zamandır araştırıyorum. Bu yöntem muhtemelen yerleştirilmiş mayınlar için kullanılıyor.. anlayanlar anlar.
View OriginalReply0
ContractExplorervip
· 08-10 12:42
Yeni bir açığın keşfi en keyifli olanıdır. Açıklarla yarışmak.
View OriginalReply0
  • Pin
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)