Tutorial de coleta NFT em marmelada
As políticas de token Marmalade permitem uma personalização refinada de como os NFTs são cunhados e vendidos. Este artigo fornece um tutorial que demonstra como uma coleção NFT compatível com pré-venda pode ser implementada em seu mercado NFT, usando um exemplo de política 'simples-one-off-collection-policy'.
Este tutorial demonstrará a política passo a passo com uma coleção de exemplo chamada muppets-v1.
A liberação da coleção é realizada nas seguintes etapas:
- Iniciar coleta (operador)
- Lista de permissões de reserva (Minter)
- Revelar tokens na coleção (operador)
- Criar / Mint Token (Minter)
- Transferir
Para criar uma coleção, o operador executa uma função diretamente na política, marmalade.simple-1-off-whitelist-collection-policy.init-collection, com os campos obrigatórios.
collection-id: ID da coleção.collection-size: Número total de tokens na coleção.collection-hash: Hash da lista de IDs de token na coleção.operator-guard: Guarda que é usado para revelar os tokens.operator: conta fungível existente para receber fundos emmint.fungible: o fungível a ser pago emreserve_whitelist.price: o preço fungível da lista branca a ser transferido do comprador para o operador.
Quando init-collectionfor bem-sucedido, um evento (marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator)será emitido.
Iniciarmuppets-v1
- Crie um manifesto de token para cada token:
{
uri:object{mf-uri}
hash:string
data:[object{mf-datum}]
}
2. Use marmalade.ledger.create-token-idpara gerar IDs de token.
(marmalade.ledger.create-token-id (kip.token-manifest.create-manifest (uri "text" "Kermit the Frog") [])))
Faremos o mesmo para os 7 tokens a mais e obteremos a lista de IDs de token.
(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"]
Por fim, podemos fazer o hash da lista e obter o collection-hash, usando hasha função.
(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. Executarinit-collection
Finalmente, temos nossos campos obrigatórios para iniciar nossa coleta. O código a seguir cria muppet-v1uma coleção com 9 tokens que geramos acima, sendo k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030a conta do operador fungível, coin, com preço whitelist de 5,0. Este código agora deve ser enviado para a cadeia.
(init-collection
"muppet-v1" 9 "eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E"
"k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" (read-keyset 'operator-guard) coin 5.0)
Lista de permissões de reserva
As listas brancas nesta política de coleta são por ordem de chegada. Esta etapa deve ser executada pelos cunhadores.
- Para reservar whitelists, os mineradores devem ter uma
fungibleconta com saldo maior que o preço.
(create-principal (read-keyset 'keyset))
{
"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"],
"pred": "keys-all"
}
Como esta transação será transferida coinpara o operador, os cunhadores devem assinar a capacidade (coin.TRANSFER "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" "k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030" 5.0)de enviar da conta da casa da moeda para a conta do operador.
2. Com a conta preparada, os mineradores agora podem executar reserve-whiteliste obter seus slots bloqueados.
A lista de permissões bem-sucedida emitirá um evento, (RESERVE_WHITELIST collection-id account whitelist-index). Esta informação deve ser salva para as criações de token e índice mint.
A lista de permissões do último token gerará um índice aleatório que deslocará os slots da lista de permissões. Este índice de deslocamento será usado para randomizar a seleção de NFTs dentro da coleção. Ao definir aleatoriamente o índice de turno no final da lista branca, a marmelada evita que o operador reserve determinados NFTs que podem ser mais valiosos do que outros.
Colocar um token na lista de permissõesmuppet-v1
- Execute
reserve-whitelistcom um conjunto de chaves.
(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)
Depois reserve-whitelistde concluído, o operador pode agora revelar os manifestos de token, mostrando qual índice de lista branca é dedicado a cada id de token.
Revelarmuppets-v1
O operador do muppets-v1irá preparar os token-ids e executar a função.
(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")
Criar Token / Cunhar Token
create-tokené uma operação necessária para cada token de marmelada na coleção para adicioná-lo ao registro de marmelada. Minters devem usar o manifesto publicado para chamar create-token.
Esta etapa é idealmente executada junto com minta transação. minté a etapa final necessária para possuir o token. Semelhante a create-token, minté uma operação geral de marmelada.
A política de coleta impõe que o create-tokene mintseja feito pela conta da lista de permissões.
Crie o token “t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4”.
- Encontre o arquivo
whitelist-info.
(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST "muppets-v1" "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4" 0)
Nosso whitelist-infoserá adicionado à env-datanossa transação e terá a seguinte aparência:
{
'whitelist-info : {
'collection-id: "muppets-v1"
,"index": 0
,"account": "k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"
,"guard": {"keys": ["27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4"], "pred": "keys-all"}}
}
Nosso índice de lista de desbloqueio era 0. Quando a lista de desbloqueio terminou, o índice de turno foi atualizado em 8. Isso significa que poderemos cunhar o token no índice 8. Se nosso índice de lista de desbloqueio for 1, poderemos cunhar o token no índice 0, e assim por diante. O token-id no índice 8 é t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.
3. Receba o token-manifesto do operador.
O operador liberará o manifesto do token em algum lugar para que os usuários criem os tokens. O manifesto que corresponde ao token t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4é mostrado abaixo.
{"uri":
{"scheme": "text","data": "Rizzo the Rat"},
"hash": "sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4","data": []}
(kip.token-manifest.create-manifest (uri "text" "Rizzo the Rat") [])
create-tokenleva em token-id, precision, token-manifeste policy. O precisioné 0, porque esta é uma política de coleta única. mintleva em token-id, account, guarde amount. amounté sempre 1,0, porque esta é uma política de cobrança pontual.
(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 mintpodem ser executados separadamente ou juntos na mesma transação.
Transferir
Esta política de cobrança usa simples transfere transfer-createdo marmalade.ledgercontrato. transferrequer nomes de contas de remetentes e destinatários, bem como o valor, que funciona com contas de destinatários existentes. transfer-createrequer nomes de conta do remetente e do destinatário, proteção do destinatário e a quantia, que funciona com destinatários existentes e inexistentes. A assinatura do remetente é necessária para ambos transfere transfer-create.
Coisas a considerar
Agora, examinamos como iniciar uma coleção para cunhar cada token na coleção. A conta designada na mintetapa agora possui o token no marmaladerazão principal.
Há mais perguntas a serem feitas, no entanto, incluindo a escalabilidade de coleções maiores.
- Como devemos evitar que o operador engane os whitelisters? O contrato coleta os fundos dos compradores na
reserve-whitelistfase, o que significa que, sem que o operador forneça manifestos de token, os compradores não podem cunhar o token. - O operador deve executar
reveal-tokens? Se a lista de tokens estiver disponível fora da cadeia, o operador não é necessariamente obrigado areveal-tokens. Se não, quem deve administrá-lo? - Se a coleção contiver tokens maiores, adicionar os slots e a lista de tokens como uma lista dentro de uma tabela pode se tornar uma transação cara. A alternativa pode ser adicionar cada lista de permissões e IDs de token como linhas na tabela.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)