Tutorial della raccolta NFT sulla marmellata
Le politiche sui token Marmalade consentono una personalizzazione a grana fine del modo in cui gli NFT vengono coniati e venduti. Questo articolo fornisce un tutorial che dimostra come una raccolta NFT che supporta la prevendita potrebbe essere implementata nel tuo marketplace NFT, utilizzando una policy di esempio "policy di raccolta una tantum semplice".
Questo tutorial dimostrerà la politica passo dopo passo con una raccolta di esempio chiamata muppets-v1.
Il rilascio della raccolta avviene nei seguenti passaggi:
- Avvia raccolta (operatore)
- Lista bianca di riserva (Minter)
- Reveal Tokens in collection (Operatore)
- Crea / Mint Token (Minter)
- Trasferimento
Per creare una collezione, l'operatore esegue una funzione direttamente sulla policy, marmalade.simple-1-off-whitelist-collection-policy.init-collection, con i campi richiesti.
collection-id: ID della raccolta.collection-size: numero totale di token nella raccolta.collection-hash: hash dell'elenco di ID token nella raccolta.operator-guard: Guardia che serve a rivelare i gettoni.operator: conto fungibile esistente per ricevere fondi pressomint.fungible: il fungibile da pagare areserve_whitelist.price: il prezzo fungibile della whitelist da trasferire dall'acquirente all'operatore.
Quando ha successo, verrà emesso init-collectionun evento .(marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator)
Iniziatomuppets-v1
- Crea un token-manifest per ogni token:
{
uri:object{mf-uri}
hash:string
data:[object{mf-datum}]
}
2. Utilizzare marmalade.ledger.create-token-idper generare token-id.
(marmalade.ledger.create-token-id (kip.token-manifest.create-manifest (uri "text" "Kermit the Frog") [])))
Faremo lo stesso per gli altri 7 token e otterremo l'elenco dei 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"]
Infine, possiamo eseguire l'hashing dell'elenco e ottenere collection-hash, utilizzando hashla funzione.
(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. Corriinit-collection
Infine, abbiamo i nostri campi obbligatori per avviare la nostra raccolta. Il seguente codice crea muppet-v1una raccolta con 9 token che abbiamo generato sopra, k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030essendo l'account dell'operatore in fungibile, coincon un prezzo di whitelist di 5.0. Questo codice dovrebbe ora essere inviato alla catena.
(init-collection
"muppet-v1" 9 "eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E"
"k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" (read-keyset 'operator-guard) coin 5.0)
Prenota Whitelist
Le whitelist in questa politica di raccolta sono in base all'ordine di arrivo. Questo passaggio deve essere eseguito dai minatori.
- Per prenotare le whitelist, i minatori devono avere un
fungibleaccount con un saldo superiore al prezzo.
(create-principal (read-keyset 'keyset))
{
"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"],
"pred": "keys-all"
}
Poiché questa transazione verrà trasferita coinall'operatore, i minatori devono firmare la capacità (coin.TRANSFER "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" 5.0)di inviare dall'account mint all'account dell'operatore.
2. Con l'account preparato, i minatori possono ora correre reserve-whiteliste bloccare i loro slot.
La whitelist riuscita emetterà un evento, (RESERVE_WHITELIST collection-id account whitelist-index). Queste informazioni dovrebbero essere salvate per le creazioni di token e l'indice di zecca.
La whitelist dell'ultimo token genererà un indice casuale che sposterà gli slot della whitelist. Questo indice di spostamento verrà utilizzato per randomizzare la selezione di NFT all'interno della raccolta. Impostando in modo casuale l'indice di spostamento alla fine della whitelist, marmellata impedisce all'operatore di riservare determinati NFT che potrebbero essere più preziosi di altri.
Inserisci nella whitelist un tokenmuppet-v1
- Esegui
reserve-whitelistcon un 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)
Una volta reserve-whitelistcompletato, l'operatore può ora rivelare i token manifest, mostrando quale indice di whitelist è dedicato a ciascun token id.
Svelaremuppets-v1
L'operatore di muppets-v1preparerà i token-id ed eseguirà la funzione.
(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")
Crea token / token di zecca
create-tokenè un'operazione richiesta per ogni token marmellata nella raccolta per aggiungerlo al libro mastro marmellata. I minatori devono utilizzare il manifest pubblicato per chiamare create-token.
Questo passaggio è idealmente eseguito insieme alla minttransazione. mintè il passaggio finale necessario per possedere il token. Simile a create-token, mintè un'operazione generale di marmellata.
La politica di riscossione impone che create-tokene mintvenga eseguita dall'account autorizzato.
Crea il token "t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4".
- Trova il file
whitelist-info.
(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST "muppets-v1" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 0)
Il nostro whitelist-infoverrà aggiunto alla env-datanostra transazione e sarà simile al seguente:
{
'whitelist-info : {
'collection-id: "muppets-v1"
,"index": 0
,"account": "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"
,"guard": {"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"], "pred": "keys-all"}}
}
Il nostro indice di whitelist era 0. Quando la whitelist è terminata, l'indice di spostamento è stato aggiornato a 8. Ciò significa che saremo in grado di coniare il token all'indice 8. Se il nostro indice di whitelist era 1, saremo in grado di coniare il token all'indice 0, e così via. Il token-id all'indice 8 è t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.
3. Ricevi il token-manifest dall'operatore.
L'operatore rilascerà il token-manifest da qualche parte affinché gli utenti possano coniare i token. t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4Di seguito viene mostrato il manifest che corrisponde a token .
{"uri":
{"scheme": "text","data": "Rizzo the Rat"},
"hash": "sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4","data": []}
(kip.token-manifest.create-manifest (uri "text" "Rizzo the Rat") [])
create-tokenaccetta token-id, precision, token-manifest, e policy. Il valore precisionè 0, poiché si tratta di una politica di riscossione una tantum. mintaccetta token-id, account, guard, e amount. amountè sempre 1.0, poiché si tratta di una politica di riscossione una tantum.
(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-tokene mintpossono essere eseguiti separatamente o insieme sulla stessa transazione.
Trasferimento
Questa politica di raccolta utilizza pianura transfere transfer-createdal marmalade.ledgercontratto. transferrichiede i nomi degli account del mittente e del destinatario, nonché l'importo, che funziona con gli account del destinatario esistenti. transfer-createrichiede i nomi degli account del mittente e del destinatario, la guardia del destinatario e l'importo, che funziona con destinatari esistenti e inesistenti. La firma del mittente è richiesta sia per che transferper transfer-create.
Cose da considerare
Abbiamo ora esaminato l'avvio di una raccolta per coniare ogni gettone nella raccolta. L'account designato nella mintfase ora possiede il token nel marmaladelibro mastro principale.
Tuttavia, ci sono altre domande da porsi, inclusa la scalabilità di raccolte più grandi.
- Come dovremmo impedire all'operatore di truffare i whitelisters? Il contratto raccoglie i fondi degli acquirenti in
reserve-whitelistfase, il che significa che senza che l'operatore fornisca token-mainifest, gli acquirenti non possono coniare il token. - L'operatore dovrebbe correre
reveal-tokens? Se l'elenco dei token è disponibile off-chain, l'operatore non è necessariamente tenuto areveal-tokens. In caso contrario, chi dovrebbe gestirlo? - Se la raccolta contiene token più grandi, l'aggiunta degli slot e dell'elenco dei token come elenco all'interno di una tabella può diventare una transazione costosa. L'alternativa può essere l'aggiunta di ogni whitelist e token-id come righe nella tabella.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































