Los estándares de token de Qtum Parte 2 — QRC1155

Qtum Español
6 min readOct 15, 2021

En nuestro artículo anterior, analizamos los dos estándares de tokens Qtum más comunes: QRC20 y QRC721. Hoy, veremos el todoterreno, el QRC1155, que se utiliza en Qtum Web Wallet. El estándar QRC-1155 se ha desarrollado utilizando ERC1155, que combina las ideas de ERC20, ERC721 y ERC777 para crear un contrato de token de bajo consumo y agnóstico de fungibilidad.

Enjin CTO, Witek Radomski, creó el ERC1155 para proporcionar a los desarrolladores un marco para crear todo tipo de activos como NFT, bienes raíces, tokens de gobernanza, caídas en el juego, etc. Las características del estándar de tokens ERC1155 son las siguientes:

  • Múltiples tokens: defina tokens fungibles y no fungibles en un solo contrato inteligente.
  • Eficiencia de gas: cuando se crea un nuevo token, puede reducir las tarifas de gas en un asombroso 90%.
  • Intercambios atómicos: habilite los intercambios atómicos de cualquier número de tokens.
  • Transferencias por lotes: envíe varios tokens en una sola transacción.

¿Cuál es la necesidad del ERC1155?

Cuando ya tenemos los estándares ERC20 y ERC721, ¿dónde está la necesidad de un estándar ERC1155? Vamos a ver.

Un contrato para gobernarlos a todos

Los estándares de token ERC20 y ERC721 requieren la implementación de contratos separados, lo que genera un código voluminoso y redundante en la blockchain Ethereum. Además, el solo hecho de separar cada contrato de token en su dirección autorizada aumenta la ineficiencia general.

El principio central detrás de ERC1155 es que un solo contrato puede crear y gobernar un número infinito de tokens. Piense en ERC1155 como Amazon, donde puede comprar varios artículos electrónicos, equipos deportivos, libros e incluso bocadillos.

La función “balanceOf” en ERC1155 difiere de ERC20 y ERC777 ya que tiene un argumento de ID adicional para el identificador del token del que desea consultar el saldo. La función “balanceOf” en ERC1155 es bastante similar a ERC721. Sin embargo, en este último, un ID de token no tiene “saldo” ya que los tokens son únicos y no fungibles. Por otro lado, las cuentas ERC1155 tienen un saldo distinto para cada ID de token. Un token no fungible en ERC-1155 se implementa simplemente acuñando uno de ellos.

Operaciones por lotes

Con ERC-1155, se pueden enviar varios tokens en una sola transacción, lo que ofrece ahorros significativos en los costos de gas (reduciendo el gas en un 90%). Esta sencilla innovación evita la necesidad de esperar cada bloque en una única transferencia. Los proyectos que utilizan ERC1155 también pueden utilizar Atomic Swaps con el mismo diseño básico.

Con ERC1155 puede usar un solo contrato inteligente para representar múltiples contratos inteligentes a la vez. Además, ERC1155 proporciona dos funciones, “balanceOfBatch” y “safeBatchTransferFrom”. Esto hace que consultar múltiples saldos y transferir múltiples tokens sea más eficiente.

Datos de Economia

El diseño flexible del estándar ERC1155 le permite mezclar tipos de tokens fungibles y no fungibles en un solo contrato y reduce el “exceso de código”. La implementación de un contrato cuesta una gran cantidad de gas, ya que el almacenamiento de blockchain es naturalmente costoso. Si bien ERC20 y ERC721 son buenos para casos de uso limitados, la gran mayoría se beneficiará enormemente de la flexibilidad de ERC1155.

Reglas estrictas

Los tokens ERC1155 son el primer estándar de tokens que permite ejecutar una función de contrato inteligente determinista simplemente enviando un token a una dirección. Esto es extremadamente útil en un juego de blockchain en el que el juego activa una operación tan pronto como recibe un token ERC1155 de un usuario. ERC223 inicialmente propuso esta funcionalidad, pero no logró ponerse al día.

ERC721, por otro lado, ha implementado una función ‘safeTransferFrom’, pero no necesita implementarse estrictamente para todas las transferencias. Como tal, los usuarios pueden perder potencialmente sus tokens y los desarrolladores no pueden confiar en una ejecución determinista al enviar un token.

Al hacer que la ejecución del contrato sea significativamente más estricta en ERC1155, los desarrolladores ahora pueden crear redes confiables de contratos inteligentes y tokens.

Metadatos ERC1155

Los metadatos del estándar ERC1155 se movieron de un token a un archivo JSON externo. El estándar ya no incluye metadatos heredados como:

  • Símbolo: los símbolos de 3 letras normalmente solo se utilizan en tickers y en el comercio de criptomonedas. No son tan útiles cuando se tokenizan elementos más generales.
  • Nombre: almacenar un nombre en cadena puede ser excesivo. Es mejor almacenar un nombre de token en el estándar de metadatos JSON.

Sustitución de ID

ERC1155 puede usar la cadena de sustitución “{id}” para apuntar a un número infinito de URI de token sin almacenar ningún dato adicional en la cadena. La cadena {id} también se puede usar dentro del propio JSON para vincular las imágenes de cada token automáticamente.

Localización

La localización ahora es posible para varios idiomas utilizando ERC1155, ya que la información del token se define en formato JSON.

Construcción de contrato inteligente ERC1155

En este contrato, usaremos ERC1155 para rastrear múltiples elementos del juego. Todos los elementos se crearon al desplegador del contrato y luego se transferirán a los jugadores. Los jugadores son libres de conservar sus tokens o intercambiarlos con otras personas. En este ejemplo de contrato, crearemos todos los elementos del propio constructor.

El siguiente es un contrato para artículos tokenizados.

Tenga en cuenta que “Gold” es un token fungible en el código anterior, mientras que “Thor’s Hammer” es un NFT. Esta es la razón por la que el contrato ha creado solo uno de ellos.

Una vez que se implementa el contrato, el siguiente código ayudará a consultar el saldo del implementador:

El siguiente código ayuda a transferir elementos a las cuentas de los jugadores:

El siguiente fragmento de código le permite realizar transacciones por lotes en el ERC1155 para transferir elementos a las cuentas de los jugadores y obtener el saldo de los lotes:

El URI de metadatos se puede obtener con esto:

El documento de metadatos JSON para el ID de token 2 tiene este aspecto:

Conclusión

El token estándar QRC1155 reúne QRC20 y QRC721 bajo un mismo techo. Como resultado, a los desarrolladores les resulta muy sencillo crear contratos inteligentes sofisticados sin perderse en un diluvio de código redundante.

Fragmentos de código

Ajuste la hendidura y los ajustes de línea, que no se dan en el formato a continuación.

Contrato de artículos tokenizados

// contratos / GameItems.sol

// Identificador de licencia SPDX: MIT

solidez del pragma ^ 0.6.0;

importar “@ openzeppelin / contract / token / ERC1155 / ERC1155.sol”;

contrato GameItems es ERC1155 {

uint256 constante pública GOLD = 0;

uint256 constante pública SILVER = 1;

uint256 constante pública THORS_HAMMER = 2;

uint256 constante pública SWORD = 3;

uint256 pública constante SHIELD = 4;

constructor () public ERC1155 (“https: //game.example/api/item/ {id} .json”) {

_mint (mensaje remitente, ORO, 10 ** 18, “”);

_mint (msj.remitente, THORS_HAMMER, 1, “”);

_mint(msg.sender, SWORD, 10**9, “”);

_mint (mensaje remitente, ESCUDO, 10 ** 9, “”);

}

}

Balance del ejecutor

> gameItems.balanceOf (deployerAddress, 3)

1000000000

Transferir artículos

> gameItems.safeTransferFrom (deployerAddress, playerAddress, 2, 1, “0x0”)

> gameItems.balanceOf(playerAddress, 2)

1

> gameItems.balanceOf(deployerAddress, 2)

0

Transacciones por lotes

> gameItems.safeBatchTransferFrom (deployerAddress, playerAddress, [0,1,3,4], [50,100,1,1], “0x0”)

> gameItems.balanceOfBatch ([playerAddress, playerAddress, playerAddress, playerAddress, playerAddress], [0,1,2,3,4])

[50,100,1,1,1]

URI de metadatos

> gameItems.uri (2)

“Https: //game.example/api/item/ {id} .json”

Documento JSON

{

“name”: “Thor’s hammer”,

“description”: “Mjölnir, the legendary hammer of the Norse god of thunder.”,

“image”: “https://game.example/item-id-8u5h2m.png",

“strength”: 20

}

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response