NFT Collection Tutorial zu Marmalade

Jan 25 2023
Die Marmalade-Token-Richtlinien ermöglichen eine detaillierte Anpassung der Art und Weise, wie NFTs geprägt und verkauft werden. Dieser Artikel enthält ein Tutorial, das zeigt, wie eine NFT-Sammlung, die den Vorverkauf unterstützt, auf Ihrem NFT-Marktplatz implementiert werden könnte, anhand einer Beispielrichtlinie „einfache-einmalige-Sammlungsrichtlinie“.

Die Marmalade- Token-Richtlinien ermöglichen eine detaillierte Anpassung der Art und Weise, wie NFTs geprägt und verkauft werden. Dieser Artikel enthält ein Tutorial, das zeigt, wie eine NFT-Sammlung, die den Vorverkauf unterstützt, auf Ihrem NFT-Marktplatz implementiert werden könnte, anhand einer Beispielrichtlinie „einfache-einmalige-Sammlungsrichtlinie“.

In diesem Tutorial wird die Richtlinie Schritt für Schritt anhand einer Beispielsammlung mit dem Namen demonstriert muppets-v1.

Die Freigabe der Sammlung erfolgt in den folgenden Schritten:

  1. Sammlung einleiten (Operator)
  2. Reserve-Whitelist (Minter)
  3. Tokens in der Sammlung aufdecken (Operator)
  4. Token erstellen/prägen (Minter)
  5. Überweisen

Um eine Sammlung zu erstellen, führt der Operator direkt auf der Richtlinie eine Funktion marmalade.simple-1-off-whitelist-collection-policy.init-collectionmit den erforderlichen Feldern aus.

  • collection-id: ID der Sammlung.
  • collection-size: Gesamtzahl der Token in der Sammlung.
  • collection-hash: Hash der Liste der Token-IDs in der Sammlung.
  • operator-guard: Wächter, der zum Aufdecken der Token verwendet wird.
  • operator: bestehendes fungibles Konto zum Empfang von Geldern bei mint.
  • fungible: das zu zahlende Fungible reserve_whitelist.
  • price: der fungible Preis der Whitelist, der vom Käufer an den Betreiber übertragen wird.

Bei init-collectionErfolg (marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator)wird ein Ereignis ausgegeben.

Einleitenmuppets-v1

  1. Erstellen Sie für jedes Token ein Token-Manifest:

{
  uri:object{mf-uri}
  hash:string
  data:[object{mf-datum}]
}

2. marmalade.ledger.create-token-idZum Generieren von Token-IDs verwenden.

(marmalade.ledger.create-token-id (kip.token-manifest.create-manifest (uri "text" "Kermit the Frog") [])))

Wir werden dasselbe für die 7 weiteren Token tun und die Liste der Token-IDs erhalten.

(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"]

Schließlich können wir die Liste hashen und collection-hashmithilfe der hashFunktion , abrufen.

(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. Laufeninit-collection

Schließlich verfügen wir über die erforderlichen Felder, um unsere Sammlung zu starten. Der folgende Code erstellt muppet-v1eine Sammlung mit 9 Token, die wir oben generiert haben, wobei es k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030sich um das Betreiberkonto in Fungible handelt, coinmit einem Whitelist-Preis von 5,0. Dieser Code sollte nun an die Kette gesendet werden.

(init-collection
  "muppet-v1" 9 "eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E"
  "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" (read-keyset 'operator-guard) coin 5.0)

Whitelist reservieren

Whitelists in dieser Sammlungsrichtlinie werden nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ erstellt. Dieser Schritt ist von den Mintern durchzuführen.

  1. Um Whitelists zu reservieren, müssen Minter über ein fungibleKonto mit einem Kontostand verfügen, der über dem Preis liegt.

(create-principal (read-keyset 'keyset))

{
  "keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"],
  "pred": "keys-all"
}

Da diese Transaktion an den Betreiber übertragen wird coin, müssen die Minter die Möglichkeit unterzeichnen, (coin.TRANSFER "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" 5.0)vom Mint-Konto an das Betreiberkonto zu senden.

2. Mit dem vorbereiteten Konto können Minter nun loslegen reserve-whitelistund ihre Slots sperren.

Bei erfolgreicher Whitelist wird ein Ereignis ausgegeben (RESERVE_WHITELIST collection-id account whitelist-index). Diese Informationen sollten für die Token-Erstellung und den Mint-Index gespeichert werden.

Die Whitelist des letzten Tokens generiert einen zufälligen Index, der die Whitelist-Slots verschiebt. Dieser Verschiebungsindex wird verwendet, um die Auswahl der NFTs innerhalb der Sammlung zu randomisieren. Durch das zufällige Festlegen des Verschiebungsindex am Ende der Whitelist verhindert Marmelade, dass der Betreiber bestimmte NFTs reserviert, die möglicherweise wertvoller sind als andere.

Setzen Sie ein Token auf die Whitelistmuppet-v1

  1. reserve-whitelistMit einem Keyset ausführen .
  2. (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)

Sobald reserve-whitelistder Vorgang abgeschlossen ist, kann der Bediener nun die Token-Manifeste anzeigen und anzeigen, welcher Whitelist-Index jeder Token-ID zugeordnet ist.

Aufdeckenmuppets-v1

Der Operator muppets-v1bereitet die Token-IDs vor und führt die Funktion aus.

(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")

Token / Mint-Token erstellen

create-tokenist ein Vorgang, der für jeden Marmeladen-Token in der Sammlung erforderlich ist, um ihn dem Marmeladen-Ledger hinzuzufügen. Minters müssen zum Aufrufen das veröffentlichte Manifest verwenden create-token.

Dieser Schritt wird idealerweise zusammen mit der Transaktion ausgeführt mint. mintist der letzte Schritt, der erforderlich ist, um den Token zu besitzen. create-tokenÄhnlich wie bei minthandelt es sich um eine allgemeine Marmeladenoperation.

Die Erfassungsrichtlinie erzwingt, dass die create-tokenErfassung mintdurch das Konto auf der Whitelist erfolgt.

Erstellen Sie das Token „t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4“.

  1. Finden Sie die whitelist-info.

(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST "muppets-v1" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 0)

Unser whitelist-infowird zu env-dataunserer Transaktion hinzugefügt und sieht wie folgt aus:

{
  'whitelist-info : {
     'collection-id: "muppets-v1"
    ,"index": 0
    ,"account": "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"
    ,"guard": {"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"], "pred": "keys-all"}}
}

Unser Whitelist-Index war 0. Als die Whitelist endete, wurde der Schichtindex auf 8 aktualisiert. Das bedeutet, dass wir den Token bei Index 8 prägen können. Wenn unser Whitelist-Index 1 war, können wir den Token bei Index prägen 0 und so weiter. Die Token-ID bei Index 8 ist t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.

3. Erhalten Sie das Token-Manifest vom Betreiber.

Der Betreiber wird das Token-Manifest irgendwo veröffentlichen, damit die Benutzer die Token prägen können. Das Manifest, das mit token übereinstimmt t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4, wird unten angezeigt.

{"uri":
  {"scheme": "text","data": "Rizzo the Rat"},
   "hash": "sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4","data": []}

(kip.token-manifest.create-manifest (uri "text" "Rizzo the Rat") [])

create-tokennimmt token-id, precision, token-manifest, und auf policy. Der Wert precisionist 0, da es sich um eine einmalige Erfassungsrichtlinie handelt. mintnimmt token-id, account, guard, und auf amount. amountist immer 1,0, da es sich um eine einmalige Erfassungsrichtlinie handelt.

(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-tokenund mintkönnen einzeln oder zusammen in derselben Transaktion ausgeführt werden.

Überweisen

Diese Inkassorichtlinie verwendet nur transferdie Daten transfer-createaus dem marmalade.ledgerVertrag. transfererfordert die Namen der Absender- und Empfängerkonten sowie den Betrag, was mit vorhandenen Empfängerkonten funktioniert. transfer-createerfordert die Namen der Absender- und Empfängerkonten, den Empfängerschutz und den Betrag, was mit vorhandenen und nicht vorhandenen Empfängern funktioniert. transferFür beide ist die Unterschrift des Absenders erforderlich transfer-create.

Dinge, die man beachten muss

Wir haben nun darüber nachgedacht, eine Sammlung zu initiieren, um jeden Token in der Sammlung zu prägen. Das in diesem Schritt angegebene Konto mintist nun Eigentümer des Tokens im Hauptbuch marmalade.

Es müssen jedoch noch weitere Fragen gestellt werden, einschließlich der Skalierbarkeit größerer Sammlungen.

  • Wie können wir verhindern, dass der Betreiber die Whitelists betrügt? Der Vertrag sammelt die Gelder der Käufer in der reserve-whitelistPhase, was bedeutet, dass die Käufer den Token nicht prägen können, ohne dass der Betreiber Token-Mainifests bereitstellt.
  • Soll der Operator laufen reveal-tokens? Wenn die Token-Liste außerhalb der Kette verfügbar ist, muss der Betreiber dies nicht unbedingt tun reveal-tokens. Wenn nicht, wer sollte es leiten?
  • Wenn die Sammlung größere Token enthält, kann das Hinzufügen der Slots und der Token-Liste als Liste innerhalb einer Tabelle zu einer kostspieligen Transaktion werden. Die Alternative kann darin bestehen, alle Whitelists und Token-IDs als Zeilen in der Tabelle hinzuzufügen.