Коллекция NFT Tutorial on Marmalade

 


Политика токенов Marmalade позволяет детально настраивать способ чеканки и продажи NFT. В этой статье приводится руководство, демонстрирующее, как можно реализовать предпродажную поддержку коллекции NFT на вашем NFT marketplace, используя пример политики ‘simple-one-off-collection-policy`.

В этом руководстве пошагово будет продемонстрирована политика на примере коллекции под названием muppets-v1.

Выпуск коллекции осуществляется в следующие этапы:

  1. Инициировать сбор (оператор)
  2. Резервный белый список (Minter)
  3. Показывать токены в коллекции (оператор)
  4. Создать / Mint токен (Minter)
  5. Перемещение
Инициировать сбор

Чтобы создать коллекцию, оператор выполняет функцию непосредственно в политике marmalade.simple-1-off-whitelist-collection-policy.init-collection с обязательными полями.

  • collection-id: идентификатор коллекции.
  • collection-size: общее количество токенов в коллекции.
  • collection-hash: хэш списка идентификаторов токенов в коллекции.
  • operator-guard: охранник, который используется для выявления токенов.
  • operator: существующий взаимозаменяемый аккаунт для получения средств в mint.
  • fungible: взаимозаменяемый товар, подлежащий оплате в reserve_whitelist.
  • price: взаимозаменяемая цена белого списка, которая будет передана от покупателя оператору.
Наиболее важным полем для понимания на этом этапе является collection-hash. Чтобы заблокировать токены, не раскрывая их свойств, список токенов будет хэширован, причем каждый идентификатор токена будет хэшем его манифестов. Токены будут раскрыты на более позднем этапе, и манифесты токенов должны будут соответствовать заданному хэшу коллекции, чтобы быть созданными / minted.

Когда init-collection завершается успешно, происходит событие (marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator) будет выдан.

Инициировать muppets-v1

  1. Создайте манифест токена для каждого токена:
Все токены marmalade должны использовать функцию kip.token-manifest.create-manifest, которая вернет формат манифеста, подобный этому:


Для простоты манифесты каждого токена muppet будут содержать текст его названий.

2. Используйте marmalade.ledger.create-token-id для генерации идентификаторов токенов.


Функция просто форматирует манифест с помощью t:{manifest-hash}. Таким образом, идентификатором токена для muppet токен Kermit the Frog будет t:33vh4wJvxEkXW72Bgvd88S6HKcyxLj2WJZEydAP4CCU.

Мы сделаем то же самое еще для 7 токенов и получим список идентификаторов токенов.


возвращается

3.Хэшируйте список токенов.

Наконец, мы можем хэшировать список и получить collection-hash, используя функцию hash.


eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E - это хэш нашей коллекции. Обратите внимание, что все шаги 1-3 не должны выполняться on-chain, а должны выполняться вне цепочки. Только следующий шаг будет выполнен on-chain.

4. Запустите init-collection

Наконец, у нас есть обязательные поля для начала сбора данных. Следующий код создает коллекцию muppet-v1 с 9 токенами, которые мы сгенерировали выше, при этом k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030 является учетной записью оператора в fungible, coin, с ценой в белом списке 5,0. Теперь этот код должен быть отправлен в chain.

Как только транзакция завершится успешно, мы увидим следующее событие. (marmalade.simple-one-off-collection-policy.INIT_COLLECTION "muppet-v1" 9 "eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E" "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" coin 5.0)

Резервный белый список

Белые списки в соответствии с настоящей политикой сбора данных составляются в порядке живой очереди. Этот шаг должен быть выполнен minters.

Чтобы зарезервировать белые списки, у minters должна быть fungible учетная запись с балансом, превышающим цену.

В нашем примере в коллекции muppets-v1 используется взаимозаменяемый coin, поэтому учетная запись mint должна быть учетной записью coin с балансом больше 5,0. Minters должны использовать учетную запись, управляемую принципалом. Это может быть просто k:{public-key}, но есть функция act для его генерации в коде. Например, выполнив следующий код.

с набором ключей из

сгенерирует k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4.

Поскольку эта транзакция переведет coin оператору, minters должны подписать возможность (coin.TRANSFER "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" 5.0) для отправки с учетной записи mint на учетную запись оператора.

2. Имея подготовленную учетную запись, minters теперь могут запустить reserve-whitelist и заблокировать свои слоты.

Успешное внесение в белый список приведет к возникновению события (RESERVE_WHITELIST collection-id account whitelist-index). Эта информация должна быть сохранена для создания токенов и индекса mint.

Белый список последнего токена сгенерирует случайный индекс, который переместит ячейки белого списка. Этот индекс сдвига будет использоваться для рандомизации выбора NFT в коллекции. Случайным образом устанавливая индекс сдвига в конце белого списка, marmalade не позволяет оператору резервировать определенные NFT, которые могут быть более ценными, чем другие.

Внесите токен в белый список в muppet-v1

  1. Запустите reserve-whitelist с помощью набора ключей.

2. Сохраните отправленное событие.


3. Белый список последнего токена генерирует индекс сдвига.

Давайте предположим, что последний reserve-whitelist попал в блок 20987. Сгенерированный индекс сдвига будет равен 8, и транзакция выдаст 2 события.

Раскрывать токены

Как только reserve-whitelist будет завершен, оператор теперь может открыть манифесты токенов, показывая, какой индекс белого списка присвоен каждому идентификатору токена.

Покажите muppets-v1

Оператор muppets-v1 подготовит идентификаторы токенов и запустит функцию.


Обратите внимание, что функция reveal-tokens приводит хэш списка идентификаторов токенов в соответствие с collection-hash, который использовался на шаге init-collection, как показано ниже.


Для того чтобы чеканщики могли создавать и mint свои токены, оператор должен опубликовать манифесты токенов в белых списках.

Создать токен / Mint Token

create-token - это операция, необходимая для каждого токена marmalade в коллекции, чтобы добавить его в реестр marmalade. Minters должны использовать опубликованный манифест для вызова create-token.

Этот шаг идеально выполняется вместе с транзакцией mint. mint - это заключительный шаг, необходимый для владения токеном. Аналогично create-token, mint - это обычная операция marmalade.

Политика сбора данных предусматривает, что create-token и mint выполняются учетной записью, внесенной в белый список.

Создайте токен t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.

  1. Найдите whitelist-info.
На предыдущем шаге мы зарезервировали белый список для учетной записи и увидели отправленное событие, показанное ниже.

Нам нужны 4 поля для информации о белом списке: collection-id, account, guard, index. Чего нет в этом событии, так это охраны. Guard может быть просто информацией о keyset, которую мы предоставили в (create-principal (read-keyset 'keyset)).

Наша whitelist-info будет добавлена к env-data нашей транзакции и будет выглядеть следующим образом:


2. Найдите токен, соответствующий индексу белого списка.

Наш индекс в белом списке был равен 0. Когда белый список закончился, индекс сдвига был обновлен до 8. Это означает, что мы сможем mint токен с индексом 8. Если наш индекс белого списка был равен 1, мы сможем mint токен с индексом 0 и так далее. Идентификатор токена в индексе 8 равен t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.

3. Получите токен-манифест от оператора.

Оператор опубликует манифест токена где-нибудь, чтобы пользователи могли отчеканить токены. Манифест, который соответствует токену t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4, показан ниже.


Обратите внимание, что выше приведен результат выполнения кода,


4. Запустите create-token и mint с whitelist-info в env-data.

create-token принимает token-id, precision, token-manifest и policy. precision равна 0, потому что это политика одноразового сбора данных. mint принимает token-id, account, guard и amount. аmount всегда равна 1,0, потому что это политика единовременного взыскания.


minter должен подписать эти возможности, (marmalade.ledger.CREATE_TOKEN "t:9mCeDcVIuQET1awDEWbYXF-HlRzhLv5VW3hXiW9m678" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"), (marmalade.ledger.MINT "t:9mCeDcVIuQET1awDEWbYXF-HlRzhLv5VW3hXiW9m678" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 1.0)

create-token и mint могут выполняться отдельно или вместе в рамках одной транзакции.

Перемещение

В этой политике сбора данных используются простые transfer и transfer-create из контракта marmalade.ledger. для transfer требуются имена учетных записей отправителя и получателя, а также сумма, которая работает с существующими учетными записями получателей. для transfer-create требуются имена учетных записей отправителя и получателя, защита получателя и сумма, которая работает с существующими и несуществующими получателями. Подпись отправителя требуется как для transfer, так и для transfer-create.

Вещи, которые следует учитывать

Теперь мы рассмотрели возможность создания коллекции для mint каждого токена в коллекции. Учетная запись, указанная на этапе mint, теперь владеет токеном в главной книге marmalade.

Однако есть еще вопросы, которые необходимо задать, в том числе о масштабируемости больших коллекций.

  • Как мы должны предотвратить мошенничество оператора с белыми списками? Контракт собирает средства покупателей на этапе reserve-whitelist, что означает, что без предоставления оператором основных средств для токенов покупатели не смогут mint токен.
  • Должен ли оператор запускать reveal-tokens? Если список токенов доступен off-chain, то от оператора не обязательно требуется reveal-tokens. Если нет, то кто должен этим руководить?
  • Если коллекция содержит токены большего размера, то добавление слотов и списка токенов в виде списка внутри таблицы может стать дорогостоящей транзакцией. Альтернативой может быть добавление каждого белого списка и идентификаторов токенов в виде строк в таблице.
Мы надеемся, что вы нашли этот урок полезным! В течение года в Marmalade будет много интересных разработок, поэтому, пожалуйста, подписывайтесь на наши социальные каналы, чтобы быть в курсе событий!


Мы также на: Twitter | LinkedIn | Github | Reddit | Discord