Tutorial Koleksi NFT di Marmalade
Kebijakan token Marmalade memungkinkan penyesuaian terperinci tentang bagaimana NFT dicetak dan dijual. Artikel ini memberikan tutorial yang mendemonstrasikan bagaimana presale yang mendukung koleksi NFT dapat diimplementasikan di pasar NFT Anda, menggunakan contoh kebijakan 'kebijakan-koleksi-sekali pakai-sederhana`.
Tutorial ini akan mendemonstrasikan kebijakan langkah demi langkah dengan kumpulan contoh yang disebut muppets-v1.
Melepaskan koleksi dilakukan dengan langkah-langkah berikut:
- Memulai Pengumpulan (Operator)
- Reservasi Daftar Putih (Minter)
- Mengungkapkan Token dalam koleksi (Operator)
- Buat / Mint Token (Minter)
- Transfer
Untuk membuat koleksi, operator menjalankan fungsi secara langsung pada kebijakan, marmalade.simple-1-off-whitelist-collection-policy.init-collection, dengan bidang yang diperlukan.
collection-id: id koleksi.collection-size: Jumlah total token dalam koleksi.collection-hash: Hash dari daftar ID token dalam koleksi.operator-guard: Penjaga yang digunakan untuk mengungkapkan token.operator: akun fungible yang ada untuk menerima dana dimint.fungible: yang sepadan untuk dibayar direserve_whitelist.price: harga daftar putih yang dapat dipertukarkan untuk ditransfer dari pembeli ke operator.
Ketika init-collectionberhasil, sebuah acara (marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator)akan dipancarkan.
Memulaimuppets-v1
- Buat token-manifes untuk setiap token:
{
uri:object{mf-uri}
hash:string
data:[object{mf-datum}]
}
2. Gunakan marmalade.ledger.create-token-iduntuk menghasilkan token-id.
(marmalade.ledger.create-token-id (kip.token-manifest.create-manifest (uri "text" "Kermit the Frog") [])))
Kami akan melakukan hal yang sama untuk 7 token lainnya, dan mendapatkan daftar token-id.
(let*
( (get-manifest (lambda (muppet:string)
(create-manifest (uri "text" muppet) [])
))
(manifests:list (map get-manifest [ "Kermit the Frog"
"Miss Piggy"
"Fozzie Bear"
"Gonzo"
"Rowlf the Dog"
"Scooter"
"Animal"
"Pepe the King Prawn"
"Rizzo the Rat"]))
(tokens:list (map (create-token-id) manifests)
))
tokens
)
[ "t:33vh4wJvxEkXW72Bgvd88S6HKcyxLj2WJZEydAP4CCU"
"t:UohIzpKOlpp5l7UZ-KNni2xaLu5pO67QlHLmxj65g5U"
"t:u7u36BxiPTKp5Wuq_mXOLS7r2LFRaLeEKg2FY6ylNX0"
"t:rj3gbsmUdcXeb0kA39meDeKoMhWOPK6XEOCQ2RKF0q8"
"t:uOCqa9-MgFF68zyxccZKORGDk2zMRLwpKdXvr8hfE5A"
"t:dOFBE3GdsL-5BgMCdZfQzT20G81cANzwgwIf22N8_ig"
"t:LScEFcxVDsvZP38jO1Kp95yNu7hGmGNrzYkwCM5UWyA"
"t:--kKualbcNt2jKUPLG0Pyp6ByLJerOS_Wtxe914_YHA"
"t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4"]
Terakhir, kita dapat meng-hash list dan mendapatkan collection-hash, dengan menggunakan hashfunction.
(hash
["t:33vh4wJvxEkXW72Bgvd88S6HKcyxLj2WJZEydAP4CCU"
"t:UohIzpKOlpp5l7UZ-KNni2xaLu5pO67QlHLmxj65g5U"
"t:u7u36BxiPTKp5Wuq_mXOLS7r2LFRaLeEKg2FY6ylNX0"
"t:rj3gbsmUdcXeb0kA39meDeKoMhWOPK6XEOCQ2RKF0q8"
"t:uOCqa9-MgFF68zyxccZKORGDk2zMRLwpKdXvr8hfE5A"
"t:dOFBE3GdsL-5BgMCdZfQzT20G81cANzwgwIf22N8_ig"
"t:LScEFcxVDsvZP38jO1Kp95yNu7hGmGNrzYkwCM5UWyA"
"t:--kKualbcNt2jKUPLG0Pyp6ByLJerOS_Wtxe914_YHA"
"t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4"] )
4. Lariinit-collection
Akhirnya, kami memiliki bidang wajib untuk memulai pengumpulan kami. Kode berikut membuat muppet-v1koleksi dengan 9 token yang kami buat di atas, dengan k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030menjadi akun operator yang dapat dipertukarkan, coindengan harga daftar putih 5.0. Kode ini sekarang harus dikirim ke rantai.
(init-collection
"muppet-v1" 9 "eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E"
"k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" (read-keyset 'operator-guard) coin 5.0)
Cadangan Daftar Putih
Daftar putih dalam kebijakan penagihan ini berdasarkan siapa cepat dia dapat. Langkah ini harus dijalankan oleh para pencetak.
- Untuk memesan daftar putih, pencetak harus memiliki
fungibleakun dengan saldo lebih besar dari harga.
(create-principal (read-keyset 'keyset))
{
"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"],
"pred": "keys-all"
}
Karena transaksi ini akan ditransfer coinke operator, maka pencetak harus menandatangani kemampuan (coin.TRANSFER "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" 5.0)untuk mengirim dari akun mint ke akun operator.
2. Dengan akun yang telah disiapkan, pencetak sekarang dapat menjalankan reserve-whitelistdan mengunci slot mereka.
Daftar putih yang berhasil akan memunculkan acara, (RESERVE_WHITELIST collection-id account whitelist-index). Info ini harus disimpan untuk pembuatan token dan indeks mint.
Daftar putih token terakhir akan menghasilkan indeks acak yang akan menggeser slot daftar putih. Indeks pergeseran ini akan digunakan untuk mengacak pemilihan NFT dalam koleksi. Dengan mengatur indeks shift secara acak di akhir daftar putih, marmalade mencegah operator untuk memesan NFT tertentu yang mungkin lebih berharga daripada yang lain.
Masukkan token ke daftar putihmuppet-v1
- Jalankan
reserve-whitelistdengan keyset.
(marmalade.simple-one-off-collection-policy.reserve-whitelist "muppet-v1" (create-principal (read-keyset 'keyset)))
(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST "muppets-v1" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 0)
(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST "muppets-v1" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 8)
(marmalade.simple-one-off-collection-policy.SHIFT collection-0" 8)
Setelah reserve-whitelistselesai, operator sekarang dapat mengungkapkan manifes token, menunjukkan indeks daftar putih mana yang didedikasikan untuk setiap id token.
Mengungkapmuppets-v1
Operator muppets-v1akan menyiapkan token-id, dan menjalankan fungsinya.
(marmalade.simple-one-off-collection-policy.reveal-tokens "muppets-v1"
[ "t:33vh4wJvxEkXW72Bgvd88S6HKcyxLj2WJZEydAP4CCU"
"t:UohIzpKOlpp5l7UZ-KNni2xaLu5pO67QlHLmxj65g5U"
"t:u7u36BxiPTKp5Wuq_mXOLS7r2LFRaLeEKg2FY6ylNX0"
"t:rj3gbsmUdcXeb0kA39meDeKoMhWOPK6XEOCQ2RKF0q8"
"t:uOCqa9-MgFF68zyxccZKORGDk2zMRLwpKdXvr8hfE5A"
"t:dOFBE3GdsL-5BgMCdZfQzT20G81cANzwgwIf22N8_ig"
"t:LScEFcxVDsvZP38jO1Kp95yNu7hGmGNrzYkwCM5UWyA"
"t:--kKualbcNt2jKUPLG0Pyp6ByLJerOS_Wtxe914_YHA"
"t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4"])
(enforce (= collection-hash (hash token-ids)) "Token manifests don't match")
Buat Token / Mint Token
create-tokenadalah operasi yang diperlukan untuk setiap token marmalade dalam koleksi untuk menambahkannya ke buku besar marmalade. Penambang harus menggunakan manifes yang dipublikasikan untuk memanggil create-token.
Langkah ini idealnya dijalankan bersamaan dengan minttransaksi. mintadalah langkah terakhir yang diperlukan untuk memiliki token. Mirip dengan create-token, mintadalah operasi marmalade umum.
Kebijakan penagihan memberlakukan bahwa create-tokendan mintdilakukan oleh akun yang masuk daftar putih.
Buat token “t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4”.
- Temukan file
whitelist-info.
(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST "muppets-v1" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 0)
Kami whitelist-infoakan ditambahkan ke env-datatransaksi kami, dan akan terlihat seperti berikut:
{
'whitelist-info : {
'collection-id: "muppets-v1"
,"index": 0
,"account": "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"
,"guard": {"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"], "pred": "keys-all"}}
}
Indeks daftar putih kami adalah 0. Ketika daftar putih berakhir, indeks pergeseran diperbarui pada 8. Ini berarti kami dapat mencetak token pada indeks 8. Jika indeks daftar putih kami adalah 1, kami dapat mencetak token pada indeks 0, dan seterusnya. Token-id pada indeks 8 adalah t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.
3. Terima token-manifest dari operator.
Operator akan merilis token-manifest di suatu tempat bagi pengguna untuk mencetak token. Manifes yang cocok dengan token t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4, ditampilkan di bawah.
{"uri":
{"scheme": "text","data": "Rizzo the Rat"},
"hash": "sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4","data": []}
(kip.token-manifest.create-manifest (uri "text" "Rizzo the Rat") [])
create-tokenmengambil token-id, precision, token-manifest, dan policy. Itu precisionadalah 0, karena ini adalah kebijakan pengumpulan satu kali. mintmengambil token-id, account, guard, dan amount. amountselalu 1.0, karena ini adalah kebijakan pengumpulan satu kali.
(marmalade.ledger.create-token
"t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4"
0
{"uri":
{"scheme": "text","data": "Rizzo the Rat"},
"hash": "sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4","data": []}
marmalade.simple-one-off-collection-policy)
(marmalade.ledger.mint
"t:9mCeDcVIuQET1awDEWbYXF-HlRzhLv5VW3hXiW9m678"
"k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"
(at 'guard (read-msg 'whitelist-info ))
1.0))
create-tokendan mintdapat berjalan secara terpisah atau bersama-sama pada transaksi yang sama.
Transfer
Kebijakan penagihan ini menggunakan polos transferdan transfer-createdari marmalade.ledgerkontrak. transfermembutuhkan nama akun pengirim dan penerima serta jumlahnya, yang berfungsi dengan akun penerima yang ada. transfer-createmembutuhkan nama akun pengirim dan penerima, penjaga penerima, dan jumlahnya, yang berfungsi dengan penerima yang ada dan tidak ada. Tanda tangan pengirim diperlukan untuk transferdan transfer-create.
Hal-hal yang perlu dipertimbangkan
Kami sekarang telah melihat memulai koleksi untuk mencetak setiap token dalam koleksi. Akun yang ditunjuk pada mintlangkah sekarang memiliki token di marmaladebuku besar utama.
Namun, ada lebih banyak pertanyaan yang harus diajukan, termasuk skalabilitas koleksi yang lebih besar.
- Bagaimana kita mencegah operator menipu daftar putih? Kontrak mengumpulkan dana pembeli pada
reserve-whitelistfase, yang berarti bahwa tanpa operator menyediakan token-mainifests, pembeli tidak dapat mencetak token. - Haruskah operator lari
reveal-tokens? Jika daftar token tersedia secara off-chain, maka operator tidak diharuskan untuk melakukannyareveal-tokens. Jika tidak, siapa yang harus menjalankannya? - Jika koleksi memiliki token yang lebih besar, menambahkan slot dan daftar token sebagai daftar di dalam tabel dapat menjadi transaksi yang mahal. Alternatifnya dapat menambahkan setiap daftar putih dan token-id sebagai baris dalam tabel.

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































