Ç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 kısaltması olan 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: . Burada dördünü de derinlemesine incelemeyeceğim. The Open Network'ün TON Tact, Tolk, FunC ve Fift 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: 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. FunC, 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. Fift 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. Tolk, , 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 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: bloğu – Burada sözleşmenizin adını tanımlayabilir ve tüm durum değişkenlerini bildirebilirsiniz. contract 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. init blokları – Bunlar olay dinleyicileri gibidir. Gelen mesajları işler ve sözleşmenizin bunlara nasıl tepki vereceğini tanımlarlar. receive Getter fonksiyonları ( ) – 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. get fun 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 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. receive Ş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 adresine gidin. https://ide.ton.org tıklayın. Açılan pencerede: Yeni proje oluştur'a Dilin olduğundan emin olun. Tact'ta Şablonunuz olarak seçin. Boş Sözleşme'yi Projenize gibi bir isim verin. VotingContract tıklayın. + Oluştur'a Adım 2 – Oylama Sözleşmesi Kodunu Yazma Projenizi oluşturduktan sonra dosyasını açın. Bir kalıp kurulumu göreceksiniz: main.tact // Import the Deployable trait so the contract can be deployed easily import "@stdlib/deploy"; contract BlankContract with Deployable { init() { } } gereklidir ve koddan kaldırılmamalıdır. import "@stdlib/deploy"; yer tutucu adıdır. BlankContract 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. init() Ş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: : Alice'in aldığı oy sayısını saklar. votesAlice : Bob'un aldığı oy sayısını depolar. votesBob Şimdi, sözleşme ilk dağıtıldığında başlangıç durumunu ayarlamak için bloğunun içindeki oy sayımlarını sıfırlayacağız. init init() { self.votesAlice = 0; self.votesBob = 0; } bloğu , sözleşme dağıtıldığında çalışır ve her iki oy sayısını da sıfırlar. init yalnızca bir kez Ş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 1 ise, +1 ekliyoruz msg.candidate votesAlice Eğer 2 ise, +1 ekliyoruz msg.candidate votesBob 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, tıklayın Oluştur ve Dağıt'a altında seçili olduğundan emin olun. Ortam Sandbox'ın seçili olduğundan emin olun ve tıklayın. Bu, sözleşmenizi derleyecek ve kodunuzdaki herhangi bir sözdizimi hatası veya sorunu kontrol edecektir. main.tact'ın Build'a Sonra, açılır menüde 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 tuşlarına basın. VotingContract'ın Ctrl + S Ardından 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. ReDeploy'a 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 bölümünde, giriş alanına girin ve Az önce Alice'e oy verdiniz! Daha fazla oy kullanmak için bunu tekrarlayabilirsiniz. Oy kullanmak için: Oy Ver candidate 1 Gönder'e tıklayın. : altında tıklayın ve oy sayısını görmek için panelini kontrol edin Oy sayısını kontrol etmek için getVotesForAlice Çağrı'ya günlük Aynısını Bob için de yapın ve alanına gönderin, ardından işaretleyin candidate 2 getVotesForBob Test çalışmamda Alice'e , Bob'a ise oy verdim ve getter fonksiyonları tam olarak bunu gösterdi. 9 kez 6 kez 💭 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 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. https://tact-by-example.org/all O halde devam edin, ince ayar yapın, test edin, daha iyisini inşa edin.