
Plutus Nedir?
Plutus, Cardano Blockchain’inde akıllı sözleşmeler yazmak için kullanılan Haskell tabanlı bir programlama dilidir.
Güvenli ve doğrulanabilir (Haskell tabanlı ve hata payı oldukça düşük), merkeziyetsiz ve şeffaf, hızlı ve düşük maliyetli işlem gücüne sahip.
Plutus’u çalıştırmak için ihtiyacımız olan şeyler:
1- İşletim Sistemi (Windows + WSL) Not: Bu yazıda sadece Windows üzerinde çalıştırmayı göstereceğim.
2- Terminal PowerShell
3- Nix Paket Yöneticisi (Plutus ortamını kurmak için kullanacağız)
4- Git ve Geliştirme Araçları
5- Yerel Plutus Ortamı
Windows Kullanıcıları İçin (WSL2 + Ubuntu)
Windows Subsystem for Linux (WSL2) kullanarak Ubuntu’yu çalıştırmak genellikle en çok tercih edilen yöntemdir.
1- PowerShell’i Yönetici Olarak Çalıştırın
2- WSL2’yi Etkinleştirin:
Daha detaylı bilgi burada bulunabilir.
wsl --install
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Daha sonra, bilgisayarınızı yeniden başlatın
3- Gerekli Dosyaları Güncelleyin:
WSL güncellemesi varsa indirin ve yükleyin:
Yükleme tamamlandıktan sonra PowerShell’de şu komutları çalıştırın:
wsl --set-default-version 2
WSL sürümünüzü doğrulamak için:
wsl --list --verbose
4- Ubuntu’yu İndirin ve Kurun
Ubuntu 22.04 LTS WSL İmajını İndirin:
İndirilen dosyayı çalıştırın.
Bu işlem tamamlandığında Ubuntu terminali açılacak ve sizden bir kullanıcı adı + şifre belirlemenizi isteyecek.
Daha sonrasında Paketleri Güncelleyin ve Gerekli Araçları Yükleyin:
sudo apt update && sudo apt upgrade -y
sudo apt install curl git build-essential jq -y
5- Nix Paket Yöneticisini Yükleyin:
Nix’i yükleyin:
sh <(curl -L https://nixos.org/nix/install) --daemon
Terminali kapatıp tekrar açın, ardından şu komutlarla kurulumun başarılı olup olmadığını kontrol edin:
nix --version
nix-env --version
Eğer bir sürüm numarası görüyorsanız, Nix doğru şekilde kurulmuştur!
6- Git Kurulumu ve Plutus Reposunun İndirilmesi
Git’in kurulu olup olmadığını kontrol edin, eğer yüklü değilse yükleyin:
sudo apt install git -y
git --version
Plutus reposunu klonlayın:
git clone https://github.com/input-output-hk/plutus.git
Plutus klasörüne girin:
cd plutus

“Plutus üzerinde dApp geliştirme”
Plutus üzerinde bir dApp yazmak için her şey hazır gözüküyorsa, başlayabiliriz:
Proje Oluşturma
İlk olarak, projemiz için bir dizin oluşturalım, ben basit bir sertifikasyon dApp’i geliştirmek istiyorum:
mkdir plutus-certification-dapp
cd plutus-certification-dapp
Plutus ortamını çalıştırmak için:
nix-shell
Akıllı Sözleşmeyi Yazma
Yeni bir Haskell dosyası oluşturun:
nano CertificationContract.hs
Aşağıdaki kod ile sertifikanın sahibi ve ID’sı gibi verileri girdikten sonra. Bu verileri zincir üzerinde kontrol edecek ve doğrulayacak akıllı sözleşmeyi yazıyorum. Yanlış bir adres ile erişilmeye çalışıldığında hata vermesini istiyorum:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE NoImplicitPrelude #-}
module CertificationContract whereimport PlutusTx
import PlutusTx.Prelude
import Ledger
import Ledger.Typed.Scripts
import Playground.Contract-- Sertifika veri tipi
data CertificationDatum = CertificationDatum
{ owner :: PubKeyHash -- Sertifika sahibi
, certId :: Integer -- Sertifika ID'si
}
PlutusTx.unstableMakeIsData ''CertificationDatum-- Sertifikayı doğrulayan akıllı sözleşme
{-# INLINABLE mkCertificationValidator #-}
mkCertificationValidator :: CertificationDatum -> () -> ScriptContext -> Bool
mkCertificationValidator datum _ ctx =
traceIfFalse "Hatalı Eslesme" (txSignedBy info (owner datum))
where
info = scriptContextTxInfo ctx-- Akıllı sözleşmenin derlenmesi
data Certification
instance Scripts.ValidatorTypes Certification where
type instance DatumType Certification = CertificationDatum
type instance RedeemerType Certification = ()typedValidator :: Scripts.TypedValidator Certification
typedValidator = Scripts.mkTypedValidator @Certification
$$(PlutusTx.compile [|| mkCertificationValidator ||])
$$(PlutusTx.compile [|| wrap ||])
where
wrap = Scripts.wrapValidator @CertificationDatum @()validator :: Validator
validator = Scripts.validatorScript typedValidatorvalHash :: Ledger.ValidatorHash
valHash = Scripts.validatorHash typedValidatorscrAddress :: Ledger.Address
scrAddress = scriptAddress validator
Sonuç olarak;
Kullanıcıların PubKeyHash (cüzdan adresi) ve sertifika ID’si ile birer sertifika kaydedebilmelerini sağlayacağız.
Kullanıcı, yalnızca kendisine ait bir sertifikayı doğrulayabilecek, ve yanlış cüzdan adresiyle doğrulama yapıldığı vakit işlem başarısız olacak.
Cardano CLI ile dApp’i Test Etme
Öncelikle Cardano CLI aracını yükleyelim:
sudo apt install cardano-cli -y
Bir Kullanıcı İçin Sertifika Oluşturma
Bir test cüzdanı için sertifika oluşturalım
cardano-cli address key-gen --verification-key-file user.vkey --signing-key-file user.skey
USER_PKH=$(cardano-cli address key-hash --payment-verification-key-file user.vkey)
Sertifikayı Blockchain’e ekleyelim:
cardano-cli transaction build \
--tx-in <TX_ID>#0 \
--tx-out "$(cat user.addr) + 1000000 lovelace" \
--tx-out "$(cat script.addr) + 2000000 lovelace" \
--change-address $(cat user.addr) \
--out-file tx.raw
💡 Burada <TX_ID> kısmını, kullanıcının sahip olduğu bir UTXO ile değiştirmeliyiz.
Ardından işlemi imzalayıp gönderebiliriz:
cardano-cli transaction sign --signing-key-file user.skey --tx-body-file tx.raw --out-file tx.signed
cardano-cli transaction submit --tx-file tx.signed
Böylelikle, sertifika blockchain’e yüklenir!
Bu dApp sayesinde, kullanıcılar sertifikalarını doğrulayabilir, İzni olmayan bir kullanıcı doğrulama yapamaz.
Basit bir şekilde Plutus üzerinden sertifika kayıt sistemi oluşturduk. Bir de bu dApp için bir frontend arayüzü gerekiyor şimdi…


Bir Cevap Yazın