El tutorial de la colección NFT sobre mermelada por Heekyun Kadena ene, 2023

Las políticas de tokens de Marmalade permiten una personalización detallada de cómo se acuñan y venden los NFT. Este artículo proporciona un tutorial que demuestra cómo se podría implementar una colección de NFT compatible con la preventa en su mercado de NFT, utilizando una política de ejemplo ‘política de colección única y simple’.

Este tutorial demostrará la política paso a paso con una colección de ejemplo llamada muppets-v1.

La liberación de la colección se logra en los siguientes pasos:

Iniciar colección (Operador) Reservar lista blanca (Minter) Revelar tokens en la colección (Operador) Crear / Mint Token (Minter) Transferir

Para crear una colección, el operador ejecuta una función directamente en la política, marmalade.simple-1-off-whitelist-collection-policy.init-collection, con los campos requeridos.

collection-id: id de la colección. collection-size: número total de tokens en la colección. collection-hash: hash de la lista de identificadores de tokens en la colección. operator-guard: protección que se utiliza para revelar los tokens.operator: cuenta fungible existente para recibir fondos en mint.fungible: el fungible que se pagará en reserve_whitelist.price: el precio fungible de la lista blanca que se transferirá del comprador al operador.

El campo más importante que hay que entender en este paso es el hash de colección. Para bloquear los tokens sin revelar sus propiedades, la lista de tokens se codificará, siendo cada identificador de token el hash de sus manifiestos. Los tokens se revelarán en un paso posterior, y los manifiestos de tokens deberán coincidir con el hash de colección dado para poder crearse/acuñarse.

Cuando init-collection tiene éxito, se emitirá un evento (marmalade.simple-one-off-collection-policy.INIT_COLLECTION collection-id collection-size collection-hash fungible price operator).

Iniciar muppets-v1

Cree un manifiesto de token para cada token:

Todos los tokens de mermelada deben usar la función kip.token-manifest.create-manifest, que devolverá un formato de manifiesto como este:

{
uri:objeto{mf-uri}
hash: cadena
datos:[object{mf-datum}]
}

Para simplificar, cada manifiesto de token de muppet contendrá el texto de sus nombres.

2. Use marmalade.ledger.create-token-id para generar identificadores de token.

(marmalade.ledger.create-token-id (kip.token-manifest.create-manifest (uri “texto” “Kermit the Frog”) [])))

La función simplemente formatea el manifiesto con t:{manifest-hash}. Por lo tanto, la identificación del token para el token muppet Kermit the Frog será t: 33vh4wJvxEkXW72Bgvd88S6HKcyxLj2WJZEydAP4CCU.

Haremos lo mismo con los 7 tokens más y obtendremos la lista de identificadores de token.

(dejar*
((obtener-manifiesto(lambda(muppet:cadena))
(crear-manifiesto (uri “texto” muppet) [])
))
(manifiestos: lista (mapa get-manifest [ “Kermit the Frog”
“Miss Piggy”
“Fozzie Bear”
“Gonzo”
“Rowlf the Dog”
“Scooter”
“Animal”
“Pepe the King Prawn”
“Rizzo the Rat”]))
(tokens: lista (mapa (crear-token-id) manifiestos)
))
fichas
)

devoluciones

[ “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”]

3. Hash la lista de tokens.

Finalmente, podemos hacer un hash de la lista y obtener el hash de la colección, usando la función hash.

(picadillo
[“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”] )

eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E es nuestro hash de colección. Tenga en cuenta que todos los pasos 1-3 no se deben realizar en la cadena, sino que se deben realizar fuera de la cadena. Solo el siguiente paso se ejecutará en la cadena.

4. Ejecute init-colección

Finalmente, tenemos nuestros campos requeridos para iniciar nuestra colección. El siguiente código crea la colección muppet-v1 con 9 tokens que generamos anteriormente, siendo k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030 la cuenta del operador en moneda fungible, con un precio de lista blanca de 5.0. Este código ahora debe enviarse a la cadena.

(init-colección
“muppet-v1” 9 “eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E”
“k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030” (juego de teclas de lectura ‘operador-guardia) moneda 5.0)

Veremos el siguiente evento emitido una vez que la transacción tenga éxito. (marmalade.simple-one-off-collection-policy.INIT_COLLECTION “muppet-v1” 9 “eLbTngl8lNBPshPMohX0ILM8l7R4RV8eNm9p0Pq1W6E” “k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d505303.e07) moneda”

Las listas blancas en esta política de recopilación se asignan por orden de llegada. Este paso debe ser ejecutado por los minters.

Para reservar listas blancas, los minters deben tener una cuenta fungible con un saldo mayor que el precio.

En nuestro ejemplo, la colección de muppets-v1 usa monedas fungibles, por lo que la cuenta mint debe ser una cuenta de monedas con un saldo mayor a 5.0. Minters debe usar una cuenta de principal. Esto puede ser simplemente ak:{public-key}, pero hay una función de acto para generarlo en el código. Por ejemplo, ejecutando el siguiente código.

(crear-principal (leer-keyset ‘keyset))

con un juego de llaves de

{
“llaves”: [“27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4”],
“pred”: “todas las teclas”
}

generará ak:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4.

Because this transaction will transfer coin to operator, the minters must sign the capability (coin.TRANSFER “k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4” “k:aa5f18ed095607fbef309abd5511baaa0844e067a61ed4cf51d5333e770ed030” 5.0) to send from mint account to the operator account.

2. Con una cuenta preparada, los minters ahora pueden ejecutar la lista blanca de reserva y bloquear sus espacios.

La lista blanca exitosa emitirá un evento (RESERVE_WHITELIST índice de lista blanca de cuenta de ID de colección). Esta información debe guardarse para las creaciones de fichas y el índice de menta.

La lista blanca del último token generará un índice aleatorio que cambiará las ranuras de la lista blanca. Este índice de cambio se utilizará para aleatorizar la selección de NFT dentro de la colección. Al establecer aleatoriamente el índice de turno al final de la lista blanca, mermelada evita que el operador reserve ciertos NFT que pueden ser más valiosos que otros.

Lista blanca de un token en muppet-v1

Ejecute reserve-whitelist con un conjunto de claves.(marmalade.simple-one-off-collection-policy.reserve-whitelist “muppet-v1” (create-principal (read-keyset ‘keyset)))

2. Guarde el evento emitido.

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

3. La lista blanca del último token genera un índice de cambio.

Supongamos que la última lista blanca de reserva llegó al bloque 20987. El índice de desplazamiento generado será 8 y la transacción emitirá 2 eventos.

(marmalade.simple-one-off-collection-policy.RESERVE_WHITELIST “muppets-v1” “k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4” 8)
(marmalade.simple-one-off-collection-policy.SHIFT collection-0″ 8)

Una vez que se completa la lista blanca de reserva, el operador ahora puede revelar los manifiestos de token, mostrando qué índice de lista blanca está dedicado a cada ID de token.

Revelar muppets-v1

El operador de los muppets-v1 preparará los token-ids y ejecutará la función.

(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”])

Tenga en cuenta que la función de revelación de tokens impone el hash de la lista de identificadores de tokens para que coincida con el hash de colección que se usó en el paso de inicio de colección, como se muestra a continuación.

(hacer cumplir (= colección-hash (hash token-ids)) “Los manifiestos de token no coinciden”)

Para que los minters puedan crear y acuñar sus tokens, el operador debe publicar los manifiestos de tokens en las listas blancas.

create-token es una operación requerida para cada ficha de mermelada en la colección para agregarla al libro mayor de mermelada. Minters debe usar el manifiesto publicado para llamar a create-token.

Idealmente, este paso se ejecuta junto con la transacción de menta. mint es el paso final que se requiere para poseer el token. Similar a create-token, mint es una operación general de mermelada.

La política de recopilación exige que la cuenta incluida en la lista blanca realice la creación del token y la acuñación.

Cree el token “t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4”.

Encuentre la información de la lista blanca.

En el paso anterior, habíamos reservado la lista blanca para la cuenta y vimos el evento emitido a continuación.

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

Necesitamos 4 campos para la información de la lista blanca: ID de colección, cuenta, guardia, índice. Lo que no está en este evento es la guardia. Guard puede ser simplemente la información del conjunto de claves que proporcionamos en (create-principal (read-keyset ‘keyset)).

Nuestra información de la lista blanca se agregará a los datos env de nuestra transacción y tendrá el siguiente aspecto:

{
‘info de la lista blanca: {
‘colección-id: “muppets-v1”
,”índice”: 0
,”cuenta”: “k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4”
,”guardia”: {“llaves”: [“27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4″]”pred”: “todas las teclas”}}
}

2. Busque el token que coincida con el índice de la lista blanca.

Nuestro índice de lista blanca era 0. Cuando finalizó la lista blanca, el índice de cambio se actualizó a 8. Esto significa que podremos acuñar el token en el índice 8. Si nuestro índice de lista blanca era 1, podremos acuñar el token en el índice 0, y así sucesivamente. El token-id en el índice 8 es t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4.

3. Reciba el token-manifiesto del operador.

El operador lanzará el token-manifest en algún lugar para que los usuarios acumulen los tokens. El manifiesto que coincide con el token t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4 se muestra a continuación.

{“uri”:
{“esquema”: “texto”,”datos”: “Rizzo la rata”},
“hash”: “sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4″,”datos”: []}

Tenga en cuenta que arriba es el resultado del código,

(kip.token-manifest.create-manifest (uri “texto” “Rizzo the Rat”) [])

4. Ejecute create-token y mint con whitelist-info en env-data.

create-token incluye token-id, precisión, token-manifest y política. La precisión es 0, porque esta es una política de recolección única. mint toma token-id, cuenta, guardia y cantidad. el importe es siempre 1,0, porque se trata de una política de cobro única.

(marmalade.ledger.create-token
“t:sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4”
0
{“uri”:
{“esquema”: “texto”,”datos”: “Rizzo la rata”},
“hash”: “sQ19jh3-w3HOchpBefpKTBGj2_ARjC4xLiV0SVlokf4″,”datos”: []}
marmalade.simple-one-off-colección-política)
(mermelada.libro.menta
“t:9mCeDcVIuQET1awDEWbYXF-HlRzhLv5VW3hXiW9m678”
“k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4”
(en ‘guardia (leer-mensaje ‘lista-blanca-info))
1.0))

The minter needs to sign the capabilities, (marmalade.ledger.CREATE_TOKEN “t:9mCeDcVIuQET1awDEWbYXF-HlRzhLv5VW3hXiW9m678” “k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4”), (marmalade.ledger.MINT “t:9mCeDcVIuQET1awDEWbYXF-HlRzhLv5VW3hXiW9m678” “k:27fff7d20390142caf727cd4713d2c810839486fa2350af7e2ce980090185ce4” 1.0)

create-token y mint pueden ejecutarse por separado o juntos en la misma transacción.

Esta política de cobro utiliza la transferencia simple y la creación de transferencia del contrato marmalade.ledger. la transferencia requiere los nombres de las cuentas del remitente y del destinatario, así como el monto, que funciona con cuentas de destinatarios existentes. transfer-create requiere los nombres de cuenta del remitente y el receptor, la protección del receptor y la cantidad, que funciona con receptores existentes y no existentes. Se requiere la firma del remitente tanto para la transferencia como para la transferencia-creación.

Ahora hemos analizado cómo iniciar una colección para acuñar cada ficha de la colección. La cuenta designada en el paso de acuñación ahora es propietaria del token en el libro mayor principal de mermelada.

Sin embargo, hay más preguntas que hacer, incluida la escalabilidad de colecciones más grandes.

¿Cómo debemos evitar que el operador estafe a los whitelisters? El contrato recauda los fondos de los compradores en la fase de lista blanca de reserva, lo que significa que sin que el operador proporcione tokens de mantenimiento, los compradores no pueden acuñar el token. ¿Debería el operador ejecutar tokens de revelación? Si la lista de tokens está disponible fuera de la cadena, entonces el operador no está necesariamente obligado a revelar tokens. De lo contrario, ¿quién debería ejecutarlo? Si la colección tiene tokens más grandes, entonces agregar las ranuras y la lista de tokens como una lista dentro de una tabla puede convertirse en una transacción costosa. La alternativa puede ser agregar cada lista blanca e identificación de token como filas en la tabla.

¡Esperamos que este tutorial te haya resultado útil! Habrá un gran desarrollo emocionante en Marmalade a lo largo del año, ¡así que síganos en nuestros canales sociales para mantenerse actualizado!