1. Anasayfa
  2. Solidity

Akıllı Sözleşme Geliştirme, Cadence vs Solidity

Akıllı Sözleşme Geliştirme, Cadence vs Solidity
Cadence vs Solidity
0

Akıllı sözleşme teknolojisinin tanıtılmasından bu yana, Solidity akıllı sözleşme geliştiricileri için tercih edilen kodlama dili olmuştur.

Ancak, bir Solidity geliştiricisiyseniz, dezavantajları olduğunu zaten biliyorsunuzdur. Diğer kusurların yanı sıra, belirli veri türlerinin basit bir şekilde yanlış kullanılmasından kaynaklanan büyük güvenlik endişeleri ortaya çıkabilir ve yerleşik erişim kontrolleri yoktur.

Flow blok zinciri için geliştirilen yeni bir akıllı sözleşme dili olan  Cadence , Solidity’nin gözden kaçırdıklarını öğrenir ve doğal olarak birçok sorununu çözer. Ve eğer Solidity‘yi zaten biliyorsanız, öğrenmesi çok kolay!

Bu makale Cadence akıllı sözleşme dilini tanıtıyor, Solidity’ye göre nasıl geliştiğini ayrıntılarıyla anlatıyor ve ardından bazı yaygın akıllı sözleşme örneklerinde her iki dilin yan yana karşılaştırmasını yapıyor. Sonunda, Cadence konusunda rahat olmalı ve Flow‘a başlamaya hazır olmalısınız!

Cadence Hakkında

Cadence, orijinal olarak tarafından oluşturulan Flow blok zincirine güç veren programlama dilidir. Şık Laboratuvarlar büyük ölçekli kripto oyunlarını ve NFT projelerini desteklemek için. (Muhtemelen NBA Top Shots’u duymuşsunuzdur—en başarılı projelerinden biridir.) Swift, Rust ve Kotlin gibi popüler modern dillerden esinlendiği için sözdizimi tanıdık gelebilir. Cadence statik olarak ve kesinlikle yazılmış, kaynak odaklı bir yaklaşım ve yetenek tabanlı güvenlik modeli ile.

Tüm bunlar, Cadence‘in  dijital varlık oluşturma ve yönetimi için yüksek düzeyde optimize edildiği anlamına gelir.

Cadence‘in sunduğu en önemli yenilik, kaynak tabanlı paradigma. Bu yaklaşım, bir kullanıcının varlıklarını oluşturmayı, izlemeyi ve yönetmeyi önemli ölçüde kolaylaştırır. Gerçeğin kaynağı olarak merkezi bir kamu defterine güvenmek yerine (Ethereum’ın yaptığı gibi), varlıklar doğrudan bir kullanıcının hesap deposuna bağlanır. Bu nedenle, NFT gibi bir kaynak olarak oluşturulan bir varlık, aynı anda yalnızca bir konumda bulunabilir. Bu, harici olarak sahip olunan bir hesap veya akıllı bir sözleşme olmak üzere yalnızca bir sahibi olmasını sağlar.

Cadence vs Solidity

Cadence, Solidity Programlama Dilini birçok yönden geliştirir. Üç örneğe bakalım: küçük kodlama hataları, güvenlik ve erişim denetimi ve sözleşme dağıtımı.

Küçük kodlama hataları

Solidity ile ilgili en büyük sorunlardan bazıları genellikle en küçük hatalardan kaynaklanır. Örneğin, bir değişkeni yalnızca varsayılan bir değerle başlatmak – bazen uygun olsa da – bu değişken değiştirilmezse beklenmeyen sonuçlara yol açabilir. Ve sabit aralıklı veri türleri, bu veri türü parasal bir değeri temsil ederse felaket olabilecek potansiyel yetersiz veya taşma durumlarına yol açabilir.

Cadence‘de, varsayılan değerlerden istenmeyen sonuçlar kaldırılarak, başlatma sırasında değişken değerler ayarlanmalıdır. Ek olarak, Cadence‘deki tamsayılar, yetersiz veya taşma koşulları için otomatik olarak kontrol edilirken, OpenZeppelin‘in  güvenli matematik kitaplığını devralmanız  veya Solidity ile 0.8’den daha yüksek bir sürüm kullanmanız gerekir.

Güvenlik ve erişim kontrolü

Güvenlik ve erişim kontrolü söz konusu olduğunda, Solidity, özel değiştiriciler oluşturmanızı veya diğer güvenlik tabanlı akıllı sözleşmeleri devralmanızı gerektirir, ancak aynı zamanda varsayılan olarak herkese açık olan birçok işleve sahiptir.

Cadence‘in  yetenek tabanlı güvenlik modeliyle hesaplar yalnızca erişime sahip oldukları işlevleri gerçekleştirebilir. Bu, Cadence‘in temel olarak dilin içine yerleştirilmiş erişim kontrolüne sahip olduğu anlamına gelir. Ayrıca, Cadence‘de kaynak nesnelerde tanımlanan yöntemler, yeniden giriş saldırılarına karşı duyarlı olamaz; bu  , Solidity geliştiricilerinin mantıklarının akışını oluştururken kesinlikle farkında olmaları gereken bir şeydir.

Akıllı sözleşme dağıtımı

Solidity akıllı sözleşmelerinde sorunlar bulunduğunda, geliştiriciler tamamen yeni bir sözleşme dağıtmadan bunları düzeltemezler. Ve o zaman bile, savunmasız sözleşme hala var. Geliştiriciler, kullanıcı tabanının yeni sözleşmeye geçtiğinden emin olmalıdır.

Cadence‘de  akıllı sözleşme yükseltilebilirliği  yerleşik ve şeffaftır. Kodun güvenli ve nihai olduğu bildirildiğinde, anahtarlar akıllı sözleşmenin sahibinden kaldırılarak sözleşme değiştirilemez hale getirilebilir.

Genel olarak, Cadence, hataya daha az yer bırakan daha güvenli ve daha güvenli bir akıllı sözleşme dilidir.

Şimdi Solidity ve Cadence ile yazılmış akıllı sözleşmeler arasındaki farklara ayrıntılı olarak bakalım. Basit bir Hello World sözleşmesini ve ardından daha karmaşık bir NFT uygulamasını inceleyeceğiz.

Basit Sözleşme

Tüm zamanların klasiğiyle başlayalım. Hepimiz birden fazla dilde “Merhaba Dünya” yazdık, bu nedenle Cadence‘e kolay bir giriş.

Solidity vs Cadence
Solidity vs Cadence

Adım adım üzerinden geçelim.

Sözleşme Tanımı

İlk olarak, sözleşme tanımına sahibiz. Açık fark, Cadence sözleşmesinin bir erişim kontrol değiştiricisine sahip olmasıdır: bu durumda, pub. Bu değiştirici, Solidity sözleşmelerinin varsayılan davranışı olan Flow ağındaki herkesin sözleşmeye erişmesini sağlar.

Ancak Cadence‘de erişim kontrolünü  access(account). Bu, söz konusu sözleşmeyi dağıtan hesaba sözleşme erişimini sınırlar . Burada zaten Flow ve Ethereum arasında büyük bir fark görüyoruz. Sözleşmeleri sadece Flow blok zincirine dağıtmıyoruz; bunları hesap depomuza dağıtıyoruz. Flow blok zincirinde, her hesap, kaynakların ve yapıların depolanabileceği depolama ile başlatılır. Bu depolamanın kendi izinleri vardır, bu da bize sözleşmemizin yöntemlerini kimlerin uygulayabileceği konusunda ayrıntılı kontrol sağlar.

Sözleşme Değişkenleri

Sonraki satır, sözleşmemizin kapsamına giren bir dize değişkenini tanımlar. Cadence‘de noktalı virgül isteğe bağlıdır ve  let değişkeni tanımlamak için bir anahtar sözcük kullanılır.

Cadence, değişken ve değişmez olmak üzere iki tür değişkene sahiptir. let ile oluşturulan değişkenler değişmezdir veya sabitler olarak bilinirler; bunları yalnızca bir kez belirleyebiliriz ve sözleşmenin ömrü boyunca değiştirilemezler. Değişken değişkenleri (değiştirilebilenler) var anahtar kelimesi ile tanımlıyoruz.

Bu durumda, Cadence bu yöntemin her sözleşme dağıtımı için yalnızca bir kez çağrılmasını sağladığından, değişken değerini init yönteminde belirleriz.

Yöntemler

Solidity‘nin Cadence eşdeğeri  constructor yöntemdir  init . Bu yöntem tam olarak bir kez çağrılır—sözleşme dağıtıldığında.

init yönteminin içinde, karşılama değişkenimizin değerini belirledik. Solidity varsayılan olarak sözleşme değişkenlerine yazarken, Cadence yerel değişkenlere yazar ve sözleşme değişkenlerine erişmek için kendi kendine nesneyi kullanmanızı gerektirir. Bu karar, yazım hatası yaparken yanlışlıkla bir sözleşme değişkenine yazmanıza karşı koruma sağlar.

Sözleşmemizin ikinci yöntemi, karşılama değişkenini döndürür. Hem Cadence hem de Solidity‘de, yöntemin herkese açık olması için erişim bildirmeliyiz ve her iki dil de dönüş türünü tanımlamamızı gerektirir. Bu durumda, bir dizedir.

Ama Solidity burada daha düşük seviyeli olmamızı gerektiriyor. Dizenin nerede olduğunu açıkça söylememizi gerektirir. Ayrıca, blok zincirinin durumunu yanlışlıkla değiştirmememiz için işlevleri görünüm olarak işaretlememizi sağlar.

Kadans ise güçlü ve statik olarak yazıldığından bu düşük seviyeli kontrole ihtiyaç duymaz. Olası hatalar, program zincir üzerinde çalıştırılmadan önce yakalanır ve gereksiz anahtar kelimeleri kaldırarak tüm yöntem bildirimini daha okunaklı hale getirir.

NFT Sözleşmesi

Şimdi, her iki dilden de temel bir NFT sözleşmesine bakalım:

NFT Sözleşmesi Örneği, Solidity vs Cadence
NFT Sözleşmesi Örneği, Solidity vs Cadence

Her iki dilin de bu örneğe farklı yaklaşımları olduğundan, bunlara ayrı ayrı bakalım: önce Solidity örneğini, ardından Cadence’i inceleyelim.

Solidity

Solidity‘de bir NFT, temelde bir kimlik listesidir. Bu kimlikleri akıllı sözleşme içinde takip etmeli ve benzersizliği sağlamak için bunları manuel olarak artırmalısınız. Solidity, NFT’ler veya benzersizlikleri hakkında hiçbir şey bilmiyor. Bu, yalnızca sahipleriyle eşlenen ve tümü sözleşme dahilinde manuel olarak yönetilen kimliklerin bir listesidir. Bu, kimlik artışının uygun şekilde yapılmaması durumunda hataya yer bırakır ve potansiyel olarak aynı kimliklere sahip birden fazla NFT ile sonuçlanır.

Örnekte, NFT’nin eklenmiş herhangi bir verisi yoktur, ancak bir URI’ye başka bir eşleme kimliği ekleyebilirsiniz. Sözleşme, yeni basılan her NFT’nin bir mal sahibinin adresiyle eşlenmesini sağlar.

Bu basit bir örnek tabii. Genellikle, uzaktan güvenli bir NFT sözleşmesi ve iyi bilinen JPG’leri NFT’nize eklemek için kullanılan meta veriler gibi özellikler elde etmek için birkaç arabirimi genişletmeniz gerekir, ancak temel mekanizmalar aynıdır.

Cadence

Şimdi, Cadence versiyonuna ve bu Solidity örneğini nasıl geliştirdiğine bakalım.

Kaynak Tanımı

Cadence örneği, NFT adlı bir kaynak türüyle başlar. NFT önündeki @ sembolüne dikkat edin  NFT? Bu sembol, kaynak türlerinin kullanımının ve davranışının açık kalmasını sağladığı için gereklidir.

Bir kaynaktan örnekler oluşturabiliriz ve tıpkı bir yapı gibi niteliklere sahip olabilir. Normal bir yapıdan farkı, bir kaynağın depoladığı verilere ek olarak mülkiyeti işleyen özel bir tür olmasıdır.

Kaynak türünün içinde  NFTbir kimlik alanı vardır. Alan  id bir tamsayıdır  UInt64 ve her NFT kaynağına verilen benzersiz bir kimliktir. Bu  id , her NFT kaynağı için farklı olacaktır, yani kaynak çoğaltılamaz veya birleştirilemez. Ardından, init alan  işlev id kullanılarak başlatılır.

Rust’ın ödünç alma denetleyicisinin  yalnızca bir işlevin bir değişkeni değiştirebilmesini sağlamasına benzer şekilde, Cadence de kaynakları için aynı şeyi sağlar .

Kaynak Oluşturma

Yeni bir kaynak oluşturduğumuzda, onu depolama konumlarına taşımamız gerekir. Kaynağı olduğu gibi bırakırsak akıllı sözleşmemiz düzgün çalışmayacaktır, bu da bizi kaynaklar ve depolama konumları konusunda bilinçli olmaya zorlar. Bu denetim biçimi ayrıca kaynakların asla kaybolmamasını veya yanlışlıkla silinmemesini sağlar; aynı anda sadece bir yerde olabilirler.

Mint işlevini çağırdığımızda, NFT kaynağımızın yeni bir örneğini oluşturacaktır. Bu işlev, NFT türünde bir kaynak döndürür ve daha önce tanımlanan kaynaktan id alanını alır. Create anahtar sözcüğü, nesne yönelimli programlamada yeni bir kaynak yaratan new operatörüne benzer. <- veya move-operatörü, biz onu çağırdıktan sonra bu kaynağın kaynakta mevcut olmadığını açıkça belirtir.

Kaynağı Saklamak

Değişken  self.account , sözleşmemiz için dağıtım hedefi olarak kullandığımız hesaba işaret edecektir. Daha önce öğrendiğimiz gibi: akıllı sözleşmeler, Flow ağındaki küresel bir ad alanında değil, hesabınıza ait özel zincir üstü depolamada dağıtılır. Böylece akıllı sözleşme, hangi hesaba dağıtıldığını bilir ve bu bilgileri yöntemlerinde kullanabilir.

Bu örnekte, hesabın kaydetme yöntemini kullanıyoruz. Son  init fonksiyonda, kaynağı  save metotların ilk argümanına taşırız ve ona hesabın içindeki hangi yolun NFT’mizi saklaması gerektiğini söyleriz.

NFT’miz bir kaynak olduğundan, Flow ağındaki hiçbir varlık onu kopyalayamaz; benzersizliğini açıkça takip etmek zorunda değiliz.

Sonuç Bağlamı

Cadence, varlık oluşturma ve yönetimi için optimize edilmiş akıllı sözleşme programlama dillerine yeni bir bakış. Değişkenlerin ve kaynakların zorunlu yönetimi, temel düzeyde güvenlik ve erişim kontrolleri ve akıllı sözleşmeleri değiştirilemez hale getirmeden önce yükseltme yeteneği gibi yollarla Solidity’nin eksikliklerini azaltan modern bir alternatiftir. Cadence, sizi Flow ekosisteminin olanaklarına açar ve Rust gibi dillerden birçok özelliği bünyesinde barındırır.

Bu nedenle, temelde daha güvenli ve daha güvenli bir dilde akıllı sözleşmeler yazmak isteyen bir geliştiriciyseniz, Cadence mükemmel bir seçenektir. Daha fazla bilgi edinmek için  Cadence Belgelerine  ve  Flow Geliştirici Portalına bakın .

Akıllı sözleşme geliştirme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeirğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacğaım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

Hasan YILDIZ, Girişimci. Doktora Öğrencisi. Yazmayan YAZILIMCI. Veri Şeysi. Eğitmen...

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir