В этом руководстве пошагово будет продемонстрирована политика на примере коллекции под названием muppets-v1.
Выпуск коллекции осуществляется в следующие этапы:
- Инициировать сбор (оператор)
- Резервный белый список (Minter)
- Показывать токены в коллекции (оператор)
- Создать / Mint токен (Minter)
- Перемещение
Чтобы создать коллекцию, оператор выполняет функцию непосредственно в политике marmalade.simple-1-off-whitelist-collection-policy.init-collection с обязательными полями.
- collection-id: идентификатор коллекции.
- collection-size: общее количество токенов в коллекции.
- collection-hash: хэш списка идентификаторов токенов в коллекции.
- operator-guard: охранник, который используется для выявления токенов.
- operator: существующий взаимозаменяемый аккаунт для получения средств в mint.
- fungible: взаимозаменяемый товар, подлежащий оплате в reserve_whitelist.
- price: взаимозаменяемая цена белого списка, которая будет передана от покупателя оператору.
Когда init-collection завершается успешно, происходит событие (marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator) будет выдан.
Инициировать muppets-v1
- Создайте манифест токена для каждого токена:
2. Используйте marmalade.ledger.create-token-id для генерации идентификаторов токенов.
Мы сделаем то же самое еще для 7 токенов и получим список идентификаторов токенов.
3.Хэшируйте список токенов.
Наконец, мы можем хэшировать список и получить collection-hash, используя функцию hash.
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
- Запустите reserve-whitelist с помощью набора ключей.
2. Сохраните отправленное событие.
Давайте предположим, что последний reserve-whitelist попал в блок 20987. Сгенерированный индекс сдвига будет равен 8, и транзакция выдаст 2 события.
Как только reserve-whitelist будет завершен, оператор теперь может открыть манифесты токенов, показывая, какой индекс белого списка присвоен каждому идентификатору токена.
Покажите muppets-v1
Оператор muppets-v1 подготовит идентификаторы токенов и запустит функцию.
Создать токен / Mint Token
create-token - это операция, необходимая для каждого токена marmalade в коллекции, чтобы добавить его в реестр marmalade. Minters должны использовать опубликованный манифест для вызова create-token.
Этот шаг идеально выполняется вместе с транзакцией mint. mint - это заключительный шаг, необходимый для владения токеном. Аналогично create-token, mint - это обычная операция marmalade.
Политика сбора данных предусматривает, что create-token и mint выполняются учетной записью, внесенной в белый список.
Создайте токен t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.
- Найдите whitelist-info.
На предыдущем шаге мы зарезервировали белый список для учетной записи и увидели отправленное событие, показанное ниже.
Нам нужны 4 поля для информации о белом списке: collection-id, account, guard, index. Чего нет в этом событии, так это охраны. Guard может быть просто информацией о keyset, которую мы предоставили в (create-principal (read-keyset 'keyset)).
Наша whitelist-info будет добавлена к env-data нашей транзакции и будет выглядеть следующим образом:
Наш индекс в белом списке был равен 0. Когда белый список закончился, индекс сдвига был обновлен до 8. Это означает, что мы сможем mint токен с индексом 8. Если наш индекс белого списка был равен 1, мы сможем mint токен с индексом 0 и так далее. Идентификатор токена в индексе 8 равен t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.
3. Получите токен-манифест от оператора.
Оператор опубликует манифест токена где-нибудь, чтобы пользователи могли отчеканить токены. Манифест, который соответствует токену t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4, показан ниже.
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. Если нет, то кто должен этим руководить?
- Если коллекция содержит токены большего размера, то добавление слотов и списка токенов в виде списка внутри таблицы может стать дорогостоящей транзакцией. Альтернативой может быть добавление каждого белого списка и идентификаторов токенов в виде строк в таблице.