Rumah >web3.0 >Tutorial pembangunan projek TON (1): Cara mencipta NFT pada Rantaian TON dari perspektif kod sumber

Tutorial pembangunan projek TON (1): Cara mencipta NFT pada Rantaian TON dari perspektif kod sumber

王林
王林asal
2024-06-25 07:58:391069semak imbas

Pengarang

Artikel pengenalan teknikal , saya telah mengkaji secara mendalam TON dokumen pembangunan rasmi dalam tempoh ini, dan saya merasakan masih terdapat beberapa halangan untuk pembelajaran Kandungan dokumen semasa nampaknya lebih seperti dokumen pembangunan dalaman, yang tidak begitu mesra kepada pembangun baharu. Oleh itu, saya cuba menyusun satu siri artikel tentang pembangunan projek TON Chain berdasarkan trajektori pembelajaran saya sendiri. pembangunan. Sekiranya terdapat sebarang kesilapan dalam penulisan, anda dialu-alukan untuk membetulkan saya dan belajar bersama. Apakah perbezaan antara

membangun NFT dalam EVM dan membangun NFT pada TON Rantaian

menyaman satu FT atau NFT Ia biasanya merupakan keperluan paling asas untuk DApp pembangun. Jadi saya juga menggunakan ini sebagai pintu masuk untuk belajar. Mula-mula, mari kita fahami perbezaan berikut antara membangunkan NFT dalam tindanan teknologi EVM dan dalam TON Rantai🎜.NFT berdasarkan EVM biasanya memilih untuk mewarisi standard ERC-721. Apa yang dipanggil NFT merujuk kepada jenis aset kripto yang tidak boleh dibahagikan, dan setiap aset adalah unik, iaitu, ia mempunyai ciri eksklusif tertentu. Dan ERC-721 ialah paradigma pembangunan biasa untuk jenis aset ini. Mari kita lihat apakah fungsi kontrak ERC721 yang biasa perlu dilaksanakan dan maklumat yang direkodkan. Gambar di bawah ialah antara muka ERC721. Anda boleh lihat bahawa tidak seperti FT, apa yang perlu dimasukkan dalam antara muka pemindahan ialah tokenId yang akan dipindahkan dan bukannya kuantiti.tokenId ini juga merupakan penjelmaan paling asas keunikan NFT Sudah tentu, untuk membawa lebih banyak atribut, metadata ini biasanya direkodkan untuk setiap . metadata ialah pautan luaran yang menyimpan data berskala lain bagi NFT, seperti pautan ke gambar PFP, nama atribut tertentu, dsb.

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

Untuk pembangun yang biasa dengan

Solidity atau biasa dengan berorientasikan objek, adalah mudah untuk melaksanakan kontrak pintar sedemikian, asalkan jenis data yang diperlukan dalam kontrak ditentukan, seperti beberapa pemetaan utama Hubungan pemetaan, dan membangunkan logik pengubahsuaian yang sepadan dengan data ini mengikut fungsi yang diperlukan, anda boleh melaksanakan NFT.

Namun, dalam

TON Rantai semuanya berbeza. Terdapat dua sebab utama untuk perbezaan:

  • Storan data dalam TON adalah berdasarkan Sel, dan Sel graf akaun yang sama dilaksanakan melalui graf berarah Ini bermakna bahawa data yang perlu disimpan tidak boleh berkembang tanpa sempadan, kerana untuk graf akiklik terarah, kos pertanyaan ditentukan oleh kedalaman data Apabila kedalaman meluas tanpa had, kos pertanyaan mungkin terlalu tinggi, membawa kepada Kontrak tersekat dalam masalah kebuntuan.
  • Untuk mengejar prestasi bersamaan yang tinggi, TON meninggalkan seni bina pelaksanaan bersiri dan mengamalkan paradigma pembangunan yang direka untuk selari, AktorAktorPelakon . Ini mempunyai kesan. Kontrak pintar hanya boleh memanggil satu sama lain secara tak segerak dengan menghantar apa yang dipanggil mesej dalaman Ambil perhatian bahawa sama ada ia adalah jenis pengubahsuaian keadaan atau jenis panggilan baca sahaja, prinsip ini perlu diikuti, kecuali Selain itu, anda juga perlu mempertimbangkan dengan teliti cara mengendalikan pemulangan data jika panggilan tak segerak gagal.

Sudah tentu, perbezaan teknikal lain telah dibincangkan secara terperinci dalam artikel sebelum ini artikel ini berharap untuk memberi tumpuan kepada pembangunan kontrak pintar, jadi ia tidak akan dibincangkan. Dua prinsip reka bentuk di atas membuat perbezaan besar antara pembangunan kontrak pintar dalam TON dan EVM.Dalam perbincangan awal, kita tahu bahawa kontrak

NFT perlu menentukan beberapa hubungan pemetaan, iaitu, pemetaan, untuk menyimpan NFT data berkaitan. Yang paling penting ialah pemilik Ini pemetaan menyimpan hubungan pemetaan alamat pemilik tokenID tertentu yang sepadan dengan NFT, yang menentukan pemindahan milik dan. Ia adalah pengubahsuaian pemilikan itu. Oleh kerana ini adalah struktur data yang boleh menjadi tidak terbatas dalam teori, ia perlu dielakkan sebanyak mungkin. Oleh itu, secara rasmi disyorkan untuk menggunakan kewujudan struktur data tidak terhad sebagai piawaian untuk sharding. Iaitu, apabila terdapat keperluan penyimpanan data yang serupa, paradigma kontrak tuan-hamba digunakan sebaliknya, dan data yang sepadan dengan setiap kunci diurus dengan mencipta sub-kontrak. Dan mengurus parameter global melalui kontrak utama, atau membantu mengendalikan interaksi maklumat dalaman antara sub-kontrak.

Ini juga bermakna bahawa NFT dalam TON juga perlu direka bentuk dengan seni bina yang serupa Setiap NFT ialah sub-kontrak bebas, menyimpan perkara seperti pemilik. metadata dan data eksklusif lain, dan kontrak utama digunakan untuk mengurus data global, seperti nama NFT, simbol, jumlah bekalan, dsb.

Selepas menjelaskan seni bina, langkah seterusnya adalah untuk menyelesaikan keperluan fungsi teras Disebabkan penggunaan kaedah kontrak tuan-hamba ini, Jadi adalah perlu untuk menjelaskan fungsi mana yang dibawa oleh kontrak utama dan yang mana. fungsi dibawa oleh sub-kontrak Dan maklumat dalaman apa yang disampaikan antara kedua-duanya, dan bagaimana untuk melancarkan semula data sebelumnya apabila ralat pelaksanaan berlaku. Biasanya, sebelum membangunkan projek berskala besar yang kompleks, adalah perlu untuk lulus gambar rajah kelas dan menjelaskan aliran maklumat antara satu sama lain, dan berhati-hati memikirkan logik balik selepas kegagalan panggilan dalaman Sudah tentu, di atas NFT pembangunan adalah mudah, tetapi pengesahan serupa juga boleh dilakukan.

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

Belajar dan kembangkan TONkontrak pintar daripada kod sumber

TONPilih untuk mereka bentuk kelas C bahasa dinamakan , bahasa statik, nc sebagai kontrak pintar bahasa pembangunan, kemudian mari kita belajar bagaimana untuk membangunkan TON kontrak pintar daripada kod sumber Saya memilih contoh NFT dalam dokumen rasmi TON untuk memperkenalkannya diri sendiri. Contoh mudah TON NFT dilaksanakan dalam kes ini. Mari kita lihat struktur kontrak, yang dibahagikan kepada dua kontrak berfungsi dan tiga perpustakaan yang diperlukan.

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

Dua kontrak berfungsi utama ini direka mengikut prinsip di atas Pertama, mari kita lihat kod kontrak utama nft-collection:

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

.

Ini memperkenalkan titik pengetahuan pertama, cara menyimpan data secara berterusan dalam TON kontrak pintar Kami tahu bahawa penyimpanan data yang berterusan dalam Solidity dilakukan oleh EVM mengikut parameter. dikendalikan secara automatik Biasanya, pembolehubah keadaan kontrak pintar akan dikekalkan secara automatik dan disimpan berdasarkan nilai terkini selepas pelaksanaan tidak perlu mempertimbangkan proses ini. Tetapi ini tidak berlaku dalam Func Pembangun perlu melaksanakan sendiri logik pemprosesan yang sepadan Keadaan ini agak serupa dengan proses C dan C++ yang perlu dipertimbangkan Tetapi bahasa pembangunan baharu yang lain biasanya mengautomasikan bahagian logik ini. Mari kita lihat kodnya Mula-mula, kami memperkenalkan beberapa pustaka yang diperlukan, dan kemudian kami melihat bahawa fungsi pertama load_data digunakan untuk membaca data yang disimpan secara berterusan Logiknya adalah untuk memulangkan data berterusan melalui get_data Storan kontrak sel Ambil perhatian bahawa ini dilaksanakan oleh perpustakaan standard stdlib.fc Dalam keadaan biasa, beberapa fungsi boleh digunakan sebagai fungsi sistem.

Jenis nilai pulangan bagi fungsi ini ialah sel, iaitu jenis sel dalam TVM. Dalam pengenalan sebelum ini, kita sudah tahu bahawa semua data berterusan dalam rantaian blok TON disimpan dalam pokok sel. Setiap sel mempunyai paling banyak 1023 bit data arbitrari dan sehingga empat rujukan kepada sel yang lain. sel digunakan sebagai ingatan dalam TVM berasaskan tindanan.sel menyimpan data yang dikodkan dengan ketat Untuk mendapatkan data teks biasa, anda perlu menukar sel kepada jenis yang dipanggil slice. sel boleh ditukar kepada slice taip mengikut fungsi mulakan_parse, yang kemudiannya boleh diperolehi dengan memuatkan bit data dan rujukan kepada sel yang lain Data masuk . Ambil perhatian bahawa kaedah panggilan dalam baris 15 ini ialah gula sintaksis dalam func, yang boleh memanggil terus fungsi kedua dengan nilai pulangan fungsi pertama. Dan akhirnya muatkan data yang sepadan mengikut susunan mengikut susunan kegigihan data.Ambil perhatian bahawa proses ini berbeza daripada kepekatan, dan tidak dipanggil berdasarkan peta hash, jadi susunan panggilan tidak boleh kacau.

Dalam fungsi save_data, logiknya adalah serupa, kecuali ia adalah proses terbalik, yang memperkenalkan titik pengetahuan seterusnya, jenis baru builder, ini adalah Jenis sel pembina. Bit data dan rujukan kepada sel lain boleh disimpan dalam pembina, yang kemudiannya boleh dimuktamadkan kepada sel baharu. Mula-mula buat builder melalui fungsi standard begin_cell, dan simpan fungsi berkaitan melalui store fungsi yang berkaitan secara bergilir Ambil perhatian bahawa pesanan panggilan di atas perlu konsisten dengan pesanan storan di sini.Akhirnya, sel baharu dibina melalui end_sel Pada masa ini, sel diuruskan dalam ingatan Akhirnya, melalui set paling luar. penyimpanan berterusan cell.

Seterusnya, mari kita lihat fungsi berkaitan perniagaan Pertama, kita perlu memperkenalkan titik pengetahuan seterusnya, cara membuat kontrak baharu melalui kontrak, yang akan kerap digunakan dalam seni bina tuan-hamba yang baru diperkenalkan. Kami tahu bahawa dalam TON, panggilan antara kontrak pintar dilaksanakan dengan menghantar mesej dalaman. Ini dicapai melalui fail yang dipanggil send_raw_message Ambil perhatian bahawa parameter pertama ialah messagedikodkan sel, dan parameter kedua ialah bit pengenalan, yang digunakan untuk menunjukkan bit pengenalan. kaedah pelaksanaan, kaedah pelaksanaan berbeza penghantaran mesej dalaman ditetapkan dalam TON, kini mempunyai 3 jenis mesejMod dan 3mesej3 . Satu Mod boleh digabungkan dengan berbilang bendera (mungkin tiada) untuk mendapatkan mod yang diingini.Gabungan hanya bermaksud

isi jumlah nilai mereka. Jadual huraian Mod dan Flags diberikan di bawah:

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

Jadi mari kita lihat fungsi utama pertama, , nama item ini dicadangkan untuk Fungsi yang mencipta atau menghantar instance NFT baharu Selepas beberapa operasi untuk mengekod msg, kontrak dalaman dihantar melalui send_raw_message , dan penghantaran . dipilih. Bit pengenalan, hanya yuran yang dinyatakan dalam pengekodan digunakan sebagai yuran gas untuk pelaksanaan ini. Selepas pengenalan di atas, kita boleh menyedari dengan mudah bahawa peraturan pengekodan ini harus sepadan dengan cara untuk mencipta kontrak pintar baharu. Kemudian mari kita lihat bagaimana ia dilaksanakan.

Mari kita lihat terus pada baris 51 Dua fungsi di atas adalah fungsi tambahan yang digunakan untuk menjana maklumat yang diperlukan untuk mesej, jadi ini adalah mesej dalaman yang digunakan cipta kontrak pintar Dalam proses pengekodan, beberapa nombor di tengah sebenarnya adalah beberapa bit pengenalan, digunakan untuk menerangkan keperluan mesej dalaman Titik pengetahuan seterusnya diperkenalkan di sini TON memilih jenis yang dipanggil TL. -B Bahasa binari digunakan untuk menerangkan cara mesej dilaksanakan dan mesej dalaman yang melaksanakan fungsi khusus tertentu berdasarkan penetapan bit bendera yang berbeza Dua senario penggunaan yang paling mudah difikirkan ialah penciptaan kontrak baharu dan panggilan fungsi kontrak yang digunakan. Kaedah talian 51 sepadan dengan yang pertama, mencipta nft item kontrak baharu, yang kebanyakannya dilakukan melalui 55, 56, 56, 56🎜, 🎜🎜56🎜,🎜🎜🎜🎜🎜 ditentukan.Pertama sekali, siri nombor besar dalam baris 55 ialah siri bit pengenalan Perhatikan bahawa parameter input pertama store_uint ialah nilai berangka, dan yang kedua adalah panjang sedikit. yang menentukan sama ada mesej dalaman dicipta oleh kontrak ialah tiga bit tanda terakhir, dan bit nilai perduaan yang sepadan ialah 111 (setara perpuluhan ialah 4+2+1), di mana yang pertama. dua menunjukkan bahawa mesej akan disertakan dengan StateInit data, ini Data ialah kod sumber kontrak baharu dan data yang diperlukan untuk permulaan. Bit bendera terakhir menunjukkan lampiran mesej dalaman, iaitu logik yang berkaitan dan parameter yang diperlukan dijangka akan dilaksanakan. Oleh itu, anda akan melihat bahawa data tiga digit tidak ditetapkan dalam baris 66, yang menunjukkan panggilan fungsi kepada kontrak yang digunakan. Peraturan pengekodan terperinci boleh didapati di sini.

Kemudian peraturan pengekodan StateInit sepadan dengan 49 baris kod, dikira melalui calculate_nft_item_state_init Perhatikan bahawa pengekodan🜎🜎 bagi data mengikuti yang ditetapkan TL- BPeraturan pengekodan, kecuali beberapa bit bendera, terutamanya melibatkan dua bahagian kontrak baharu kod dan permulaan data. Susunan pengekodan data perlu konsisten dengan susunan storan berterusan sel yang ditentukan oleh kontrak baharu.Seperti yang anda boleh lihat dalam baris 36, data permulaan termasuk item_index, yang serupa dengan tokenId dalam fungsi , ERC dan standard 1 saya _ alamat Alamat kontrak semasa yang dikembalikan ialah koleksi_alamat Susunan data ini adalah konsisten dengan penyata dalam nft-item

. 🎜🎜

Maklumat pengetahuan seterusnya ialah dalam TON, semua kontrak pintar yang tidak dijana boleh mengira awal alamat yang dijana ini serupa dengan fungsi create2 dalam Kepekatan baharu alamat dalam TON terdiri daripada dua bahagian, bit pengenalan rantai kerja dan nilai cincang stateinit Kita sudah tahu bahawa yang pertama adalah untuk yang sepadan. yang ditentukan untuk seni bina sharding tak terhingga pada masa ini merupakan nilai bersatu. Diperolehi daripada fungsi standard rantai kerja. Yang terakhir ini diperolehi oleh fungsi standard cell_hash. Jadi kembali kepada contoh ini, calculate_nft_item_address ialah fungsi yang pra-kira alamat kontrak baharu. Dan kodkan nilai yang dijana dalam baris 53 ke dalam mesej sebagai alamat penerima mesej dalaman.Dan nft_content sepadan dengan panggilan permulaan kepada kontrak yang dibuat Pelaksanaan khusus akan diperkenalkan dalam artikel seterusnya.

Bagi send_royalty_params, ia perlu menjadi respons kepada mesej dalaman permintaan baca sahaja Dalam pengenalan sebelum ini, kami secara khusus menekankan bahawa mesej dalaman dalam TON bukan sahaja. mengandungi pengubahsuaian yang mungkin Operasi data dan operasi baca sahaja juga perlu dilaksanakan dengan cara ini, jadi kontrak ini adalah operasi sedemikian Perkara pertama yang perlu diperhatikan ialah baris 67 menunjukkan tanda fungsi panggil balik peminta selepas. menjawab permintaan itu. Itu adalah data yang dikembalikan, iaitu indeks item dan royalti yang sepadan.

Mari kita perkenalkan titik pengetahuan seterusnya Terdapat hanya dua pintu masuk bersatu ke kontrak pintar dalam TON, bernama recv_internal dan recv_external, di mana semua mesej dalaman adalah penyatuan. Masuk panggilan, yang terakhir ialah pintu masuk panggilan bersatu untuk semua mesej luaran Pembangun perlu menggunakan kaedah yang serupa dengan suis dalam fungsi untuk membalas permintaan berbeza berdasarkan bit bendera berbeza yang ditentukan oleh mesej. Di sini Bit tanda ialah tanda fungsi panggil balik baris di atas 67. Kembali ke contoh ini, mula-mula lakukan semakan kekosongan pada mesej, dan kemudian menghuraikan maklumat masing-masing dalam mesej Mula-mula, huraikan baris 83 untuk mendapatkan _ baris untuk mendapatkan _. . Parameter akan digunakan untuk semakan kebenaran berikutnya. Saya tidak akan mengembangkannya di sini.Seterusnya, bit bendera operasi op dihuraikan, dan kemudian permintaan yang sepadan diproses mengikut bit bendera yang berbeza. Antaranya, fungsi di atas dipanggil masing-masing mengikut logik tertentu. Contohnya, balas permintaan untuk parameter royalti, atau tempa nft baharu dan naikkan indeks global.

Titik pengetahuan seterusnya sepadan dengan baris 108 Saya percaya anda juga boleh mengetahui logik pemprosesan fungsi ini dengan menamakannya sama dengan fungsi require dalam . Func Pengecualian dilemparkan melalui fungsi standard throw_melainkan Parameter input pertama ialah kod ralat, dan yang kedua adalah untuk menyemak nilai Boolean bit jika bit adalah pengecualian akan dilemparkan dengan kod ralat . Dalam baris ini, equal_slices digunakan untuk menentukan sama ada pengirim_alamat yang dihuraikan di atas adalah sama dengan pemilik_alamat penyimpanan berterusan kontrak penghakiman.

TON 项目开发教程(一):源码角度看如何在 TON Chain 上创建一个NFT

Akhirnya, untuk menjadikan struktur kod lebih jelas, satu siri fungsi tambahan telah dibangunkan untuk membantu mendapatkan maklumat kegigihan Pembangun boleh merujuk kepada struktur ini untuk membangunkan pintar mereka sendiri kontrak.

TONekologi DApppembangunan benar-benar satu perkara yang menarik, dan ia sangat berbeza dengan paradigma pembangunan EVM, jadi saya akan memperkenalkan cara untuk berkembang dalam TON melalui siri ain artikel Dibangunkan dalam DApp. Belajar bersama-sama dengan semua orang dan rebut gelombang peluang ini. Anda juga dialu-alukan untuk berinteraksi dengan saya di twitter untuk menemui beberapa idea dapp yang baharu dan menarik dan membangunkannya bersama-sama.

Atas ialah kandungan terperinci Tutorial pembangunan projek TON (1): Cara mencipta NFT pada Rantaian TON dari perspektif kod sumber. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn