paint-brush
Soliditeti është për Ethereum Çfarë është takti për TON - Si të ndërtoni një kontratë të zgjuar votimi në TON duke përdorur taktnga@fakela
Histori e re

Soliditeti është për Ethereum Çfarë është takti për TON - Si të ndërtoni një kontratë të zgjuar votimi në TON duke përdorur takt

nga Favour Kelvin8m2025/03/23
Read on Terminal Reader

Shume gjate; Te lexosh

Rrjeti i hapur (TON) është një zinxhir publik, i drejtuar nga komuniteti, që mbështet aplikacione të decentralizuara. TON ka katër gjuhë të ndryshme për të shkruar kontrata inteligjente: Tact, Tolk, FunC dhe Fift. Ky udhëzues përqendrohet në gjuhën Takt dhe ne do të shohim se si ta përdorim atë për të ndërtuar një kontratë bazë votimi.
featured image - Soliditeti është për Ethereum Çfarë është takti për TON - Si të ndërtoni një kontratë të zgjuar votimi në TON duke përdorur takt
Favour Kelvin HackerNoon profile picture

Në shumicën e rasteve, kur njerëzit fillojnë të mësojnë se si të shkruajnë kontrata inteligjente, gjëja e parë për të cilën dëgjojnë është Solidity dhe Ethereum. Kjo ishte edhe gjëja e parë që dëgjova. Kjo është ajo ku shumica e mësimeve fokusohen, dhe për arsye të mirë. Solidity bëri të mundur shkrimin e programeve që jetojnë në një blockchain dhe Ethereum u bë vendi ku filluan shumë njerëz.


Por Solidity nuk është e vetmja gjuhë e zgjuar e kontratës atje. Dhe Ethereum nuk është i vetmi blockchain që mbështet aplikacione të decentralizuara.


Ekziston edhe TON , shkurtim i The Open Network . Ai u krijua nga Telegram, por tani është një zinxhir publik, i drejtuar nga komuniteti. Është i shpejtë, i lehtë dhe i trajton gjërat pak më ndryshe nga sa mund të jeni mësuar në Ethereum. Kjo përfshin mënyrën se si shkruhen kontratat inteligjente. Kur fillova të eksploroja dokumentacionin TON, hasa në katër gjuhë të ndryshme për të shkruar kontrata inteligjente: Tact, Tolk, FunC dhe Fift . Nuk do të hyj thellë në të katër këtu.


Ky udhëzues fokusohet në gjuhën Takt dhe ne do të shohim se si ta përdorim atë për të ndërtuar një kontratë votimi bazë që lejon përdoruesit të votojnë dhe të kontrollojnë rezultatet në zinxhir.

Pse vendosa të mësoj taktin së pari

Ekosistemi TON në fakt mbështet shumë gjuhë, secila shërben për raste të ndryshme përdorimi, nivele abstraksioni dhe përvojë të zhvilluesit. Këtu është një përmbledhje e shpejtë e secilit prej tyre:


  • FunC është gjuha tradicionale për të shkruar kontrata inteligjente TON. Është e nivelit të ulët dhe ju jep kontroll të saktë se si funksionon kontrata juaj nën kapuç. Është i fuqishëm, por do të thotë gjithashtu se do t'ju duhet të kuptoni se si funksionon Makina Virtuale TON (TVM), duke përfshirë koncepte si manipulimi i stivës, faqosja e memories dhe ekzekutimi determinist. Sintaksa është disi e ngjashme me C, e cila mund të duket e panjohur nëse nuk keni punuar më parë me atë stil të gjuhës.
  • Fift zakonisht përdoret së bashku me FunC. Është një gjuhë e bazuar në pirg që përdoret kryesisht për ndërveprim direkt me TVM dhe përdoret për vendosjen, korrigjimin dhe kryerjen e llogaritjeve në zinxhir. Zakonisht nuk është gjuha me të cilën filloni për të shkruar kontrata të plota inteligjente, por është e rëndësishme në rrjedhën e përgjithshme të punës së zhvillimit në TON.
  • Tolk është një shtesë më e re që është ende në zhvillim. Nga ajo që kam mbledhur, ai synon të përmirësojë veglat dhe pajtueshmërinë me gjuhët e nivelit më të lartë. Është premtuese, por ende jo aq e miratuar apo e dokumentuar gjerësisht.
  • Takti është një gjuhë e nivelit të lartë që është krijuar posaçërisht për ta bërë zhvillimin e kontratave inteligjente TON më të aksesueshme dhe më miqësore për zhvilluesit. Takti thjeshton shumë nga kompleksiteti i nivelit më të ulët dhe ju lejon të përqendroheni në shkrimin e logjikës tuaj në një mënyrë të pastër dhe të lexueshme. Sintaksa është më afër asaj që do të shihni në TypeScript ose Solidity, gjë që e bën shumë më të lehtë fillimin pa pasur nevojë të zhyteni thellë në brendësinë e TVM.


Takti ofron dhe një rrugë më të shpejtë për ndërtimin dhe vendosjen e kontratave në zinxhirin bllokues TON.

Të kuptuarit se si funksionon takti

Përpara se të fillojmë të shkruajmë kodin, është e rëndësishme të kuptojmë se si janë strukturuar kontratat inteligjente Tact. Një kontratë tipike Takti përfshin disa komponentë thelbësorë:


  • blloku contract – Këtu ju përcaktoni emrin e kontratës tuaj dhe deklaroni çdo variabël të gjendjes.

  • blloku init – Ai inicializon variablat e gjendjes së kontratës suaj dhe vendos kushtet e fillimit të kontratës. Ky bllok funksionon një herë në momentin e vendosjes.

  • receive blloqe - Këta janë si dëgjuesit e ngjarjeve. Ata trajtojnë mesazhet hyrëse dhe përcaktojnë se si reagon kontrata juaj ndaj tyre.

  • Funksionet Getter ( get fun ) – Këto janë funksione opsionale vetëm për lexim që lejojnë përdoruesit ose kontratat e tjera të kërkojnë gjendjen e kontratës pa e ndryshuar atë.


Takti përdor komunikimin e bazuar në mesazhe, që është mënyra se si funksionojnë të gjitha ndërveprimet në TON. Çdo kontratë merr një mesazh dhe e përpunon atë në bllokun e vet receive . Kjo strukturë e bazuar në mesazhe ndihmon në organizimin e logjikës së kontratës suaj në një mënyrë modulare dhe të mirëmbajtur.


Le ta zbatojmë këtë në një shembull real duke ndërtuar një kontratë të thjeshtë votimi.

Ndërtoni kontratën tuaj të parë të votimit me takt (duke përdorur TON Web IDE)

Në këtë seksion, ne do të shohim se si të zbatojmë një sistem votimi bazë duke përdorur Tact. Kjo kontratë votimi do t'i lejojë përdoruesit të votojnë për kandidatët e paracaktuar dhe do të gjurmojë numrin total të votave që merr secili kandidat.


Ne do të bëjmë gjithçka brenda TON Web IDE, i cili është një mjet në shfletues ku mund të shkruani, ndërtoni dhe testoni kontratat tuaja pa instaluar asgjë në nivel lokal.

Hapi 1 – Hapni TON Web IDE

  • Shkoni te https://ide.ton.org .
  • Klikoni Krijo një projekt të ri . Në dritaren kërcyese:
    • Sigurohuni që gjuha të jetë në Takt .
    • Zgjidhni Kontratën e zbrazët si shabllonin tuaj.
    • Emërtoni projektin tuaj diçka si VotingContract .
    • Kliko + Krijo .


Hapi 2 – Shkrimi i Kodit të Kontratës së Votimit

Pas krijimit të projektit tuaj, hapni skedarin main.tact . Do të shihni një konfigurim të pllakës së bojlerit:

 // Import the Deployable trait so the contract can be deployed easily import "@stdlib/deploy"; contract BlankContract with Deployable { init() { } }
  • import "@stdlib/deploy"; kërkohet për vendosjen në punë dhe nuk duhet të hiqet nga kodi.
  • BlankContract është emri i mbajtësit të vendit.
  • Blloku init() funksionon vetëm një herë kur vendoset kontrata dhe përdoret për të inicializuar variablat e gjendjes.


Tani, le të hartojmë kodin tonë.


Së pari, ne do të përcaktojmë strukturën e mesazhit për votim:

 // 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 }

Ky është mesazhi Vote. Kur dikush dëshiron të votojë, ai do t'i dërgojë një mesazh kontratës që përfshin një numër:

  • 1 për Alice
  • 2 për Bobin

Tact përdor këtë strukturë për të përpunuar votën e ardhshme dhe për të vendosur se cili kandidat merr pikë.


Më pas, ne do të vendosim kontratën tonë dhe do të shtojmë dy variabla të gjendjes për të mbajtur gjurmët e votave të secilit kandidat:

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

Brenda kontratës, ne përcaktuam dy variabla:

  • votesAlice : ruan numrin e votave që merr Alice.
  • votesBob : ruan numrin e votave që merr Bob.


Tani do t'i inicializojmë ato numërime votash në zero brenda bllokut init për të vendosur gjendjen fillestare të kontratës kur ajo të vendoset për herë të parë.

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

Blloku init funksionon vetëm një herë , pikërisht kur kontrata është vendosur dhe i vendos të dy numërimet e votave në zero.


Tani vjen logjika. Kur dërgohet një votë, ne duam që kontrata të kontrollojë se për kë është vota dhe të rrisë numërimin e saktë të votave.

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

Pra, kur merret një votë:

  • Nëse msg.candidate është 1, ne i shtojmë +1 votesAlice
  • Nëse msg.candidate është 2, ne i shtojmë +1 votesBob


Së fundi, ne do të krijojmë funksione marrës për të lejuar këdo që të kërkojë numërimin e votave për secilin kandidat pa ndryshuar gjendjen e kontratës.

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

Këto dy funksione marrës na lejojnë të kontrollojmë numrin e votave që ka marrë secili kandidat pa ndryshuar asgjë në kontratë. Është një operacion vetëm për lexim.


Më poshtë është kodi i plotë i kontratës së votimit:

 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; } }

Hapi 4 – Ndërtoni dhe vendosni kontratën

  • Në shiritin anësor të majtë, klikoni në Build & Deploy

  • Nën Mjedisi , sigurohuni që Sandbox të jetë zgjedhur.
  • Sigurohuni që main.tact është zgjedhur dhe klikoni Build . Kjo do të përpilojë kontratën tuaj dhe do të kontrollojë për çdo gabim sintaksor ose problem në kodin tuaj.
  • Më pas, sigurohuni që VotingContract të jetë zgjedhur në listën rënëse pasi kjo është kontrata juaj aktuale, jo mbajtësi i parazgjedhur. Nëse nuk e shihni, shtypni Ctrl + S për të ruajtur skedarin tuaj në mënyrë që IDE të mund të zbulojë kontratën e përditësuar.
  • Pastaj klikoni ReDeploy . Nëse gjithçka funksionon si duhet, do të shihni një mesazh konfirmimi në regjistrat që tregon se kontrata juaj është vendosur me sukses në Sandbox.

Hapi 5 – Ndërveproni me kontratën

Pasi të vendoset, lëvizni poshtë dhe do të shihni dy seksione:

  • Marrësit: getVotesForAlice , getVotesForBob
  • Marrësit: Vote

Për të votuar: Në seksionin Vote , futni 1 në fushën e hyrjes së candidate dhe klikoni Dërgo. Ju sapo keni votuar për Alice! Ju mund ta përsërisni këtë për të hedhur më shumë vota.


Për të kontrolluar numërimin e votave : Klikoni Call nën getVotesForAlice dhe kontrolloni panelin e regjistrave për të parë numërimin e votave

  • Bëni të njëjtën gjë për Bob duke dërguar 2 në fushën candidate , më pas kontrolloni getVotesForBob

Në testin tim, votova për Alice 9 herë dhe Bob 6 herë , dhe funksionet e marrjes treguan pikërisht këtë.

💭 Mendimet përfundimtare: Vazhdoni të ndërtoni, vazhdoni të eksploroni

🙌 Urime nëse e lexoni deri në fund!


Tani që keni parë se si funksionon një kontratë e thjeshtë votimi në Tact, ju keni bërë hapin tuaj të parë drejt zhvillimit të kontratës inteligjente në TON. Kjo kontratë mund të jetë bazë, por struktura dhe konceptet zbatohen edhe për logjikën më komplekse.


Nëse dëshiron të vazhdosh të eksperimentosh, provo ta zgjasësh këtë kontratë ose të eksplorosh modele të tjera të parandërtuara nga https://tact-by-example.org/all . TON Web IDE gjithashtu e bën të lehtë testimin e rasteve të ndryshme të përdorimit dhe vjen me shabllone gjithashtu për t'ju ndihmuar të ndërtoni dhe mësoni më shpejt.


Pra, shkoni përpara, shkulni, provoni, ndërtoni diçka më të mirë.

L O A D I N G
. . . comments & more!

About Author

Favour Kelvin HackerNoon profile picture
Favour Kelvin@fakela
Technical Writer - I write content that answers the readers' queries

VARUR TAGS

KY ARTIKU U PARAQIT NË...