# Bölüm 5 - SMART CONTRACT (Akıllı Sözleşmeleri Yükseltmek) - Ethereum Bu yazı Smart Contract - Ethereum notlarının 5. bölümüdür. Temel Smart Contract veya neler olup bittiğini merak ediyorsanız önceki bölümlere bir göz atın. [Bölüm 4](https://hackmd.io/@yigitraphy/S1c7rC1s0) ## Yükseltme Mekanizması 1: Sözleşme Taşıma Sözleşme taşıma, mevcut bir akıllı sözleşmenin yani bir örneğinin dağıtılması ve depolama ile bakiyelerin yeni sözleşmeye transferini içerir. Yeni dağıtılmış sözleşmenin depolaması boş olacaktır ve bu durum, eski sözleşmeden verileri kurtarıp yeni uygulama yazmanıza olanak tanır. Sonrasında, eski sözleşme ile etkileşimde olan tüm sözleşmeleri yeni adresi belirtecek şekilde güncellemeniz gerekir. Sözleşme taşıma, akıllı sözleşmeleri kullanıcı etkileşimlerini kesintiye uğratmadan yükseltmeye yönelik görece basit ve güvenli bir tedbirdir. Ancak, kullanıcı depolama ve bakiyelerini yeni sözleşmeye manuel olarak taşımak zaman alıcıdır ve yüksek gaz ücretlerine sahip olabilir. ## Yükseltme Mekanizması 2: Veri Ayırma Akıllı sözleşmeleri yükseltmenin bir diğer yöntemi, iş mantığı ile veri depolamayı farklı sözleşmelere ayırmaktır. Bunun anlamı, veriler depolama sözleşmesinde depolanırken kullanıcıların mantık sözleşmesi ile etkileşime girmesidir. Kullanıcı bakiyeleri ve adresleri gibi akıllı sözleşme ile bağlantılı durumu da depolama sözleşmesi depolar. ***Depolama sözleşmesi, mantık sözleşmesine aittir ve dağıtım anında mantık sözleşmesinin adresi ile yapılandırılıdır. Bu, yetkisiz sözleşmelerin depolama sözleşmesini çağırmasını ya da verilerini güncellemesini engeller.*** Varsayılan olarak, depolama sözleşmesi değiştirilemez; fakat işaret ettiği mantık sözleşmesinin adresini güncellemeyi gerektirir. ## Yükseltme Mekanizması 3: Vekil Modeller Araştırma modeli aynı zamanda, iş mantığını ve veriyi ayrı sözleşmelerde tutmak için veri ayırmayı kullanır. ***(Depolama sözleşmesi = Vekil)*** Bir vekil modelinde şunlar gerçekleşir. 1. Kullanıcılar, veriyi depolayan ama iş mantığını tutmayan vekil sözleşme ile etkileşime girer. 2. Vekil sözleşme, mantık sözleşmesinin adresini depolar ve ***delegatecall*** fonksiyonunu kullanarak tüm fonksiyon çağrılarını (iş mantığını içeren) mantık sözleşmesine delege eder. 3. Çağrı, mantık sözleşmesine iletiledikten sonra mantık sözleşmesinden gelen veri alınır ve kullanıcıya geri döndürülür. ***delegatecall***, **bir sözleşmenin başka bir sözleşmeyi çağırmasına izin veren işlem kodudur.** Vekil sözleşme, bir kullanıcı bir fonksiyonu her çağırdığında ***delegatecall*** çağrısı yapması gerekir. Çünkü yerleşik bir ***fallback*** fonksiyonuna sahiptir. Solidity programlamada, bir fonksiyon çağrısı sözleşmede belirtmiş olan fonksiyonlarla eşleşmediğinde geri dönüş işlevi çalışır. Vekil modelleri kullanmak çok daha karmaşıktır ve bu modeller, yanlış kullanılacak olursa fonksiyon seçici çakışmaları gibi kritik hatalara neden olabilir. ## Yükseltme Mekanizması 4: Strateji Modeli Ana sözleşme, temel iş mantığını içerir ancak belirli işlevleri gerçekleştirmek için diğer akıllı sözleşmeler ile ("uydu sözleşmeleri") arayüz oluşturur. Aynı zamanda bu ana sözleşme ana sözleşme uydu sözleşmesinin farklı uygulamaları arasında geçiş yapabilir ve her uydu sözleşmesinin adresini depolar. Ana dezavantajı, bu modelin çoğunlukla küçük yükseltmeleri devreye almak açısından kullanışlı olmasıdır. Ayrıca, ana sözleşmesinin güvenliği tehlike altındaysa bu yükseltme yöntemini kullanamazsınız. ## Yükseltme Mekanizması 5: Elmas Model Elmas modeli, vekil modelde yapılan bir iyileştirme olarak kabul edilir. Elmas modelinde ki mantık sözleşmeleri ***facets*** olarak bilinir. Elmas modelini çalıştırmak için vekil sözleşmede fonksiyon seçicileri farklı yüz adreslerine eşleyen bir eşleşme oluşturmalıdır. Bir kullanıcı fonksiyon çağrısı yaptığında vekil sözleşmesi, o fonksiyonu yürütmekten sorumlu yüzü bulmak için eşleşmeyi kontrol eder. Daha sonra *delegatecall* çağrısı yapar ve çağrıyı uygun mantık sözleşmesine yönlendirir. Notların Devamı: [Bölüm 6 - SMART CONTRACT (Akıllı Sözleşme Güvenliği)](https://hackmd.io/@yigitraphy/BkxxyIk2R)