Plutus ile Blockchain Uygulaması Oluşturma başlıklı yazı ilk olarak Coinpedia Fintech Haberleri'nde yayınlandı

Giriiş

Blockchain, merkezi olmayan ve şeffaf çözümleriyle çeşitli endüstrilere katkıda bulunmaktadır. Geliştirme alanındaki ilerlemeler, geliştiriciler ve topluluklar üzerinde dönüştürücü bir değişime neden olmuştur. Blockchain'in faydaları, merkezi olmayanın ötesine uzanır. İşlem için gereken zamandan tasarruf sağlar ve herhangi bir üçüncü taraf doğrulamasına ihtiyaç duymaz, bu da dolandırıcılık ve siber saldırı risklerini azaltır. Bir geliştirici olarak, özellikle Plutus gibi güçlü araçlar kullanıldığında, blockchain uygulamalarının nasıl oluşturulacağını anlamak değerlidir. Plutus, Cardano blockchain'inde akıllı sözleşme platformudur. Geliştiricilerin güvenli ve verimli merkezi olmayan uygulamalar (DApp'ler) oluşturmaları için sağlam bir çerçeve sunar.

Cardano Nedir?

Cardano Charles Hoskinson (Ethereum'un kurucu ortağı) tarafından 2017'de başlatılan bir blok zinciri platformudur. Cardano, genellikle ikinci nesil bir platform olan Ethereum'a bir alternatif olarak kabul edilen üçüncü nesil bir platformdur. Geleneksel olanlardan daha verimli olan bir hisse kanıtı mekanizması kullanır. Cardano'nun, Ada Lovelace'ın adını taşıyan kendi kripto para birimi ADA'sı vardır. Biri işlemleri ve hesapları yönetirken diğeri akıllı sözleşmeleri ve hesaplamayı yönetmek için kullanılan iki ayrı katmanı vardır. Cardano, seleflerinden daha güvenli, ölçeklenebilir ve uyarlanabilir bir blok zinciri platformu oluşturmayı amaçlamaktadır ve tedarik zinciri yönetimi, dijital kimlik doğrulama ve gelişmekte olan pazarlardaki finansal hizmetler dahil olmak üzere çeşitli uygulamalarda kullanılmaktadır.

Plüton

Plutus, Cardano tabanlı akıllı sözleşmeler yazmak için kullanılan bir programlama dilidir. Plutus, işlevsel bir dil olan Haskell'e dayanır. Bir geliştirici olarak, Plutus Core'u yazmanıza gerek yoktur, bunun yerine tüm betikler bir Haskell derleyici eklentisi tarafından oluşturulacaktır. Plutus, bir programın doğruluğunu matematik kullanarak kanıtlamanın bir yolunu sağlayan Biçimsel doğrulamayı destekler. Bu nedenle, güvenliği artırır ve akıllı sözleşmede herhangi bir hata olasılığını azaltır.

Plutus, Cardano blok zincirine doğal olarak entegre edilmiştir ve geliştiricilerin Cardano'nun muhasebe defteri ve altyapısıyla doğrudan etkileşim kurmasına olanak tanır. Bu, Cardano ekosistemiyle doğrudan etkileşim kuran akıllı sözleşmeleri oluşturmanıza ve dağıtmanıza yardımcı olur. Plutus, tam Cardano düğümü olmadan akıllı sözleşmeleri simüle etmenize ve ana ağa dağıtmadan önce denemeler yapmanıza yardımcı olan araçlara sahiptir. Plutus, güvenilir ve yüksek performanslı merkezi olmayan uygulamalar oluşturmak isteyen geliştiriciler için oldukça uygundur.

Kitle

Bu makale, temel programlama konusunda çok az bilgisi olan ve blockchain geliştirmeye yeni başlayan geliştiricilere yöneliktir. Ortamınızı kurmanın, blockchain kavramlarını anlamanın ve Plutus kullanarak basit bir blockchain uygulaması oluşturmanın temel adımlarında size yol göstereceğiz.

Geliştirme Ortamının Kurulması

Gelişim yolculuğuna başlamadan önce mükemmel bir kuruluma sahip olmak çok önemlidir. Bu nedenle Plutus'u destekleyen bir ortam kurmak bu bölümün basamak taşıdır.

1. Plutus'u Yükleme

Plutus'u resmi depodan indirin:

git klonu https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell

Kurulumu şu şekilde doğrulayın: plutus -v

2. Bir IDE Seçimi

Plutus ile uygulama geliştirirken doğru IDE'ye sahip olmak çok önemlidir. Plutus, Haskell tabanlıdır, bu nedenle Haskell'i destekleyen bir IDE'ye sahip olmak önerilir. Plutus geliştirme için iki popüler seçenek Visual Studio Code (VS Code) ve Plutus Playground'dur. İşte bu IDE'leri Plutus geliştirme için nasıl kuracağınız ve kullanacağınıza dair genişletilmiş bir kılavuz.

Visual Studio Code: VS Code, hemen hemen her dili destekleyen ve çok faydalı uzantılara sahip çok esnek ve çok yönlü bir Kod düzenleyicisidir. Bu nedenle geliştiricilerin üzerinde çalışmayı en çok sevdiği düzenleyicidir. VSCode açık kaynaklıdır ve kodu tamamlamak için çok çeşitli araçlar ve özellikler sağlar.

VSCode'u kurma adımları:

  • VSCode'u resmi siteden indirin (işletim sisteminize göre)

  • Yazılımı yükleyin

  • Plutus, Haskell üzerine inşa edilmiştir, dolayısıyla Glasgow Haskell Derleyicisi'ni (GHC) ve Cabal'ı (Haskell için bir derleme aracı) içeren Haskell Platformunu yüklemeniz gerekir.

  • Haskell'i indirin

  • VS Code'a Haskell uzantılarını yükleyin (Haskero, Haskell Sözdizimi Vurgulama, vb.)

  • Uzantıları yapılandırın ve ek uzantılar ayarlayın

  • Plutus'u zaten kurduğunuza göre artık hazırsınız!!

Plutus Playground: Plutus Playground, özellikle Plutus akıllı sözleşmeleri için çevrimiçi bir web tabanlı düzenleyicidir. Bu nedenle herhangi bir kuruluma gerek yoktur ve kodlama yaparken yeni başlayanların biraz güven kazanması için mükemmeldir.

Plutus Playground web sitesini ziyaret edip hemen başlayabilirsiniz!!

Her iki ortam da Plutus geliştirme için etkili bir şekilde kullanılabilir ve ikisini birleştirmenin (daha büyük projeler için VS Code'u, hızlı test ve prototipleme için Plutus Playground'u kullanmanın) her iki dünyanın da en iyilerini sağladığını görebilirsiniz.

3. Gerekli Kütüphanelerin Kurulumu

Plutus geliştirme için gerekli kütüphaneleri kurmak amacıyla cabal'ı kullanın.

Plutus ile Blockchain Kavramlarını Anlamak

Blockchain, işlem kayıtlarını bloklar halinde depolayan dağıtılmış ve gelişmiş bir veritabanıdır. Blokların her biri kriptografik prensipler kullanılarak birbirine bağlanmalıdır. Blokları korumak için sağlam mekanizmalar kullanılır, böylece para birimlerinin kayıtlarını zamanından önce ve sonraki blokları etkilemeden değiştiremezsiniz.

Blockchain’in üç temel bileşeni vardır:

  • Bloklar: Bloklar, meta verilerle birlikte işlemler hakkında bilgi içerir. Tüm bloklar, bir blok zinciri oluşturan karma yoluyla birbirine bağlanır, dolayısıyla blok zinciri

  • İşlemler: İşlem, blok zinciri içinde bir varlıktan diğerine veri transferidir. Plutus'ta işlemler Haskell'de yazılır ve giriş ve çıkış UTXO'larını (Harcanmamış İşlem Çıktıları) içerir.

  • Zincirler: Plutus'ta zincir, işlemlerin sırasını korur ve onaylandıktan sonra değiştirilemez olmasını sağlar.

Aşağıdaki kod parçacığında Plutus'taki Blok yapısını görebiliriz:

Bloğun her bileşeni, veri türüyle birlikte belirtilir

  • Dizin, bir bloğun konumunu belirten bir tam sayıdır

  • Zaman damgası, bloğun oluşturulduğu zamandır

  • İşlemler, belirli bir blokta yer alan tüm işlemlerin dizisi veya listesidir

  • Karma, benzersiz bir desendir ve bir bloğu tanımlamanın birincil anahtarıdır

  • Önceki karma, sürekliliğe atıfta bulunur ve son bloğun karmasıdır

Bu kod parçacığında Plutus'taki Transactions yapısını görebiliriz:

Merkeziyetsizlik, Değiştirilemezlik ve Mutabakat Mekanizmaları:

Blockchain'in temeli üç temel ilkeye dayanır: Merkeziyetsizlik, Değiştirilemezlik ve Konsensüs Mekanizması

Merkeziyetsizlik: Merkeziyetsizlik, Blockchain veritabanı üzerinde tek bir varlığın kontrol sahibi olmadığı ve sistemin başarısızlığını ve taraflılığı neredeyse imkansız hale getiren bir özelliktir. Her katılımcı cihaz (düğüm), blockchain'in bir kopyasını tutar, şeffaflığı garanti eder ve merkezi başarısızlığı veya manipülasyonu engeller.

Değiştirilemezlik: Veriler bir blok zincirine yazıldıktan sonra, sonraki tüm bloklar değiştirilmeden değiştirilemez. Bu, kriptografik karma yardımıyla yapılır. Dolayısıyla bir kez yapılan tüm değişiklikler geri alınamaz ve bu da onu değiştirilemez hale getirir.

Mutabakat Mekanizması: Blockchain'in tüm gerekliliklerini yöneten bir protokol kümesi. Ağdaki tüm düğümlerin yöntemler konusunda anlaşması gerekir. Mutabakat mekanizmaları düğümleri düzene sokmak ve ağdaki tüm düğümlerin aynı sayfada olduğundan emin olmak için kullanılır.

Plutus ile Basit Bir Blockchain Oluşturma

Blok, herhangi bir blok zincirinin ilkel birimidir. Bu kod parçasında, bileşenleriyle birlikte bir blok veri türü tanımladık.

Ayrıca blok sınıfını tanımladıktan sonra, her bloğun benzersiz bir karmaya sahip olması gereken blockchain'in bütünlüğünü sağlamamız gerekir. Bu nedenle, hesaplama karması işleviyle, Plutus'ta aynı şey için SHA256 popüler karma yöntemini kullanırız.

Bir bloğun Tanımını tamamladıktan sonra devam edin ve herhangi bir blok zinciri için ilk blok olan bir genesis bloğunun yardımıyla blok zincirinizi başlatın. Vay canına!! Az önce bir blok zinciri oluşturdunuz ama bu kadar değil, yeni bloklar eklemeniz ve en son bloğu da almanız gerekiyor.

Yardıma ihtiyacınız olması durumunda aşağıdaki koda göz atabilirsiniz!

Plutus'ta Mutabakat Mekanizmalarının Uygulanması

Cardano, ilk olarak İş Kanıtı'nı benimsemiş olsa da PoS mekanizmasını kullanıyor. Plutus, merkezi olmayan uygulamalar (DApp'ler) için ölçeklenebilirlik, enerji verimliliği ve güvenlik sunan Cardano'nun Ouroboros PoS protokolüyle uyumlu olacak şekilde tasarlanmıştır.

İşte Plutus ile çalışabilen fikir birliği algoritmalarına genel bir bakış

  • Ouroboros: Ouroboros, Plutus'un oldukça uyumlu olduğu bir Proof of stake mekanizmasıdır ve doğrulayıcıların yeni bir bloğu doğrulamak için üstlenmeye istekli olduğu ADA'nın payına bağlıdır. Plutus sözleşmeleri Ouroboros protokolüyle sorunsuz bir şekilde etkileşime girerek akıllı sözleşmelerin yürütülmesinin güvenli ve enerji açısından verimli kalmasını sağlar.

  • İş Kanıtı: PoW en eski mekanizmadır ve tüm eski kripto paralarda yaygın olarak kullanılmıştır. Plutus örneğinde hala kağıt üzerinde uygulanabilir. Bu, eğitim amaçları ve deneysel amaçlar gibi izole senaryoları düşünürken daha faydalı olacaktır.

  • Delege edilmiş iş kanıtı ve Bizans hata toleransı: Bu mekanizmalar Cardano ile özellikle uyumlu değildir ancak yine de teorik olarak Plutus'ta uygulanabilir.

Bu bölümde Plutus'ta İş Kanıtı'nın nasıl kullanılabileceğini inceleyeceğiz.

Proof of Work'te, madencilerin yeni coin'in doğrulayıcıları olmak için kriptografik bir bulmacayı çözmek için zamanla yarışmaları gerekir. Bu kodda, proof of work fonksiyonu, önceki bloğun karmasıyla birleştirildiğinde belirli sayıda önde gelen sıfıra sahip bir karma üreten bir nonce arar. Bu, zorluk seviyesinin geçerli bir nonce bulmanın ne kadar zor olduğunu belirlediği PoW'un temel bir uygulamasıdır.

İş Kanıtı uygulamasını tamamladığınızda, çıkarılan kanıtı doğrulamak için blok zincirini güncellemeniz gerekir.

Örnek kod parçacığı şöyledir:

Bu fonksiyon, yeni bir bloğun yalnızca kanıtı geçerliyse blok zincirine eklenmesini sağlayarak zincirin bütünlüğünü korur.

Plutus ile Basit Bir Blockchain API'si Oluşturma

Bu bölümde, Plutus kullanılarak oluşturulmuş bir blockchain uygulamasıyla etkileşim kurmak için basit bir API'nin nasıl oluşturulacağını öğreneceksiniz. Bu API, HTTP istekleri aracılığıyla blok eklemenize ve blockchain'i görüntülemenize olanak tanır.

API oluşturma adımları:

  • API için Ortamı Ayarlayın: Haskel'i kurun (ki bu zaten yapıldı), ardından Cabal'ı kullanarak Servant'ı kurun

  • Gerekli tüm kütüphaneleri indirin:

    • Hizmetçi: API'yi oluşturmak için

    • Aeson JSON'u kodlamak ve kodunu çözmek için: cabal install aeson plutus-core

    • Tüm kod ve mantığı entegre etmek için Plutus

API'yi Oluşturmaya başlamak için önce yeni bir blok eklememiz ve blok zincirinin mevcut durumunu emekliye ayırmamız gerekir. Bu adımların her ikisi de yukarıdaki bölümlerde gerçekleştirilmiştir.

Artık uç noktaları tanımlamaya geçebilirsiniz:

{-# DİL DataKinds #-}{-# DİL TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— Blok türünü tanımlayın (Bölüm 3'e bakın)data Block = Block  { index        :: Int  , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } türetme (Göster, Eşitlik)— Blockchain basitçe bir Blockstype listesidir Blockchain = [Block]— API türünü tanımlayın typetype BlockchainAPI =  “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain— Başlangıçta sadece genesis ile başlayarak blockchain için yer tutucu blockgenesisBlock = Block 0 “2024-09-12 00:00:00” “Genesis Block” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]–– API uç noktaları için işleyicileraddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock]    liftIO $ putStrLn “Blok eklendi!”     return newBlockchain— Chainview'u almak için işleyiciChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain–API'yi çalıştırmak için ana giriş noktasıapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)

Yukarıdaki kodun açıklaması:

  • Blok, önceki bölümlere benzer şekilde tanımlanmıştır

  • API'nin yapısını tanımlamak için Servant kütüphanesi kullanılır. API uç noktalarını tanımlamak için iki yöntem vardır, GET ve POST, sırasıyla blok zincirini alma ve ekleme anlamına gelir.

  • Ayrıca eklenen yeni blokları işlemek için (addBlockHandler) ve diğer bloğu görüntülemek için (viewChainHandler) işleyicileri tanımladık

  • Son olarak, kodun kalbini oluşturan, her şeyi birbirine bağlayan ve API sunucusunu çalıştıran bir ana fonksiyon var.

API tanımı yapıldıktan sonra Uç Noktaları eklemek ve Blockchain Uç Noktası bilgilerini almak için iki yönteminiz var.

Harika!! Bu alt bölümü başarıyla uyguladınız ve artık API'yi Cabal kullanarak çalıştırabilir ve bir sonraki bölüme geçebilirsiniz.

Uygulamayı Çalıştırma ve Test Etme

Blockchain API'sini oluşturduktan sonra, onu test etme zamanı geldi. API ile etkileşim kurmak ve doğru çalıştığını doğrulamak için Postman veya curl kullanacağız.

Uygulamayı Çalıştırma ve Test Etme Adımları:

  • Programı derleyin ve çalıştırın:  cabal build   cabal run

  • Sunucuyu başlatın: API http://localhost:8080 adresinde mevcut olmalıdır

  • Blok uç noktalarını test edin ve ekleyin

{  “index”: 1,  “timestamp”: “2024-09-12 12:30:00”,  “dataField”: “Bu benim yeni bloğum”,  “previousHash”: “some_hash”,  “hash”: “new_block_hash”}

Blockchain'i görüntüle

kıvrıl http://localhost:8080/chain

Bu adımları izleyerek artık Plutus kullanılarak oluşturulmuş bir API ile çalışan basit bir blok zinciri uygulamanız var. API, harici uygulamaların veya kullanıcıların yeni bloklar ekleyerek ve mevcut blok zinciri durumunu görüntüleyerek blok zincirinizle etkileşime girmesine olanak tanır.

Plutus ile Blockchain Uygulaması Oluşturmanın Canlı Örneği

Yukarıdaki kod parçası, aşağıdakinin adım adım yürütülmesidir:

  • Adım 1: Plutus sözdizimini kullanarak gerekli niteliklerle Blok veri türünü oluşturun.

  • Adım 2: calculate_hash metodunu uygulayın.

  • Adım 3: Blockchain veri türünü tanımlayın ve bir genesis bloğu ile başlatın.

  • Adım 4: Plutus'u kullanarak yeni bloklar eklemek ve en son bloğu almak için yöntemleri uygulayın.

  • Adım 5: Blok veri türüne İş Kanıtı işlevselliğini ekleyin ve Blockchain veri türünü güncelleyin.

  • Adım 6: Plutus'u kullanarak istekleri işleyecek API ortamını ayarlayın.

  • Adım 7: Yeni bir blok madenciliği yaparak ve Postman veya Curl kullanarak blok zincirini doğrulayarak uygulamayı test edin

Tebrikler! Modülün sonuna ulaştınız ve Plutus'un tüm temellerini öğrendiniz.

Plutus ile blok zinciri geliştirmeye giriştiğinizde, yalnızca kod yazmıyorsunuz; endüstrileri yeniden tanımlayabilecek merkezi olmayan sistemlerin omurgasını oluşturuyorsunuz. Öğrenmeye ve Mutlu Kodlamaya Devam Edin!!

Ayrıca Şunlara Bakın: Kendi Kripto Paranızı Nasıl Tasarlayabilir, Geliştirebilir ve Dağıtabilirsiniz: Adım Adım Kılavuz