Purdue’den Blockchain’e Dair Öğrendiklerim Serisi#2 🎃

Selllaaammm değerli okuyucularım😊 , ben Elif Hilal! 🔮 öncelikle yazılarımı okuduğunuz için teşekkür ederim. Aranızda beni tanımayan veya ilk defa ismimi duyanlar varsa, kendimi tanıtmak için buraya bir link bırakayım.
Geçtiğimiz haftalarda bir yazı serisine başlayacağımdan bahsetmiştim. Serinin ilk yazısında Stablecoin’lere değindim. Aşağıya linki ekliyorum.
Bu uzun soluklu yazı serisinde, Purdue Üniversitesi’nin Blockchain derslerinden öğrendiğim ne varsa sizlerle paylaşmaya çalışıyorum. Ara sıra yazılarım gecikiyor, kusura bakmayın.🙂
Bu hafta öğrendiklerim ve dolayısıyla bu yazının içeriğinde bahsedeceğim konular şu şekilde:
NOT : Yazıda DON olarak karşılaşacağınız ifade Decentralized Oracle Network’tür, yani Merkeziyetsiz Oracle Ağı. Çok karşılaşacağınız için uyarayım dedim :)
Ve birkaç detay konu daha işledik🙂 Hazırsanız derste dinlediklerimi, araştırdıklarımı ve kendi fikirlerimi toparlayıp açıklıyorum👉🏻
📌Smart Contracts / Akıllı Sözleşmeler🛠️
Akıllı sözleşmeler, daha önceden tanımlanmış belirli koşullar yerine getirildiğinde, bir blockchain ağında çalışan programlardır. Yani aslında biz akıllı sözleşmeler, bir blockchain ağında yürütülen bilgisayar programlarıdır diyebiliriz.
Akıllı sözleşmeler ilk olarak 1994 yılında Amerikalı bilgisayar bilimcisi ve kriptograf Nick Szabo tarafından icat edildi. (Hocamız Nick Szabo’dan bahsederken bir deha olarak söz ediyor, multidisipliner ve bu disiplinleri harika bir şekilde bir araya getiren bir deha) Nick Szabo bir yazısında, aşağıdaki gibi geniş bir akıllı sözleşme tanımından bahsetmiş:
“Ortak sözleşme koşullarını yerine getirmek, hem kötü niyetli hem de tesadüfi istisnaları en aza indirmek ve güvenilir aracılara olan ihtiyacı en aza indirmek” gibi genel amaçlarla “bir sözleşmenin şartlarını yerine getiren bilgisayarlı bir işlem protokolüdür”
Otomat makineleri gibi sistemlerde genel bir akıllı sözleşme kavramı benzerliği çok popüler oldu, eminim sizler de duymuşsunuzdur. Otomat’a ne kadar para atarsanız o fiyata uygun bir ürün alırsınız. Akıllı sözleşmeler de bu mantıkla çalışır.
Bu arada Nick Szabo’nun ilk kez akıllı sözleşme tabirini kullandığı yazısını da okumalısınız kesinlikle :
Akıllı sözleşmeler, bir sözleşmenin şartlarını, sözleşme şartları yerine getirildiğinde otomatik olarak yürütülen bilgisayar koduna çevirerek sözleşmeleri dijitalleştirir.
Yani bu ne demek? Güven kavramını insanlardan alıp teknolojiye veriyoruz demek. Merkezi bir sunucu yerine merkeziyetsiz bir blockchain üzerinde çalışan akıllı sözleşmeler, birden fazla tarafın; bir sonuca doğru, zamanında ve manipülasyona karşı korumalı bir şekilde ulaşmasını sağlar. Bu sebeple güven kavramı teknolojinin kendisi tarafından otomatik olarak sağlanır. Akıllı sözleşmeler aslında güçlü ve sağlam bir altyapıya sahiptir. Çünkü, merkezi bir yöneticileri yoktur ve bu da tek hedefli saldırılara karşı korumalı oldukları anlamına gelir. (Bu konu derste biraz tartışıldı ama en temel halinin bu , çünkü yanlış ve eksik yazılan kodların ciddi anlamda büyük hasarlara yol açacağını bilmemiz lazım.)
Bu arada bahsetmeden geçmeyeceğim. Temmuz 2022 itibariyle, Ethereum hala en popüler DApp platformu olarak kabul ediliyormuş.Bildiğimiz üzere DApp’lerin çoğu Ethereum blockchainini kullanır ve platform, en yüksek sayıda günlük aktif kullanıcıya ve akıllı sözleşmelere sahiptir.
Ethereum’un popülaritesi, akıllı sözleşmeler sunan ilk blockchain olması gerçeğinden kaynaklanmaktadır.
Ethereum akıllı sözleşmeleri genellikle Solidity veya Vyper gibi üst düzey bir dilde yazılır. Eğer smart contract developer olma yolundaysanız bu dillere ağırlık vermeniz iyi olur.
Bu konuda nasıl smart contract developer olurum diye düşünenlere şu yazıyı bırakıyorum :
Her iki dil de EVM bayt kodu kullanılarak derlenir. Günümüzde akıllı sözleşmeleri destekleyen çok sayıda başka blockchain de var elbette.
Akıllı Sözleşmelerin Çalışma Prensipleri🛠️
Akıllı sözleşmeler, şu mantıkla çalışan programlardır: “x olayı olursa/olduğunda, ardından y eylemini yürütün.”
Bunu Nick Szabo’nun tabiriyle şöyle de ifade edebiliriz :
Akıllı sözleşme için basit bir metafor, otomatlardır. Belirli girdiler, önceden belirlenmiş çıktıları garanti eder;
Otomat, yalnızca tüm gereksinimler karşılandıktan sonra istediğiniz ürünü verecektir. Bir ürün seçmezseniz veya yeterince para koymazsanız, satış makinesi ürününüzü vermez. Akıllı sözleşmeler de böyle çalışır.
Bir akıllı sözleşme, birden çok farklı koşula sahip olabilir ve bir uygulama, birbirine bağlı bir dizi süreci desteklemek için birden çok akıllı sözleşmeye sahip olabilir. Yani bir uygulamanın sadece bir tane akıllı sözleşme ile çalıştığını düşünmeyin. Akıllı sözleşme programlama için birden fazla akıllı sözleşme dili de vardır ve bunlardan en popüleri Solidity’dir. Hocamız Rust programlama dilini daha çok seviyor ve kullanmayı öneriyor ancak bu dilin kullanımı birazcık daha sınırlıdır, bunu bilmekte fayda var 😊 Herhangi bir developer akıllı bir sözleşme oluşturabilir. Örneğin kendi amaçları için, fonlarını otomatik olarak en yüksek kazanç sağlayan uygulamaya kaydıran kişisel bir getiri fon toplayıcı sözleşmesi gibi, bunu halka açık bir blok zincirinde çalıştırabilir.
Bununla birlikte, birçok akıllı sözleşme, birbirini tanıyan veya tanımayan ve birbirlerine güvenmeleri gerekmeyen birden fazla bağımsız tarafı içerir.
Bu arada, bence bu bilgi çok güzel bir bilgi ; akıllı sözleşme, akıllı sözleşmeyle kimin, hangi zamanlarda etkileşim kurabileceğini ve hangi girdilerin hangi çıktılarla sonuçlanacağını içerecek şekilde, kullanıcıların onunla tam olarak nasıl etkileşim kurabileceğini tanımlayabiliyor.
Smart Contract çalışma süreci şu şekildedir :
Smart Contract Örnekleri🛠️
👀 Akıllı sözleşmenin amaçlarından biri, belirli bir iş sürecini otomatikleştirmektir. Küresel ticaret için basit bir akıllı sözleşme örneği aşağıdaki gibi terimleri içerebilir:
Şimdi bu örneklerde diyeceksiniz ki, malların geç gelip gelmediğini Blockchain nerden biliyor? İşte bu harika bir soru. Bu sorunun cevabı Oracle’dır. Oracle’lar Blockchain’e dünyadaki verileri verirler. (garip bir cümle oldu :D) Oracle hakkında detaylı bilgiye şu yazımdan ulaşabilirsiniz :
Diğer akıllı sözleşmeler, herhangi bir izne ihtiyaç duymadan herkesin etkileşimde bulunabileceği genel merkezi olmayan uygulamaları (dApp’ler) destekler. Public dApp’ler genellikle açık kaynaklıdır, bu nedenle dünyadaki herkes onlarla etkileşim kurup kurmamaya karar vermeden önce tam olarak nasıl çalıştıklarını inceleyebilir. Kamuya açık bir dApp örneği, aşağıdaki terimlere sahip olabilecek merkeziyetsiz bir borç verme/borç alma piyasasıdır:
Akıllı Sözleşmelerin Faydaları👀
Çoğu geleneksel dijital sözleşme, birbirini tanımayan ya da az tanıyan iki taraf arasında gerçekleşir ki bu durum da her iki tarafın da taahhütlerini yerine getirmeme riskini taşır. Bu da daha büyük hukuki sorunşara yol açar. Hiç şaşmaz.
Karşı taraf riskini çözmek için dijital sözleşmeler genellikle sözleşmenin şartlarını uygulayabilen bir banka gibi daha büyük, merkezi kurumlar tarafından yürütülür. Bu dijital sözleşmeler doğrudan bir kullanıcı ile büyük bir şirket arasında olabilir veya iki kullanıcı arasında güvenilir bir aracı olarak hareket eden büyük bir şirketi içerebilir. Tabi bu da , başka bir üçüncü bir tarafa güvenmeyi gerektirdiğinden hiçbir sorunu tam anlamıyla çözmez. Sadece daha büyük risk demektir.
Oraclelar, akıllı sözleşme uygulamalarının harici olayları doğrulayabilmesi, harici sistemlerde eylemleri tetikleyebilmesi ve zincir üzerinde yapılması mümkün veya pratik olmayan hesaplamalardan yararlanabilmesi için blok zincirlerine dış dünyaya güvenli köprüleri sağlar.
Diğer derste oracle’lar üzerine konuştuk ve epey tartıştık. Bir sonraki yazımda detaylıca ele alacağım :)
Hibrit Akıllı Sözleşmeler🎁
Hibrit akıllı sözleşmeler, özellikle her ortam diğerinin sağlamadığı özellikleri sağlama konusunda uzmanlaştığı için, ne bir blockchain ne de bir oracle ağının tek başına başaramayacağı üstün bir uygulama oluşturmak için birbirinden tamamen farklı iki bilgi işlem ortamını senkronize eder.🙂
Hibrit akıllı sözleşmeler, her şeyden önce iki bölümden oluşan uygulamalardır:
İki bileşen, tek bir hibrit akıllı sözleşme uygulaması oluşturmak için birbirleriyle sorunsuz ve güvenli bir şekilde entegre olur ve çalışırlar.

Hibrit akıllı sözleşmeler, özellikle her ortam diğerinin sağlamadığı özellikleri sağlama konusunda uzmanlaştığı için, ne bir blockchain ne de bir oracle ağının tek başına başaramayacağı üstün bir uygulama oluşturmak için birbirinden tamamen farklı iki bilgi işlem ortamını birbirine entegre eder.
Hibrit Akıllı Sözleşmeler, Zincir İçi ve Zincir Dışı Hesaplamayı Nasıl Birleştirir? 🛠️
Zincir içi ve zincir dışı bileşenler arasındaki farkı daha iyi anlamak için, her birinin farklı rollerini tanımlayacağız:
Zincir Üzerinde: Blockchain
Zincir Dışı: Merkeziyetsiz Oracle Ağı
Peki Merkeziyetsiz Oracleların görevi ne?
Hibrit Akıllı Sözleşmeler Nerede Kullanılır?👻🛠️
Merkeziyetsiz oraclelar yani DON’lar, gizlilik veya ölçeklenebilirlik gerektiren çok sayıda akıllı sözleşme uygulamasının kilidini açıyor. Ne gibi uygulamalar mesela?
Hibrit akıllı sözleşmeler, sosyal sistemlerde matematik tabanlı ekonomik adalet ve şeffaflık için yeni bir emsal oluşturmak için daha önce hiç görülmemiş yeni kullanım durumlarına da yol açıyor.
Halihazırda veya yakın gelecekte hibrit akıllı sözleşmelerden etkilenecek olan başlıca endüstrilerden bazıları şunlar:
Akıllı sözleşmeler oyun ve ödül dağıtım modellerini tanımlayabilirken DON’lar kanıtlanabilir şekilde tarafsız oyun ve adil ödül dağıtımları sağlamak için manipülasyona dayanıklı rastgelelik/randomness sağlayabilir. DON’lar ile oyun dApp’leri, artırılmış gerçeklik için IoT sensör okumaları gibi gerçek dünya veri akışlarını da bağlayabilir ve daha yüksek performans elde etmek için belirli oyun işlevlerini zincir dışında işleyebilir.
Nihayetinde DON’lar, blok zincirlerinin doğal olarak desteklemediği tüm hizmetleri ve ayrıca kriptografik güvenlik garantilerini mevcut veri ve sistemlere genişleterek zincir dışı önyükleme hizmetlerini sağlayabilir.
Hibrit bir akıllı sözleşme mimarisi, merkeziyetsiz sistemlere dayalı daha geniş bir işbirliği vizyonunun gerçekleştirilmesine yardımcı olarak, blok zincirlerinin ve blok zinciri olmayan altyapının güvenli, güvenilir, ölçeklenebilir, gizli, özelleştirilebilir ve/veya evrensel olarak bağlantılı bir şekilde sorunsuz bir şekilde etkileşime girmesine olanak tanır.
Upgradable Smart Contracts 🦾
Dersrte hocamızın söylediği ve not aldığım bir cümle var. “Errors are inevitable parts of software development.” Yani, “hatalar, yazılım geliştirmenin kaçınılmaz bir parçasıdır” Hayatımızın da öyle, değil mi? 😅
Yukarıda da değindiğim üzere, akıllı sözleşme, blok zincirinde depolanan yürütülebilir bayt kodudur. Kod, bir akıllı sözleşme adresine deploy edildikten sonra, kod asla değiştirilemez (geniş kapsamlı silme olan kendi kendini yok etme istisnası hariç). Bu çok temel yani Blockchain 101 bilgisidir. Dolayısıyla kendisine deploy edilen akıllı sözleşmeleri içeren Ethereum blok zincirinde depolanan veriler de değişmezdir.
Öyleyse, akıllı sözleşmelerde kod değiştirilemezse, upgradable akıllı sözleşmeleri nasıl ele alacağız?🤔 Gerçekten gerekli midir değiştirmek ya da güncellemek?
Geleneksel akıllı sözleşme modelleri, bu tür düzeltmelere izin vermez. Bunun yerine, developerların her özellik eklemek veya bir hatayı düzeltmek istediklerinde yeni bir sözleşme deploy etmeleri gerekir. Başlangıçta büyük bir sorun gibi görünmese de, kod tabanı büyüdüğünde çok büyük bir yük olacak ve daha büyük sorunlara yol açacaktır. Ve her seferinde, protokolün mevcut durumunu yansıtmak için verilerin eski sözleşmeden yeni bir sözleşmeye taşınması gerekir. Yani uzar da uzar🗨
Bir akıllı sözleşmeyi neden değiştirmemiz gerekir derseniz eğer ana nedenler şöyledir diyebiliriz:
Yukarıda gördüğümüz sebeplerden ötürü akıllı sözleşmeler değişme ihtiyacı hissederler.
Ama tekrar etmekte fayda var, akıllı sözleşmelerin kendileri değişemez. Bir blok zincirine deploy edildikten sonra kalıcı olurlarv ve değiştirilemezler.
Fakat bir dApp, “backend” için uyum sağlamak için birlikte çalışan bir veya daha fazla akıllı sözleşmeye sahip olacak şekilde tasarlanabilir. Nasıl yani?Bu, akıllı sözleşmeler arasındaki etkileşim modelini yükseltebileceğimiz anlamına gelir.
Bir akıllı sözleşmeyi upgrade etmek yani yükseltmek, deploy edilen bir akıllı sözleşmenin kodunu değiştirdiğimiz anlamına gelmez; bu, bir akıllı sözleşmeyi diğeriyle değiştirdiğimiz anlamına gelir.😊
Akıllı sözleşme yükseltmesi, sözleşmenin durumunu korurken akıllı sözleşmenin iş mantığını değiştirmeyi içerir. Özellikle akıllı sözleşmeler bağlamında yükseltilebilirlik ve değişebilirliğin aynı olmadığını açıklığa kavuşturmak önemlidir.
Ethereum ağındaki bir adrese dağıtılan bir programı değiştiremezsiniz. Sürekli söylediğimin farkındayım kusura bakmayın fakar bu ayrımı anlamak bütün sistemi anlamanızı sağlar. Kullanıcılar bir akıllı sözleşmeyle etkileşim kurduğunda yürütülen kodu değiştirebilirsiniz.
Bu, yükseltme işlemi hangi yöntemlerle yapılabilir:

Açıkladığım metotlar üzerinde birkaç dakika durduk, ama Proxy en çk karşılaşacağımız yöntem.
Yükseltilebilirlikten bahsettiğimizde, bu, istemcinin her zaman aynı sözleşme (proxy) ile etkileşime girdiği, ancak temel mantığın gerektiğinde önceki verileri kaybetmeden değiştirilebileceği (yükseltilebileceği) anlamına gelir.

Diamond yükseltme modelinin, geleneksel proxy yükseltme modellerine göre bazı avantajları vardır:
👀 Proxy Nedir?
Akıllı sözleşmeler genellikle “Proxy Modeli” adı verilen bir yazılım mimarisi modeli kullanılarak yükseltilir. Yazılım tasarımında “proxy” kelimesi ne anlama geliyor?

EVM’nin , farklı bir harici sözleşmeden bayt kodunu alan ve bu bayt kodunu orijinal sözleşmenin depolama bağlamında yürüten,Delegatecall (delege çağrısı) adlı özel bir işlem kodu vardır. Bu, İnternetten bir komut dosyası indirip onu ev bilgisayarınızda çalıştırmaya eşdeğerdir, bu nedenle bu, yalnızca bilinen güvenilir harici sözleşmelerde son derece dikkatli kullanılmalıdır.

Örnek olarak bir ERC20 tokenını ele alalım. Bayt kodu, kimin mint etmeye uygun olduğunu, transfer vergileri olup olmadığını, duraklatılabilir olup olmadığını vb. belirten bir çift işlevdir. Depolama bağlamı, hamil adreslerinin hamil bakiyeleriyle eşlenmesi gibi verileri içerir. Delege çağrısının kullanılması, ERC20'nin depolama bağlamı/tutucu dengelerini korumaktan sorumlu olduğu, ancak işlev mantığı/basma kurallarını harici bir akıllı sözleşmeye devrettiği anlamına gelir. Ayrıca, işlev mantığınızı hangi akıllı sözleşmeye devredeceğinizi değiştirebilirsiniz. OpenZeppelin docs sayfasında detaylı bilgiye ulaşabilirsiniz.
Ama unutmayın, büyük güç, büyük sorumluluk getirir😉
Akıllı bir sözleşme olan bir proxy’nin “sabit” (yani değişmeyen) kendi Ethereum sözleşme adresi vardır. Böylece sistemdeki diğer akıllı sözleşmeleri değiştirebilir ve proxy akıllı sözleşmeyi yeni konumlandırılmış akıllı sözleşmenin doğru adresiyle güncelleyebilirsiniz.
DApp’in son kullanıcıları proxy aracılığıyla doğrudan ve diğer akıllı sözleşmelerle yalnızca dolaylı olarak etkileşime girer.
Dolayısıyla, akıllı sözleşme geliştirmede, Proxy Modeli aşağıdaki iki parça aracılığıyla elde edilir:
Aşağıda tartışacağımız proxy modelinin üç yaygın çeşidi vardır.
Proxy Pattern türleri
Şu anda üç tür proxy modeli vardır:
Bu üçünün farklarını uzun uzun anlatmak bu yazının konusu değil, derste de uzun uzun üzerinde durmadık fakat şu görsel sizlere yardımcı olabilir:

Basit Proxy Örneği
Basit bir proxy, aşağıda gösterilen mimariye sahiptir.

Biraz daha inceleyelim 🙂 Açıkcası derste 55 dakika konuşuldu ama hepsini yazamadım, özetleyerek not aldığım kısımları açıklıyorum.
EVM’de “execution context” dediğimiz bir bölüm var. Think of this as the space in which code is executed.
Dolayısıyla, proxy sözleşmesinin ve diğer tüm akıllı sözleşmelerin kendi ‘execution context’ yani yürütme ortamları vardır. Proxy sözleşmesi ayrıca, verilerin kendi ether dengesiyle birlikte blok zincirinde kalıcı olarak depolandığı kendi deposuna sahiptir. Birlikte, akıllı sözleşmenin tuttuğu veriler ve denge “state” olarak adlandırılır ve state, yürütme ortamının bir parçasıdır.
Proxy sözleşmesi, dApp’i oluşturan diğer akıllı sözleşmelerin adreslerini takip etmek için storage variables/depolama değişkenlerini kullanır. Bu şekilde işlemleri yönlendirebilir ve ilgili akıllı sözleşmeyi çağırabilir.
Proxy sözleşmesi, dApp’i oluşturan diğer akıllı sözleşmelerin adreslerini takip etmek için depolama değişkenlerini kullanır. Zaten bu şekilde işlemleri yönlendirebilir ve ilgili akıllı sözleşmeyi çağırabilir.
Ancak mesaj aramalarını doğru sözleşmeye iletmek için kullanılan daha zekice bir numara var. Proxy sözleşmesi, mantık sözleşmesine yalnızca normal bir işlev çağrısı yapmaz; Delegatecall adı verilen bir yöntemi kullanır.
Delegatecall bir sözleşmenin çalışma zamanında farklı bir adresten dinamik olarak kod yükleyebileceği anlamına gelir.
Aslında göründüğünden daha karmaşık ve uzun bir konu fakat buraya kadar notları paylaşacağım. Detaylı bilgi için yukarıda verdiğim linklerden yardım alabilirsiniz.👽
Evrensel Yükseltilebilir Proxy ( UUPS — The Universal Upgradable Proxy Standard)🎉
Evrensel Yükseltilebilir Proxy Standardı (UUPS), tüm sözleşmelerle evrensel uyumluluğa sahip proxy sözleşmeleri için bir standart oluşturmanın bir yolu olarak EIP1822'de önerilmişti. Bu model ayrıca Solidity’nin delegatecall işlemini kullanır, ancak Şeffaf proxy modelinde tüm yükseltmeler proxy sözleşmesi tarafından yönetilirken, UUPS’de yükseltmeler mantık sözleşmesi tarafından, özellikle de mantık sözleşmesinin devraldığı “proxiable” akıllı sözleşme tarafından yönetilir. Farkları budur. (en önemli farkları demek daha doğru) Bu, daha sonraki bir tarihte kaldırılabileceği veya yükseltme işlevlerini eklemeyi unutursanız yanlışlıkla “dondurulabileceği” anlamına gelir. Ancak, daha odaklı kod sayesinde, şeffaf bir proxy’ye kıyasla hem dağıtım hem de etkileşim maliyetlerini azaltır.
Solidity derleyicisi, aynı sözleşme içinde ortaya çıkan işlev çakışmalarını tespit edebildiğinden, üst sözleşmede yükseltme mantığının varlığı, derleyicinin bu tür çakışmaları belirlemesine yardımcı olur ve bu da bunların olasılığını azaltır.
Özetlemek gerekirse;
Yani hr sistemin iyi ve kötü yanları var.🙊
Bu yazıda bana fikir ve öneriler veren değerli çalışma arkadaşım Patrick Collins’in videosunu da buraya bırakıyorum :
Daha detaylı ve teknik bilgiler için belgeler:
Austin demişken hemen kendisinin resmini de buraya bırakayım


Sizler de bu konularda daha fazla bilgiye ulaşmak isterseniz yukarıdaki kaynaklardan başlayabilirsiniz.💥
Serinin diğer yazısında görüşmek üzere🌻
💻 Bu arada Blockchain ekosisteminde düzenlediğim etkinliklerden haberdar olmak için Meetup sayfama kaydolabilir, Telegram grubuma girebilir, Twitter’dan takip edebilirsiniz!👻 Umarım yazılar, içerikler ve paylaşımlarım sizlere fayda sağlıyordur. Bana ulaşmaktan çekinmeyin 🔮