Son zamanlarda merkeziyetsiz borsa geliştirme kılavuzu yazarken, Uniswap V3'ün kod uygulamasını referans aldım ve çok sayıda ilginç akıllı sözleşmeler geliştirme tekniği öğrendim. DeFi sözleşmeleri geliştirmeyi deneyen bir geliştirici olarak, bu teknikler sözleşme geliştirmeyi öğrenmek isteyen yeni başlayanlar için çok faydalı olacaktır.
Tahmin Edilebilir Sözleşme Adresi
Genellikle dağıtılan sözleşmelerin aldığı adres rastgele gibi görünür, çünkü nonce ile ilgilidir. Ancak bazı durumlarda, işlem eş değer bilgileri ile sözleşme adresini çıkarmamız gerekir, örneğin işlem yetkisini belirlemek veya havuz adresini almak.
Uniswap, CREATE2 yöntemini kullanarak akıllı sözleşmeler oluşturur ve adresin tahmin edilebilir olmasını sağlamak için salt parametresini ekler. Yeni adres oluşturma mantığı şu şekildedir: hash("0xFF", oluşturucu adresi, salt, initcode). Bu yöntem, sözleşme adresinin önceden hesaplanmasını sağlar.
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Büyük Sayı Hesaplamaları Hassasiyet Sorununu Çözer
Uniswap'ta fiyat ve likiditeye göre Token miktarını hesaplamak gibi birçok hesaplama yapılmaktadır. 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ırmak anlamına gelir ve 2^96 ile çarpmaya eşdeğerdir.
Sağa 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ı olsa da, kabul edilebilir.
Paylaşım Yöntemi ile Kazanç Hesaplama
Uniswap, LP) likidite sağlayıcısı ('in işlem ücretlerini kaydetmelidir. Açıkça her işlemde her bir LP için işlem ücreti kaydetmek mümkün değildir, bu büyük miktarda Gas harcar.
Çözüm, toplam işlem ücretini ve her birim likiditenin alması gereken işlem ücretini kaydetmektir. LP, sahip olduğu likiditeye göre çekilebilecek işlem ücretini hesaplar, hisse senedi temettüsüne benzer.
![Web3 Yeni Başlangıç Serisi: Uniswap Kodundan Öğrendiğim Akıllı Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Zincir üstü ve zincir altı bilgilerini ayırma
Zincir üzerindeki depolama görece pahalıdır, tüm bilgilerin zincir üzerine yazılması 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.
İşlem havuzu listesi, bilgileri vb. sıradan bir veritabanında saklanabilir ve periyodik olarak zincirden senkronize edilebilir. İlgili verileri almak için RPC arayüzünü gerçek zamanlı olarak çağırmaya gerek yoktur. Elbette, kritik işlemler hala zincirde gerçekleştirilmektedir.
Sözleşme Ayırma ve Standart Sözleşme Yeniden Kullanımı
Bir proje, birden fazla gerçek deploy edilmiş sözleşme içerebilir. Tek bir sözleşme deploy edilse bile, kod miras alınarak birden fazla sözleşmeye ayrılabilir.
Uniswap'ın NonfungiblePositionManager akıllı sözleşmesi birden fazla akıllı sözleşmeyi miras alır. ERC721Permit, OpenZeppelin'in ERC721 akıllı sözleşmesini doğrudan kullanır, bu da NFT ile pozisyon yönetimini kolaylaştırır ve geliştirme verimliliğini artırır.
Özet
Kendiniz geliştirerek öğrenmek, yalnızca makale okumaktan daha etkilidir. Basit bir merkeziyetsiz borsa uygulaması oluşturmaya çalışmak, Uniswap'ın kod uygulamasını daha derinlemesine anlamanızı sağlar ve gerçek projelerdeki bilgi noktalarını öğrenmenizi sağlar.
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.
21 Likes
Reward
21
7
Share
Comment
0/400
PoolJumper
· 07-28 02:11
Sıfır altyapı yapalım.
View OriginalReply0
OldLeekConfession
· 07-27 04:18
Beni anlamamı sağlarsan bu harika olur...
View OriginalReply0
OnchainGossiper
· 07-27 03:51
Uygulamalı pratik yapmayı öneririm~
View OriginalReply0
BagHolderTillRetire
· 07-25 17:02
Sonunda hapsolmuş durumumun bir çıkış yolunu buldum.
View OriginalReply0
PanicSeller69
· 07-25 17:00
V3 gerçekten bir şeyler var, yap!
View OriginalReply0
degenonymous
· 07-25 16:58
Kod geliştiricileri için bir müjde oldu
View OriginalReply0
AirdropDreamBreaker
· 07-25 16:56
Geliştirmek yerine doğrudan kod çalmak daha iyidir.
Uniswap sözleşmesi geliştirme 7 büyük ipucu analizi Merkezi Olmayan Finans projelerinin verimliliğini artırma
Uniswap kodundan öğrenilen akıllı sözleşmeler geliştirme ipuçları
Son zamanlarda merkeziyetsiz borsa geliştirme kılavuzu yazarken, Uniswap V3'ün kod uygulamasını referans aldım ve çok sayıda ilginç akıllı sözleşmeler geliştirme tekniği öğrendim. DeFi sözleşmeleri geliştirmeyi deneyen bir geliştirici olarak, bu teknikler sözleşme geliştirmeyi öğrenmek isteyen yeni başlayanlar için çok faydalı olacaktır.
Tahmin Edilebilir Sözleşme Adresi
Genellikle dağıtılan sözleşmelerin aldığı adres rastgele gibi görünür, çünkü nonce ile ilgilidir. Ancak bazı durumlarda, işlem eş değer bilgileri ile sözleşme adresini çıkarmamız gerekir, örneğin işlem yetkisini belirlemek veya havuz adresini almak.
Uniswap, CREATE2 yöntemini kullanarak akıllı sözleşmeler oluşturur ve adresin tahmin edilebilir olmasını sağlamak için salt parametresini ekler. Yeni adres oluşturma mantığı şu şekildedir: hash("0xFF", oluşturucu adresi, salt, initcode). Bu yöntem, sözleşme adresinin önceden hesaplanmasını sağlar.
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Büyük Sayı Hesaplamaları Hassasiyet Sorununu Çözer
Uniswap'ta fiyat ve likiditeye göre Token miktarını hesaplamak gibi birçok hesaplama yapılmaktadır. 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ırmak anlamına gelir ve 2^96 ile çarpmaya eşdeğerdir.
Sağa 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ı olsa da, kabul edilebilir.
Paylaşım Yöntemi ile Kazanç Hesaplama
Uniswap, LP) likidite sağlayıcısı ('in işlem ücretlerini kaydetmelidir. Açıkça her işlemde her bir LP için işlem ücreti kaydetmek mümkün değildir, bu büyük miktarda Gas harcar.
Çözüm, toplam işlem ücretini ve her birim likiditenin alması gereken işlem ücretini kaydetmektir. LP, sahip olduğu likiditeye göre çekilebilecek işlem ücretini hesaplar, hisse senedi temettüsüne benzer.
![Web3 Yeni Başlangıç Serisi: Uniswap Kodundan Öğrendiğim Akıllı Sözleşme Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Zincir üstü ve zincir altı bilgilerini ayırma
Zincir üzerindeki depolama görece pahalıdır, tüm bilgilerin zincir üzerine yazılması 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.
İşlem havuzu listesi, bilgileri vb. sıradan bir veritabanında saklanabilir ve periyodik olarak zincirden senkronize edilebilir. İlgili verileri almak için RPC arayüzünü gerçek zamanlı olarak çağırmaya gerek yoktur. Elbette, kritik işlemler hala zincirde gerçekleştirilmektedir.
Sözleşme Ayırma ve Standart Sözleşme Yeniden Kullanımı
Bir proje, birden fazla gerçek deploy edilmiş sözleşme içerebilir. Tek bir sözleşme deploy edilse bile, kod miras alınarak birden fazla sözleşmeye ayrılabilir.
Uniswap'ın NonfungiblePositionManager akıllı sözleşmesi birden fazla akıllı sözleşmeyi miras alır. ERC721Permit, OpenZeppelin'in ERC721 akıllı sözleşmesini doğrudan kullanır, bu da NFT ile pozisyon yönetimini kolaylaştırır ve geliştirme verimliliğini artırır.
Özet
Kendiniz geliştirerek öğrenmek, yalnızca makale okumaktan daha etkilidir. Basit bir merkeziyetsiz borsa uygulaması oluşturmaya çalışmak, Uniswap'ın kod uygulamasını daha derinlemesine anlamanızı sağlar ve gerçek projelerdeki bilgi noktalarını öğrenmenizi sağlar.
![Web3 Yeni Başlayanlar Serisi: Uniswap Kodundan Öğrendiğim Akıllı Sözleşmeler Geliştirme İpuçları])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(