Pyteal Kurulum Aşamaları

Spread the love

Bu bölümde Python üzerinde Pyteal kurulum işlemlerinin nasıl yapılacağına bakacağız. İlk olarak pip isimli paket yönetim sistemidir kurmamız gerekiyor. Python dağıtımlarının çoğu önceden yüklenmiş pip ile gelmektedir.

Bundan dolayı Python kurulumu yaptıktan sonra pip kurulumu için ekstra bir şey yapmıyoruz. Pyteal kurulumu için ilk olarak;

pip3 install py-algorand-sdk

diyerek Algorand tarafından Python programlama dili için hazırlanan SDK’in kurulumunu yapıyoruz.

Ardından da;

pip install pyteal

diyerek pyteal kütüphanesini kuruyoruz.

Sistemin sorunsuz kurulduğunu Başlat>Cmd>Python>from pyteal import *

diyerek kontrol edebiliriz.


Görülebileceği gibi kodumuz sorunsuz çalıştı.

Şimdi birazcık teorik bilgiyle devam edelim. Akıllı sözleşmeler veya daha bilinen ismiyle akıllı kontratlar şu işe yarıyor. Aradaki aracıyı ortadan kaldırarak her iki tarafından kriptoloji ile düzenlenmiş bir dijital anlaşmaya güvenmesini sağlıyor. Biz işte burada bu dijital anlaşmayı yazıyoruz.

Şöyle bir düşünelim. Aracıların olmaması hangi alanlarda neleri değiştirir. Elbette ilk akla gelen tapu, nüfus gibi kayıtlar olacaktır. Fakat bunların ötesinde bugün itibariyle dahi güvenilir olmadığı için yeterince çalışmayan, insanların ilgisini çekmeyen sistemler var. Örneğin kitlesel bağış mekanizmaları. Halen daha toplumun yüzde kaçı bu sistemleri kullanıyor ? Bunların ötesinde bir de henüz elektronik işlemleri tamamen merkezi olarak düşündüğümüz, aracısız bir konsept hayal edemediğimiz için ortaya çıkmamış bir potansiyel de var. İşte bu nedenlerle akıllı kontratlar son derece önemlidir.

Algorand’ta akıllı kontratlar, Algorand Smart Contract (ASC) olarak geçer.

ASC’ler, İşlem Yürütme Onay Dili (TEAL) adı verilen bayt kodu tabanlı bir dilde yazılır. TEAL kısaltması, Transaction Execution Approval Language kelimelerinin başharflerinden gelmektedir ve Algorand projesi kapsamında yazılmış bir dildir. Bu dilde genel mantık blokzincir ağına yazılan bir işlemin sistemin kendi mantığına göre analiz edilerek onaylanıp onaylanmadığını ve sırasıyla doğru ya da yanlış onaylı ya da onaylanmamış olarak döndürülmesi esasına dayanmaktadır.

TEAL, işlemleri analiz edebilir ve onaylayabilir ancak işlemleri oluşturamaz veya değiştiremez ve sonuç olarak yalnızca doğru veya yanlış döndürür.

Şimdi ilk projemize geçiyoruz. İyi anlaşılması için kodumuzu satır satır inceleyeceğiz.

from pyteal import * diyerek Pyteal içerisindeki herşeyi buraya getir dedik.

Şimdi sadece para çekmeye izin veren bir kontrat yapalım. İlk olarak ;

def bank_for_account(receiver):

diyerek bir fonksiyon oluşturuyoruz. Bu fonksiyon receiver isimli bir parametre alıyor. Yukarıda kontratımızın sadece para çekmeye izin vereceğini söylemiştik. Buradaki receiver de işte bu alıcı oluyor. Bu alıcıya Algorand cüzdan adresini göndererek fonksiyonu çalıştıracağız. Şimdi fonksiyonun içine geçelim.

is_payment = Txn.type_enum() == TxnType.Payment

diyerek yapılan ödemenin türünü anlamaya çalışıyoruz. Burada Algorand tarafından sunulan bir tablo var. Bu tablo aşağıdaki şekilde.

Biz burada Txn.type_enum () == Int (1) diyerek payment veya Txn.type_enum () == Int (2) diyerek KeyRegistration seçimi yapabiliyoruz. Benzer şekilde AssetConfig, AssetTransfer, AssetFreeze seçimi gerçekleşebiliyor. Fakat bunlar biraz daha ileri seviye bilgi içerdiği için şimdilik geçiyoruz.

is_single_tx = Global.group_size() == Int(1) bu yukarıdaki tabloda da izah edildiği gibi ödeme yapılacağını gösteriyor.

is_correct_receiver = Txn.receiver() == Addr(receiver) ile alıcı adresinin gerçek bir adres olup olmadığını kontrol ediyoruz.

no_close_out_addr = Txn.close_remainder_to() == Global.zero_address() ile global sıfır adrese ayarlandığını kontrol eder. Bu, işlemin adres bakiyesini kapatmayacağı anlamına gelir, işlemin alıcısını istenen alıcıya ayarlar ve işlem miktarını istenen tutara ayarlar. Yani bir tür adres ve işlem miktarı ayarlaması yapılıyor.

acceptable_fee = Txn.fee() <= Int(1000) ile kabul edilen tutarı belli bir noktaya sınırlıyoruz. 1000 Algo olarak üst sınır koyuyoruz.

Ardından;

return And( is_payment,
    is_single_tx,
    is_correct_receiver,
    no_close_out_addr,
    no_rekey_addr,
    acceptable_fee
    )

Diyerek yapılan her işlem için AND durumu yani True olması gerektiğini belirtiyoruz. Eğer bunlar doğru olursa para çekme işlemi sorunsuz gerçekleşecek.

Para çekme fonksiyonumuzu bu şekilde oluşturduk. Ama bu fonksiyon program açıldığında çalışan ana fonksiyon değil. Şimdi ana fonksiyonumuzu da oluşturalım.

if __name__ == “__main__”:

    program = bank_for_account(“ZZAF5ARA4MEC5PVDOP64JM5O5MQST63Q2KOY2FLYFLXXD3PFSNJJBYAFZM”)

    print(compileTeal(program, Mode.Signature))

Aslında tek yaptığımız bizim fonksiyonumuzu çağırma işlemini belirlediğimiz cüzdanla yapmak. program olarak belirlediğimiz bu değişkeni de pyteal kütüphanesi içerisinde otomatik olarak gelen compileTeal fonksiyonuyla derlemek.

Kodumuz bu kadar. Artık bu kodu çalıştırdığımızda sözleşmemiz oluşacak. Çalıştıralım. Aşağıdaki şekilde bir sonuç döndü.

Dikkat ederseniz bu kod pragma ile başlayan bir akıllı kontrat. Bu sözleşmenin içinde ilk olarak

pragma version 2 ile sözleşmenin versiyonu yazdırılıyor.

Ardından;

txn TypeEnum

int pay  

global GroupSize

int 1

ile yukarıdaki tabloda verildiği şekilde bir ödeme yapılacağı gösteriliyor.

txn Receiver

addr ZZAF5ARA4MEC5PVDOP64JM5O5MQST63Q2KOY2FLYFLXXD3PFSNJJBYAFZM

alıcının adresini gösteriyor.

txn CloseRemainderTo

global ZeroAddress

==

&&

txn RekeyTo

global ZeroAddress

Buuradaki ZeroAddressler, boş bir bayt dizisini temsil eden bir adrestir. Bir işlemde bir adres alanını boş bıraktığınızda kullanılır.

txn Fee
int 1000
<=

Koduyla da alınacak Algo için 1000 Algo üst limiti koyduk.

Artık kontratımız tamamen hazır. Python dilini kullanarak kontratı kodladık, pyteal compile işlemiyle bunu TEAL dilinde bir kontrata çevirdik.

You may also like...