paint-brush
Ethereum için Solidity, TON için Tact'ın Anlamı Nedir — Tact Kullanarak TON'da Oylama Akıllı Sözleşmesi Nasıl Oluşturulurile@fakela
Yeni tarih

Ethereum için Solidity, TON için Tact'ın Anlamı Nedir — Tact Kullanarak TON'da Oylama Akıllı Sözleşmesi Nasıl Oluşturulur

ile Favour Kelvin8m2025/03/23
Read on Terminal Reader

Çok uzun; Okumak

Açık Ağ (TON), merkezi olmayan uygulamaları destekleyen, herkese açık, topluluk odaklı bir zincirdir. TON'un akıllı sözleşmeler yazmak için dört farklı dili vardır: Tact, Tolk, FunC ve Fift. Bu kılavuz Tact diline odaklanıyor ve temel bir oylama sözleşmesi oluşturmak için nasıl kullanılacağını göreceğiz.
featured image - Ethereum için Solidity, TON için Tact'ın Anlamı Nedir — Tact Kullanarak TON'da Oylama Akıllı Sözleşmesi Nasıl Oluşturulur
Favour Kelvin HackerNoon profile picture

Çoğu zaman, insanlar akıllı sözleşmeler yazmayı öğrenmeye başladıklarında duydukları ilk şey Solidity ve Ethereum'dur. Ben de ilk duyduğum şey buydu. Çoğu eğitimin odaklandığı şey budur ve bunun iyi bir nedeni vardır. Solidity, bir blok zincirinde yaşayan programlar yazmayı mümkün kıldı ve Ethereum birçok insanın başladığı yer oldu.


Ancak Solidity, piyasadaki tek akıllı sözleşme dili değildir. Ve Ethereum, merkezi olmayan uygulamaları destekleyen tek blok zinciri değildir.


Ayrıca The Open Network'ün kısaltması olan TON da var. Telegram tarafından yaratıldı, ancak artık herkese açık, topluluk odaklı bir zincir. Hızlı, hafif ve Ethereum'da alışkın olduğunuzdan biraz farklı şekilde işleri hallediyor. Buna akıllı sözleşmelerin nasıl yazıldığı da dahil. TON belgelerini incelemeye başladığımda akıllı sözleşmeler yazmak için dört farklı dille karşılaştım: Tact, Tolk, FunC ve Fift . Burada dördünü de derinlemesine incelemeyeceğim.


Bu rehber Tact diline odaklanıyor ve kullanıcıların oy kullanmasını ve sonuçları zincir üzerinde kontrol etmesini sağlayan temel bir oylama sözleşmesinin nasıl oluşturulacağını göreceğiz.

Neden Önce Tact Öğrenmeye Karar Verdim

TON ekosistemi aslında birden fazla dili destekler, her biri farklı kullanım durumlarına, soyutlama düzeylerine ve geliştirici deneyimine hizmet eder. İşte her birinin kısa bir özeti:


  • FunC, TON akıllı sözleşmeleri yazmak için kullanılan geleneksel dildir. Düşük seviyelidir ve sözleşmenizin perde arkasında nasıl çalıştığı konusunda size kesin bir kontrol sağlar. Güçlüdür, ancak aynı zamanda yığın manipülasyonu, bellek düzeni ve kesin yürütme gibi kavramlar dahil olmak üzere TON Sanal Makinesinin (TVM) nasıl çalıştığını anlamanız gerektiği anlamına gelir. Sözdizimi, daha önce bu dil stiliyle çalışmadıysanız size yabancı gelebilir ve C'ye biraz benzerdir.
  • Fift genellikle FunC ile birlikte kullanılır. Çoğunlukla TVM ile doğrudan etkileşim kurmak ve dağıtım, hata ayıklama ve zincir üstü hesaplamalar yapmak için kullanılan yığın tabanlı bir dildir. Genellikle tam akıllı sözleşmeler yazmak için başladığınız dil değildir, ancak TON'daki genel geliştirme iş akışında önemlidir.
  • Tolk, hala gelişmekte olan daha yeni bir eklentidir. Topladığım kadarıyla, daha üst düzey dillerle araç ve uyumluluğu geliştirmeyi amaçlıyor. Umut verici, ancak henüz yaygın olarak benimsenmedi veya belgelenmedi.
  • Tact , TON akıllı sözleşme gelişimini daha erişilebilir ve geliştirici dostu hale getirmek için özel olarak tasarlanmış üst düzey bir dildir. Tact, alt düzey karmaşıklığın çoğunu basitleştirir ve mantığınızı temiz, okunabilir bir şekilde yazmaya odaklanmanızı sağlar. Sözdizimi, TypeScript veya Solidity'de göreceğiniz şeye daha yakındır, bu da TVM iç işlerine derinlemesine dalmaya gerek kalmadan başlamayı çok daha kolaylaştırır.


Tact, TON blok zincirinde sözleşmelerin oluşturulması ve dağıtılması için daha hızlı bir yol sağlar.

Tact'ın Nasıl Çalıştığını Anlamak

Kod yazmaya başlamadan önce, Tact akıllı sözleşmelerinin nasıl yapılandırıldığını anlamak önemlidir. Tipik bir Tact sözleşmesi birkaç temel bileşen içerir:


  • contract bloğu – Burada sözleşmenizin adını tanımlayabilir ve tüm durum değişkenlerini bildirebilirsiniz.

  • init bloğu – Sözleşmenizin durum değişkenlerini başlatır ve sözleşmenin başlangıç koşullarını ayarlar. Bu blok dağıtım sırasında bir kez çalışır.

  • blokları receive – Bunlar olay dinleyicileri gibidir. Gelen mesajları işler ve sözleşmenizin bunlara nasıl tepki vereceğini tanımlarlar.

  • Getter fonksiyonları ( get fun ) – Bunlar, kullanıcıların veya diğer sözleşmelerin sözleşmenin durumunu değiştirmeden sorgulamasına izin veren isteğe bağlı salt okunur fonksiyonlardır.


Tact, TON'daki tüm etkileşimlerin işleyiş biçimi olan mesaj tabanlı iletişimi kullanır. Her sözleşme bir mesaj alır ve bunu kendi receive bloğunda işler. Bu mesaj tabanlı yapı, sözleşme mantığınızı modüler ve sürdürülebilir bir şekilde düzenlemenize yardımcı olur.


Şimdi bunu gerçek bir örnekte basit bir oylama sözleşmesi oluşturarak uygulayalım.

Tact ile İlk Oylama Sözleşmenizi Oluşturun (TON Web IDE'sini Kullanarak)

Bu bölümde, Tact kullanarak temel bir oylama sisteminin nasıl uygulanacağını ele alacağız. Bu oylama sözleşmesi kullanıcıların önceden tanımlanmış adaylara oy vermesine ve her adayın aldığı toplam oy sayısını izlemesine olanak tanır.


Her şeyi, yerel olarak hiçbir şey yüklemeden sözleşmelerinizi yazabileceğiniz, derleyebileceğiniz ve test edebileceğiniz tarayıcı içi bir araç olan TON Web IDE'nin içinde yapacağız.

Adım 1 – TON Web IDE'yi açın

  • https://ide.ton.org adresine gidin.
  • Yeni proje oluştur'a tıklayın. Açılan pencerede:
    • Dilin Tact'ta olduğundan emin olun.
    • Şablonunuz olarak Boş Sözleşme'yi seçin.
    • Projenize VotingContract gibi bir isim verin.
    • + Oluştur'a tıklayın.


Adım 2 – Oylama Sözleşmesi Kodunu Yazma

Projenizi oluşturduktan sonra main.tact dosyasını açın. Bir kalıp kurulumu göreceksiniz:

 // Import the Deployable trait so the contract can be deployed easily import "@stdlib/deploy"; contract BlankContract with Deployable { init() { } }
  • import "@stdlib/deploy"; gereklidir ve koddan kaldırılmamalıdır.
  • BlankContract yer tutucu adıdır.
  • init() bloğu yalnızca sözleşme dağıtıldığında bir kez çalışır ve durum değişkenlerini başlatmak için kullanılır.


Şimdi kendi kodumuzu haritalandıralım.


Öncelikle oylama için mesaj yapısını tanımlayalım:

 // Import the Deployable trait so the contract can be deployed easily import "@stdlib/deploy"; // Define a message structure for voting message Vote { candidate: Int as uint32; // 1 = Alice, 2 = Bob }

Bu, Oylama mesajıdır. Birisi oy vermek istediğinde, sözleşmeye bir numara içeren bir mesaj gönderecektir:

  • 1 Alice için
  • Bob için 2

Tact, gelen oyu işlemek ve hangi adayın puanı alacağına karar vermek için bu yapıyı kullanır.


Daha sonra sözleşmemizi oluşturacağız ve her adayın oylarını takip etmek için iki durum değişkeni ekleyeceğiz:

 ... contract VotingContract with Deployable { // State variables to track votes votesAlice: Int as uint32; votesBob: Int as uint32;

Sözleşme içerisinde iki değişken tanımladık:

  • votesAlice : Alice'in aldığı oy sayısını saklar.
  • votesBob : Bob'un aldığı oy sayısını depolar.


Şimdi, sözleşme ilk dağıtıldığında başlangıç durumunu ayarlamak için init bloğunun içindeki oy sayımlarını sıfırlayacağız.

 init() { self.votesAlice = 0; self.votesBob = 0; }

init bloğu yalnızca bir kez , sözleşme dağıtıldığında çalışır ve her iki oy sayısını da sıfırlar.


Şimdi mantık geliyor. Bir oy gönderildiğinde, sözleşmenin oyun kime ait olduğunu kontrol etmesini ve doğru oy sayısını artırmasını istiyoruz.

 // Handle vote messages receive(msg: Vote) { if (msg.candidate == 1) { self.votesAlice += 1; } else if (msg.candidate == 2) { self.votesBob += 1; } }

Yani bir oy alındığında:

  • Eğer msg.candidate 1 ise, votesAlice +1 ekliyoruz
  • Eğer msg.candidate 2 ise, votesBob +1 ekliyoruz


Son olarak, sözleşme durumunu değiştirmeden her adayın oy sayısını sorgulamaya izin veren getter fonksiyonları oluşturacağız.

 // Getter for Alice's votes get fun getVotesForAlice(): Int { return self.votesAlice; } // Getter for Bob's votes get fun getVotesForBob(): Int { return self.votesBob; } }

Bu iki getter fonksiyonu, sözleşmede hiçbir şeyi değiştirmeden her adayın aldığı oy sayısını kontrol etmemizi sağlar. Bu salt okunur bir işlemdir.


Aşağıda tam oylama sözleşmesi kodu yer almaktadır:

 import "@stdlib/deploy"; // Define a message structure for voting message Vote { candidate: Int as uint32; // 1 = Alice, 2 = Bob } contract VotingContract with Deployable { // State variables to track votes votesAlice: Int as uint32; votesBob: Int as uint32; init() { self.votesAlice = 0; self.votesBob = 0; } // Handle vote messages receive(msg: Vote) { if (msg.candidate == 1) { self.votesAlice += 1; } else if (msg.candidate == 2) { self.votesBob += 1; } } // Getter for Alice's votes get fun getVotesForAlice(): Int { return self.votesAlice; } // Getter for Bob's votes get fun getVotesForBob(): Int { return self.votesBob; } }

Adım 4 – Sözleşmeyi Oluşturun ve Dağıtın

  • Sol kenar çubuğunda, Oluştur ve Dağıt'a tıklayın

  • Ortam altında Sandbox'ın seçili olduğundan emin olun.
  • main.tact'ın seçili olduğundan emin olun ve Build'a tıklayın. Bu, sözleşmenizi derleyecek ve kodunuzdaki herhangi bir sözdizimi hatası veya sorunu kontrol edecektir.
  • Sonra, açılır menüde VotingContract'ın seçili olduğundan emin olun çünkü bu sizin gerçek sözleşmenizdir, varsayılan yer tutucu değildir. Eğer görmüyorsanız, IDE'nin güncellenmiş sözleşmeyi algılayabilmesi için dosyanızı kaydetmek üzere Ctrl + S tuşlarına basın.
  • Ardından ReDeploy'a tıklayın. Her şey doğru şekilde çalışıyorsa, sözleşmenizin Sandbox'ta başarıyla dağıtıldığını gösteren bir onay mesajını günlüklerde göreceksiniz.

Adım 5 – Sözleşmeyle Etkileşim Kurun

Dağıtıldıktan sonra aşağı kaydırın ve iki bölüm göreceksiniz:

  • Alıcılar: getVotesForAlice , getVotesForBob
  • Alıcılar: Vote

Oy kullanmak için: Oy Ver bölümünde, candidate giriş alanına 1 girin ve Gönder'e tıklayın. Az önce Alice'e oy verdiniz! Daha fazla oy kullanmak için bunu tekrarlayabilirsiniz.


Oy sayısını kontrol etmek için : getVotesForAlice altında Çağrı'ya tıklayın ve oy sayısını görmek için günlük panelini kontrol edin

  • Aynısını Bob için de yapın ve candidate alanına 2 gönderin, ardından getVotesForBob işaretleyin

Test çalışmamda Alice'e 9 kez , Bob'a ise 6 kez oy verdim ve getter fonksiyonları tam olarak bunu gösterdi.

💭 Son Düşünceler: İnşa Etmeye Devam Edin, Keşfetmeye Devam Edin

🙌 Eğer sonuna kadar okuduysanız tebrikler!


Artık Tact'te basit bir oylama sözleşmesinin nasıl çalıştığını gördüğünüze göre, TON'da akıllı sözleşme geliştirmeye ilk adımınızı attınız. Bu sözleşme temel olabilir, ancak yapı ve kavramlar daha karmaşık mantık için de geçerlidir.


Deney yapmaya devam etmek istiyorsanız, bu sözleşmeyi genişletmeyi veya https://tact-by-example.org/all adresinden önceden oluşturulmuş diğer şablonları keşfetmeyi deneyin. TON Web IDE ayrıca farklı kullanım durumlarını denemeyi kolaylaştırır ve daha hızlı oluşturmanıza ve öğrenmenize yardımcı olmak için şablonlarla birlikte gelir.


O halde devam edin, ince ayar yapın, test edin, daha iyisini inşa edin.