Rumah  >  Artikel  >  Bagaimana untuk mencipta NFT pada Rantaian TON dari perspektif kod sumber

Bagaimana untuk mencipta NFT pada Rantaian TON dari perspektif kod sumber

WBOY
WBOYasal
2024-06-25 18:45:02725semak imbas

Apakah perbezaan antara membangunkan NFT dalam EVM dan membangunkan NFT pada TON Chain

Mengeluarkan FT atau NFT biasanya merupakan keperluan paling asas untuk pembangun DApp. 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 Rantaian TON. NFT berasaskan EVM sering memilih untuk mewarisi standard ERC-721. Apa yang dipanggil NFT merujuk kepada jenis aset yang disulitkan yang tidak boleh dibahagikan, dan setiap aset adalah unik, iaitu, ia mempunyai ciri eksklusif tertentu. ERC-721 ialah paradigma pembangunan biasa untuk jenis aset ini. Mari lihat apakah fungsi kontrak ERC721 biasa yang perlu dilaksanakan dan maklumat yang direkodkan. Gambar di bawah ialah antara muka ERC721. Ia boleh dilihat bahawa tidak seperti FT, apa yang perlu dimasukkan dalam antara muka pemindahan ialah tokenId yang akan dipindahkan dan bukannya jumlah. TokenId ini juga merupakan penjelmaan paling asas bagi keunikan aset NFT Sudah tentu, untuk membawa lebih banyak atribut, metadata biasanya direkodkan untuk setiap tokenId ini ialah pautan luaran yang menyimpan data berskala NFT, seperti sebagai Pautan kepada imej PFP, nama sifat tertentu, dsb.

从源码角度看如何在TON Chain上创建一个NFT

Bagi 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 hubungan pemetaan utama dan berdasarkan yang diperlukan Ia adalah perlu untuk membangunkan logik pengubahsuaian yang sepadan secara berfungsi untuk data ini untuk merealisasikan NFT.

Walau bagaimanapun, ini tidak sama dalam Rantaian TON Terdapat dua sebab utama untuk perbezaan:

  • Dalam TON, penyimpanan data adalah berdasarkan Sel, dan Sel akaun yang sama dilaksanakan melalui diarahkan dan. gambarajah Cincin tidak terarah untuk dicapai. 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 konkurensi yang tinggi, TON meninggalkan seni bina pelaksanaan bersiri dan sebaliknya menggunakan paradigma pembangunan yang direka khusus untuk selari, model Aktor, untuk membina semula persekitaran pelaksanaan. Ini mempunyai kesan. Kontrak pintar hanya boleh dipanggil 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 juga perlu dipatuhi perlu dipertimbangkan dengan teliti Cara mengendalikan rollback data jika panggilan tak segerak gagal.

    Sudah tentu, perbezaan teknikal yang lain telah dibincangkan secara terperinci dalam artikel sebelum ini diharap dapat memberi tumpuan kepada pembangunan kontrak pintar, jadi ia tidak akan dibincangkan. Kedua-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 data berkaitan NFT. Yang paling penting ialah pemilik. Pemetaan ini menyimpan hubungan pemetaan alamat pemilik NFT yang sepadan dengan tokenID tertentu, yang menentukan pemilikan NFT Pemindahan adalah pengubahsuaian pemilikan. 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 diuruskan dengan mencipta sub-kontrak. Dan mengurus parameter global melalui kontrak utama, atau membantu mengendalikan interaksi maklumat dalaman antara sub-kontrak.

    Ini bermakna NFT dalam TON juga perlu direka bentuk menggunakan seni bina yang serupa Setiap NFT ialah sub-kontrak bebas, yang menyimpan data eksklusif seperti alamat pemilik, metadata, dsb., dan diuruskan melalui kontrak utama data global seperti nama NFT, simbol, jumlah bekalan, dsb.

    Selepas menjelaskan seni bina, langkah seterusnya ialah menyelesaikan keperluan fungsi teras Memandangkan kaedah kontrak tuan-hamba ini diguna pakai, adalah perlu untuk menjelaskan fungsi mana yang dibawa oleh kontrak utama dan fungsi mana yang dibawa oleh sub-. kontrak, dan fungsi mana yang dibawa oleh sub-kontrak, dan fungsi mana yang dibawa oleh sub-kontrak Apakah maklumat dalaman yang digunakan untuk berkomunikasi antara mereka, dan cara 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 rollback selepas panggilan dalaman gagal Sudah tentu, pembangunan NFT di atas adalah mudah , tetapi ia juga boleh Melakukan pengesahan serupa.

    从源码角度看如何在TON Chain上创建一个NFT

    Belajar untuk membangunkan kontrak pintar TON daripada kod sumber

    TON memilih untuk mereka bentuk bahasa seperti C, ditaip secara statik bernama Func sebagai bahasa pembangunan kontrak pintar, kemudian mari kita belajar cara membangunkannya daripada kod sumber Untuk kontrak pintar TON, saya memilih contoh NFT dalam dokumen rasmi TON untuk memperkenalkannya. Rakan-rakan yang berminat boleh menyemaknya sendiri. Dalam kes ini, contoh TON NFT mudah dilaksanakan. Mari kita lihat struktur kontrak, yang dibahagikan kepada dua kontrak berfungsi dan tiga perpustakaan yang diperlukan.

    从源码角度看如何在TON Chain上创建一个NFT

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

    从源码角度看如何在TON Chain上创建一个NFT

    Ini memperkenalkan titik pengetahuan pertama, cara menggunakan TON Persistent. penyimpanan data dalam kontrak pintar Kami tahu bahawa penyimpanan data yang berterusan dalam Solidity dikendalikan secara automatik oleh EVM berdasarkan jenis parameter Biasanya, pembolehubah keadaan kontrak pintar akan dikekalkan secara automatik mengikut nilai terkini selepas pelaksanaan . Storan, pembangun tidak perlu mempertimbangkan proses ini. Tetapi ini tidak berlaku dalam Func Pembangun perlu melaksanakan sendiri logik pemprosesan yang sepadan Keadaan ini agak serupa dengan bagaimana C dan C++ perlu mempertimbangkan proses GC, tetapi bahasa pembangunan baharu yang lain biasanya mengautomasikan bahagian logik ini. . Mari kita lihat pada kod Pertama, kami memperkenalkan beberapa perpustakaan yang diperlukan, dan kemudian kita melihat bahawa fungsi pertama load_data digunakan untuk membaca data yang disimpan secara berterusan dilakukan oleh standard Dilaksanakan oleh perpustakaan stdlib.fc, beberapa fungsi biasanya 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 blok TON disimpan dalam pokok sel. Setiap sel mempunyai sehingga 1023 bit data arbitrari dan sehingga empat rujukan kepada sel lain. Sel digunakan sebagai memori dalam TVM berasaskan tindanan. Apa yang disimpan dalam sel adalah data yang dikodkan secara padat Untuk mendapatkan data teks biasa, sel perlu ditukar kepada jenis yang dipanggil hirisan. Sel boleh ditukar kepada jenis kepingan melalui fungsi begin_parse, dan kemudian data dalam sel boleh diperolehi dengan memuatkan bit data dan rujukan kepada sel lain daripada kepingan. Ambil perhatian bahawa kaedah panggilan dalam baris 15 ialah gula sintaktik dalam fungsi yang secara langsung memanggil fungsi kedua pada nilai pulangan fungsi pertama. Dan akhirnya muatkan data yang sepadan mengikut susunan mengikut susunan kegigihan data. Ambil perhatian bahawa proses ini berbeza daripada kekukuhan dan tidak dipanggil berdasarkan peta hash, jadi susunan panggilan tidak boleh dikacau.

    Dalam fungsi save_data, logiknya adalah serupa, kecuali ini adalah proses terbalik, yang memperkenalkan titik pengetahuan seterusnya, pembina jenis baharu, iaitu jenis pembina sel. Bit data dan rujukan kepada sel lain boleh disimpan dalam pembina, yang kemudiannya boleh dimuktamadkan ke dalam sel baharu. Mula-mula buat pembina melalui fungsi standard begin_cell, dan simpan fungsi berkaitan melalui fungsi berkaitan kedai secara bergilir Ambil perhatian bahawa susunan panggilan di atas perlu konsisten dengan susunan storan di sini. Akhir sekali, end_cell digunakan untuk melengkapkan pembinaan sel baharu Pada masa ini, sel diuruskan dalam ingatan Akhirnya, melalui set_data terluar, storan berterusan sel boleh diselesaikan.

    从源码角度看如何在TON Chain上创建一个NFT

    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 sahaja. diperkenalkan. Kami tahu bahawa dalam TON, panggilan antara kontrak pintar dilaksanakan dengan menghantar mesej dalaman. Ini dicapai melalui mesej yang dipanggil send_raw_message Ambil perhatian bahawa parameter pertama ialah sel berkod mesej, dan parameter kedua ialah bit pengenalan, yang digunakan untuk menunjukkan perbezaan dalam kaedah pelaksanaan urus niaga yang berbeza ditetapkan dalam TON Pada masa ini terdapat 3 Mod mesej dan 3 Bendera mesej untuk mod pelaksanaan penghantaran mesej. Mod tunggal boleh digabungkan dengan bendera berbilang (mungkin tiada) untuk mendapatkan mod yang diingini. Menggabungkan hanya bermakna mengisi jumlah nilai mereka. Jadual perihalan Mod dan Bendera diberikan di bawah:

    从源码角度看如何在TON Chain上创建一个NFT

    Jadi mari kita lihat fungsi utama pertama, deploy_nft_item Seperti namanya, ini adalah fungsi yang digunakan untuk mencipta atau menghantar kejadian NFT baharu Selepas beberapa operasi msg, hantar kontrak dalaman melalui send_raw_message, dan pilih bendera penghantaran bendera 1. Hanya yuran yang dinyatakan dalam pengekodan akan 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. Jadi mari kita lihat bagaimana ia dilaksanakan.

    Mari kita lihat terus di baris 51. Kedua-dua fungsi di atas adalah fungsi tambahan yang digunakan untuk menjana maklumat yang diperlukan untuk mesej, jadi kita akan melihatnya kemudian Ini adalah proses pengekodan untuk mencipta mesej dalaman kontrak pintar tengah sebenarnya Mereka juga beberapa bit pengenalan yang digunakan untuk menerangkan keperluan mesej dalaman Titik pengetahuan seterusnya diperkenalkan di sini TON memilih bahasa binari yang dipanggil TL-B untuk menerangkan mod pelaksanaan mesej, dan menetapkan bendera yang berbeza. bits to Untuk melaksanakan mesej dalaman untuk fungsi tertentu tertentu, dua senario penggunaan yang paling mudah difikirkan ialah penciptaan kontrak baharu dan panggilan fungsi kontrak yang digunakan. Kaedah pada baris 51 sepadan dengan yang pertama, mewujudkan kontrak item nft baharu, yang terutamanya ditentukan oleh baris 55, 56, dan 57. Pertama sekali, siri nombor besar dalam baris 55 ialah siri bit pengenalan Perhatikan bahawa parameter input pertama store_uint ialah nilai, dan yang kedua ialah panjang bit, yang menentukan sama ada mesej dalaman dicipta oleh kontrak. , tiga bit penanda terakhir, dan yang sepadan Bit nilai binari ialah 111 (perpuluhan ialah 4+2+1), dua yang pertama menunjukkan bahawa mesej akan disertakan dengan data StateInit Data ini adalah 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 kod, 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 Ambil perhatian bahawa pengekodan data stateinit juga mengikut peraturan pengekodan TL-B yang ditetapkan sebagai tambahan kepada beberapa bit bendera, ia melibatkan dua bahagian kod kontrak baharu dan data yang dimulakan. Susunan pengekodan data perlu konsisten dengan susunan storan sel kegigihan yang ditentukan oleh kontrak baharu. Seperti yang anda lihat pada baris 36, data permulaan termasuk item_index, yang serupa dengan tokenId dalam ERC721, dan alamat kontrak semasa yang dikembalikan oleh fungsi standard my_address, iaitu collection_address Susunan data ini adalah konsisten dengan pengisytiharan dalam nft-item.

    Maklumat pengetahuan seterusnya ialah dalam TON, semua kontrak pintar yang tidak dijana boleh mengira alamat terjananya Ini serupa dengan fungsi create2 dalam Solidity Penjanaan alamat baharu dalam TON terdiri daripada dua bahagian disambungkan dengan nilai hash stateinit Dalam pengenalan sebelum ini, kita sudah tahu bahawa yang pertama perlu ditentukan untuk sepadan dengan seni bina sharding tak terhingga TON pada masa ini adalah nilai bersatu. Diperolehi daripada rantai kerja fungsi standard. Yang terakhir diperolehi oleh fungsi standard cell_hash. Jadi kembali kepada contoh ini, hitung_nft_item_address ialah fungsi yang pra-mengira alamat kontrak baharu. Dan kodkan nilai yang dijana ke dalam mesej pada baris 53 sebagai alamat penerima mesej dalaman. 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 sebelumnya, kami secara khusus menekankan bahawa mesej dalaman dalam TON bukan sahaja mengandungi operasi yang boleh mengubah suai data, tetapi juga membaca-. hanya operasi yang perlu lulus ini Ia dilaksanakan dengan cara ini, jadi kontrak adalah operasi sedemikian Pertama sekali, perlu diperhatikan bahawa baris 67 mewakili tanda fungsi panggil balik peminta selepas menjawab permintaan itu dapatkan data yang dikembalikan, iaitu indeks item yang diminta dan data royalti yang sepadan.

    Mari kami memperkenalkan titik pengetahuan seterusnya Terdapat hanya dua pintu masuk bersatu ke kontrak pintar di TON, bernama recv_internal dan recv_external Yang pertama ialah pintu masuk panggilan bersatu untuk semua mesej dalaman, dan pintu masuk panggilan bersatu untuk semua luaran. , pembangun perlu menggunakan kaedah seperti suis untuk membalas permintaan yang berbeza berdasarkan bit bendera berbeza yang ditentukan oleh mesej dalam fungsi mengikut keperluan Bit bendera di sini ialah bendera fungsi panggil balik dalam baris 67 di atas. Kembali ke contoh ini, mula-mula lakukan semakan kekosongan pada mesej, dan kemudian menghuraikan maklumat dalam mesej masing-masing Mula-mula, menghuraikan pada baris 83 untuk mendapatkan alamat_pengirim Parameter ini akan digunakan untuk semakan kebenaran berikutnya di sini tergolong dalam sintaks lain. 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 rasa anda juga boleh mengetahui logik pemprosesan fungsi ini dengan menamakannya Sama seperti fungsi memerlukan dalam Solidity, pengecualian dilemparkan dalam Func melalui fungsi standard throw_kecuali parameter input pertama ialah Kod ralat. Yang kedua ialah menyemak nilai Boolean bit Jika bit itu palsu, pengecualian akan dilemparkan dengan kod ralat. Dalam baris ini, equal_slices digunakan untuk menentukan sama ada alamat_pengirim yang dihuraikan di atas adalah sama dengan alamat_pemilik storan berterusan kontrak dan pertimbangan kebenaran dibuat.

    从源码角度看如何在TON Chain上创建一个NFT

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

    从源码角度看如何在TON Chain上创建一个NFT

    Pembangunan DApp dalam ekosistem TON benar-benar menarik dan sangat berbeza daripada paradigma pembangunan EVM, jadi saya akan memperkenalkan cara membangunkan DApp dalam Rantaian TON melalui satu siri artikel.

    Atas ialah kandungan terperinci Bagaimana untuk 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