Ихэнх тохиолдолд хүмүүс ухаалаг гэрээ бичиж сурахад хамгийн түрүүнд Solidity болон Ethereum-ийн тухай сонсдог. Энэ бол миний сонссон анхны зүйл юм. Энэ нь ихэнх хичээлүүд дээр төвлөрдөг бөгөөд сайн шалтгаантай. Solidity нь блокчэйн дээр амьдардаг программ бичих боломжийг олгосон бөгөөд Ethereum нь олон хүний эхлэлийг тавьсан газар болсон. Гэхдээ Solidity бол цорын ганц ухаалаг гэрээний хэл биш юм. Мөн Ethereum нь төвлөрсөн бус програмуудыг дэмждэг цорын ганц блокчейн биш юм. товчлол болох гэж бас бий. Энэ нь Telegram-ээр үүсгэгдсэн боловч одоо олон нийтэд чиглэсэн, олон нийтийн сүлжээ болсон. Энэ нь хурдан, хөнгөн бөгөөд Ethereum дээр дассан байснаас арай өөрөөр зохицуулдаг. Үүнд ухаалаг гэрээ хэрхэн бичигдсэн байдаг. Би TON баримт бичгийг судалж эхлэхдээ ухаалаг гэрээ бичих дөрвөн өөр хэлтэй танилцсан: . Би энд дөрвөн зүйлд гүнзгий орохгүй. Нээлттэй сүлжээний TON Tact, Tolk, FunC, Fift Энэхүү гарын авлага нь эелдэг хэл дээр төвлөрч байгаа бөгөөд бид үүнийг хэрэглэгчдэд санал өгөх, гинжин хэлхээний үр дүнг шалгах боломжийг олгодог үндсэн саналын гэрээг байгуулахад хэрхэн ашиглахыг харах болно. Яагаад би эхлээд эелдэг сурахаар шийдсэн бэ? TON экосистем нь үнэндээ олон хэлийг дэмждэг бөгөөд тус бүр нь өөр өөр хэрэглээний тохиолдол, хийсвэрлэлийн түвшин, хөгжүүлэгчийн туршлагад үйлчилдэг. Тэдгээрийн тус бүрийн товч тоймыг энд оруулав. бол TON ухаалаг гэрээ бичих уламжлалт хэл юм. Энэ нь доод түвшнийх бөгөөд таны гэрээ хэрхэн ажиллахыг нарийн хянах боломжийг танд олгоно. Энэ нь хүчирхэг боловч та TON Virtual Machine (TVM) хэрхэн ажилладаг, тухайлбал стек удирдах, санах ойн зохион байгуулалт, детерминист гүйцэтгэл зэрэг ойлголтуудыг ойлгох хэрэгтэй болно гэсэн үг юм. Синтакс нь С-тэй зарим талаараа төстэй бөгөөд хэрэв та өмнө нь тухайн хэлний хэв маягтай ажиллаж байгаагүй бол танил бус санагдаж магадгүй юм. FunC нь ихэвчлэн FunC-тэй хамт хэрэглэгддэг. Энэ нь ихэвчлэн TVM-тэй шууд харьцахад ашиглагддаг стек дээр суурилсан хэл бөгөөд байршуулах, дибаг хийх, гинжин тооцоолол хийхэд ашиглагддаг. Энэ нь ихэвчлэн бүрэн ухаалаг гэрээ бичихэд тань эхэлдэг хэл биш боловч TON дээрх ерөнхий боловсруулалтын ажлын урсгалд чухал ач холбогдолтой юм. Fift бол хөгжиж буй шинэ нэмэлт юм. Миний цуглуулсан зүйлээс харахад энэ нь багаж хэрэгсэл, дээд түвшний хэлтэй нийцтэй байдлыг сайжруулах зорилготой юм. Энэ нь ирээдүйтэй боловч одоохондоо өргөн хэрэглэгдэж, баримтжуулаагүй байна. Толк бол TON ухаалаг гэрээний хөгжүүлэлтийг илүү хүртээмжтэй, хөгжүүлэгчдэд ээлтэй болгох зорилгоор тусгайлан бүтээгдсэн өндөр түвшний хэл юм. Такт нь доод түвшний нарийн төвөгтэй байдлыг хялбаршуулж, логикоо цэвэр, уншигдахуйц байдлаар бичихэд анхаарлаа төвлөрүүлэх боломжийг олгодог. Синтакс нь TypeScript эсвэл Solidity-д харагдах зүйлтэй илүү ойр байдаг бөгөөд энэ нь TVM-ийн дотоод мэдээлэлд гүнзгий орох шаардлагагүйгээр эхлүүлэхэд илүү хялбар болгодог. Tact Tact нь TON блокчэйн дээр гэрээ байгуулах, байршуулах илүү хурдан замыг өгдөг. Такт хэрхэн ажилладагийг ойлгох Код бичиж эхлэхээсээ өмнө Tact ухаалаг гэрээ хэрхэн бүтэцлэгдсэнийг ойлгох нь чухал. Ердийн Tact гэрээ нь хэд хэдэн үндсэн бүрэлдэхүүн хэсгүүдийг агуулдаг: блок - Энэ бол та гэрээний нэрийг тодорхойлж, аливаа төлөвийн хувьсагчийг зарлах газар юм. contract блок - Энэ нь таны гэрээний төлөвийн хувьсагчдыг эхлүүлж, гэрээний эхлэлийн нөхцлийг тохируулдаг. Энэ блок нь байршуулах үед нэг удаа ажилладаг. init блок - Эдгээр нь үйл явдлын сонсогчтой адил юм. Тэд ирж буй мессежийг зохицуулж, таны гэрээ тэдэнд хэрхэн хариу үйлдэл үзүүлэхийг тодорхойлдог. receive Getter функцууд ( ) – Эдгээр нь хэрэглэгчид болон бусад гэрээнүүдэд гэрээний төлөвийг өөрчлөхгүйгээр асуух боломжийг олгодог зөвхөн унших боломжтой функцууд юм. get fun Tact нь мессежид суурилсан харилцаа холбоог ашигладаг бөгөөд энэ нь TON дээрх бүх харилцан үйлчлэл юм. Гэрээ бүр мессеж хүлээн авч, өөрийн блокт боловсруулдаг. Энэхүү зурваст суурилсан бүтэц нь таны гэрээний логикийг модульчлагдсан, тогтвортой байдлаар зохион байгуулахад тусалдаг. receive Энгийн саналын гэрээ байгуулах замаар үүнийг бодит жишээн дээр хэрэгжүүлье. Анхны санал өгөх гэрээгээ эелдэг байдлаар байгуулах (TON Web IDE ашиглах) Энэ хэсэгт бид Tact ашиглан санал өгөх үндсэн системийг хэрхэн хэрэгжүүлэх талаар авч үзэх болно. Энэхүү саналын гэрээ нь хэрэглэгчдэд урьдчилан тодорхойлсон нэр дэвшигчдэд санал өгөх боломжийг олгож, нэр дэвшигч бүрийн авсан нийт саналын тоог хянах болно. Бид TON Web IDE доторх бүх зүйлийг хийх болно, энэ нь та дотооддоо юу ч суулгахгүйгээр гэрээ бичих, бүтээх, шалгах боломжтой хөтөч доторх хэрэгсэл юм. Алхам 1 - TON Web IDE-г нээнэ үү руу очно уу. https://ide.ton.org дарна уу. Попап цонхонд: Шинэ төсөл үүсгэх дээр Хэл нь дээр байгаа эсэхийг шалгаарай. Tact Загвар болгон сонгоно уу. хоосон гэрээг Төслөө гэх мэтээр нэрлэ. VotingContract дээр дарна уу. + Үүсгэх Алхам 2 – Санал өгөх гэрээний кодыг бичих Төслөө үүсгэсний дараа файлыг нээнэ үү. Та бойлер хавтангийн тохиргоог харах болно: main.tact // Import the Deployable trait so the contract can be deployed easily import "@stdlib/deploy"; contract BlankContract with Deployable { init() { } } байршуулахад шаардлагатай бөгөөд кодноос хасагдах ёсгүй. import "@stdlib/deploy"; нь орлуулагчийн нэр юм. BlankContract блок нь гэрээг байршуулах үед зөвхөн нэг удаа ажилладаг бөгөөд төлөвийн хувьсагчдыг эхлүүлэхэд ашиглагддаг. init() Одоо бид өөрсдийн кодыг гаргацгаая. Эхлээд бид санал өгөх мессежийн бүтцийг тодорхойлно. // 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 } Энэ бол санал өгөх мессеж юм. Хэн нэгэн санал өгөхийг хүсвэл гэрээнд дараах дугаарыг агуулсан мессеж илгээх болно. Алисад 1 Бобын хувьд 2 Такт нь энэ бүтцийг ашиглан ирж буй саналыг боловсруулж, аль нэр дэвшигч оноо авахыг шийддэг. Дараа нь бид гэрээгээ байгуулж, нэр дэвшигч бүрийн саналыг бүртгэхийн тулд хоёр төлөвийн хувьсагчийг нэмнэ: ... contract VotingContract with Deployable { // State variables to track votes votesAlice: Int as uint32; votesBob: Int as uint32; Гэрээнд бид хоёр хувьсагчийг тодорхойлсон: : Алисын авсан саналын тоог хадгалдаг. votesAlice : Бобын авсан саналын тоог хадгалдаг. votesBob Одоо бид гэрээг анх байршуулах үед эхлэх төлөвийг тохируулахын тулд блок дотор саналын тооллогыг тэг болгон эхлүүлэх болно. init init() { self.votesAlice = 0; self.votesBob = 0; } блок нь гэрээ ашиглалтад орсны дараа ажилладаг бөгөөд саналын тоог хоёуланг нь тэг болгож тохируулдаг. init зөвхөн нэг удаа Одоо логик гарч ирнэ. Санал өгөхдөө хэний төлөө санал өгч байгааг шалгаж, саналын зөв тооллогыг нэмэгдүүлэхийг гэрээгээр хүсч байна. // Handle vote messages receive(msg: Vote) { if (msg.candidate == 1) { self.votesAlice += 1; } else if (msg.candidate == 2) { self.votesBob += 1; } } Тиймээс санал авах үед: Хэрэв 1 бол бид дээр +1 нэмнэ msg.candidate votesAlice Хэрэв 2 бол дээр +1 нэмнэ msg.candidate votesBob Эцэст нь бид гэрээний төлөвийг өөрчлөхгүйгээр хэн нэгэнд нэр дэвшигч бүрийн саналын тоог асуух боломжийг олгохын тулд хүлээн авагч функцийг бий болгоно. // Getter for Alice's votes get fun getVotesForAlice(): Int { return self.votesAlice; } // Getter for Bob's votes get fun getVotesForBob(): Int { return self.votesBob; } } Эдгээр хоёр хүлээн авагч функц нь гэрээнд ямар нэгэн өөрчлөлт оруулалгүйгээр нэр дэвшигч бүрийн авсан саналын тоог шалгах боломжийг олгодог. Энэ нь зөвхөн уншихад зориулагдсан үйлдэл юм. Санал өгөх гэрээний бүрэн кодыг доор харуулав. 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; } } Алхам 4 – Гэрээг байгуулж, байршуулах Зүүн талын самбар дээрх дээр дарна уу Build & Deploy хэсэгт сонгосон эсэхийг шалгана уу. Environment Sandbox-г сонгосон эсэхийг шалгаад дээр дарна уу. Энэ нь таны гэрээг эмхэтгэж, кодонд синтаксийн алдаа, асуудал байгаа эсэхийг шалгах болно. main.tact Build Дараа нь, өгөгдмөл орлуулагч биш, таны бодит гэрээ учраас унадаг жагсаалтаас сонгосон эсэхийг шалгаарай. Хэрэв танд харагдахгүй бол дарж файлаа хадгалснаар IDE шинэчлэгдсэн гэрээг илрүүлэх боломжтой. VotingContract-г Ctrl + S Дараа нь дарна уу. Хэрэв бүх зүйл зөв ажиллаж байвал та бүртгэлд таны гэрээг Sandbox дээр амжилттай байршуулсан тухай баталгаажуулах мессежийг харах болно. ReDeploy дээр Алхам 5 - Гэрээтэй харилцах Байрлуулсны дараа доош гүйлгээд хоёр хэсгийг харах болно: , Хүлээн авагч: getVotesForAlice getVotesForBob Хүлээн авагчид: Vote хэсэгт оруулах талбарт гэж оруулаад Та дөнгөж сая Алисын төлөө саналаа өглөө! Та илүү олон санал өгөхийн тулд үүнийг давтаж болно. Санал өгөхдөө: Санал өгөх candidate 1 Илгээх дээр дарна уу. : доор байрлах дээр дарж, самбарыг шалгаад саналын тоог харна уу. Саналын тооллогыг шалгахын тулд getVotesForAlice Дуудлага бүртгэлийн талбарт илгээж Бобын хувьд ижил зүйлийг хий, дараа нь шалгана уу candidate 2 getVotesForBob Туршилтын үеэр би Алис руу , Бобд санал өгсөн бөгөөд хүлээн авагчийн функцууд яг үүнийг харуулсан. 9 удаа 6 удаа 💭 Эцсийн бодол: Үргэлжлүүлэн бүтээж, эрэл хайгуул 🙌 Хэрэв та бүрэн уншсан бол баяр хүргэе! Одоо та энгийн санал өгөх гэрээ Tact дээр хэрхэн ажилладгийг харсны дараа та TON дээр ухаалаг гэрээг хөгжүүлэх анхны алхамаа хийлээ. Энэ гэрээ нь үндсэн байж болох ч бүтэц, үзэл баримтлал нь илүү төвөгтэй логикт хамаарна. Хэрэв та туршилтаа үргэлжлүүлэхийг хүсвэл энэ гэрээг сунгах эсвэл хаягаас урьдчилан бэлтгэсэн бусад загваруудыг судалж үзээрэй. TON Web IDE нь янз бүрийн хэрэглээний тохиолдлуудыг туршиж үзэхэд хялбар болгодог бөгөөд энэ нь танд илүү хурдан бүтээх, сурахад туслах загваруудтай ирдэг. https://tact-by-example.org/all Тиймээс үргэлжлүүлээрэй, өөрчил, туршиж, илүү сайн зүйлийг бүтээ.