XC-20 y activos de cadena cruzada

Leo1925
Moonbeam Network | Español
9 min readApr 19, 2022

Introducción

El formato de mensaje de consenso cruzado (XCM) define cómo se pueden enviar mensajes entre cadenas de bloques interoperables. Este formato abre la puerta para transferir mensajes y activos (activos de sustrato) entre Moonbeam/Moonriver y la cadena de retransmisión u otras paracadenas en los ecosistemas de Polkadot/Kusama.

Los activos de sustrato son interoperables de forma nativa. Sin embargo, los desarrolladores deben aprovechar la API Substrate para interactuar con ellos, lo que hace que la experiencia del desarrollador no sea ideal, especialmente para aquellos del mundo Ethereum. En consecuencia, para ayudar a los desarrolladores a aprovechar la interoperabilidad nativa que ofrece Polkadot/Kusama, Moonbeam introdujo el concepto de XC-20.

Los XC-20 son una clase de activos única en Moonbeam. Combina el poder de los activos de Substrate (interoperabilidad nativa) pero permite a los usuarios y desarrolladores interactuar con ellos a través de una interfaz ERC-20 familiar a través de un contrato de precompilación (API de Ethereum). Además, los desarrolladores pueden integrar XC-20 con marcos de desarrollo regulares de Ethereum o dApps.

Los activos del XC-20 se diferenciarán al xcanteponer su nombre. Por ejemplo, la representación de KSM de Kusama en Moonriver se conocerá como xcKSM . Tenga en cuenta que las precompilaciones XC-20 no admiten transferencias entre cadenas, y esto se hace intencionalmente para permanecer lo más cerca posible de la interfaz ERC-20 estándar.

Los XC-20 deben registrarse y vincularse a otro activo en el ecosistema antes de usarse. Esto se hace a través de un proceso de lista blanca a través de una propuesta de democracia. Si está interesado en probar las funciones de XCM en nuestra TestNet, comuníquese con nosotros a través de nuestro servidor Discord . Para obtener más información sobre XCM, puede consultar la página Descripción general de XCM de nuestra documentación.

Activos actuales del XC-20

La lista actual de activos XC-20 disponibles por red es la siguiente:

Esta guía le mostrará cómo recuperar los XC-20 disponibles y calcular sus direcciones de precompilación para Moonbase Alpha TestNet utilizando las aplicaciones Polkadot.js. Además, aprenderá a interactuar con una precompilación XC-20 mediante Remix.

XC-20 frente a ERC-20

Aunque los XC-20 y los ERC-20 son muy similares, se deben tener en cuenta algunas diferencias claras.

En primer lugar, los XC-20 son activos basados ​​en Substrate y, como tales, también están sujetos a verse directamente afectados por las características de Substrate, como la gobernanza. Además, las transacciones de XC-20 realizadas a través de Substrate API no serán visibles desde los exploradores de bloques basados ​​en EVM, como Moonscan . Solo las transacciones realizadas a través de la API de Ethereum son visibles a través de dichos exploradores.

Sin embargo, se puede interactuar con los XC-20 a través de una interfaz ERC-20, por lo que tienen el beneficio adicional de ser accesibles desde las API de Substrate y Ethereum. En última instancia, esto proporciona una mayor flexibilidad para los desarrolladores cuando trabajan con este tipo de activos y permite integraciones perfectas con contratos inteligentes basados ​​en EVM, como DEX, plataformas de préstamos, entre otros.

Recuperar lista de activos de cadena cruzada

Para obtener una lista de los XC-20 actualmente disponibles en Moonbase Alpha TestNet, diríjase a Polkadot.js Apps y asegúrese de estar conectado a Moonbase Alpha. Luego haga clic en la pestaña Desarrollador y seleccione Estado de la cadena en el menú desplegable. Para consultar los XC-20 disponibles, puede seguir estos pasos:

  1. En el menú desplegable de consulta de estado seleccionado , elija activos
  2. Seleccione el activo extinto
  3. Deshabilitar el control deslizante de opción de inclusión
  4. Envía la consulta haciendo clic en el botón +

El resultado mostrará la identificación del activo junto con información adicional para todos los XC-20 registrados en Moonbase Alpha.

Recuperar metadatos de activos de cadena cruzada

Para obtener rápidamente más información sobre un XC-20 específico, como el nombre, el símbolo y la ubicación múltiple del activo, puede usar los metadatos extrínsecos para devolver metadatos:

  1. En el menú desplegable de consulta de estado seleccionado , elija activos
  2. Seleccione los metadatos extintos
  3. Habilitar el control deslizante de la opción de incluir
  4. Ingrese el ID de activo que se devolvió al llamar al activo extrínseco. Tenga en cuenta que si copia y pega el ID del activo con las comas, las comas se eliminarán automáticamente y el número podría cortarse. Asegúrate de que sea exactamente el mismo número que el ID. Para este ejemplo, puede utilizar el ID de activo42259045809535163221576417993425387648
  5. Envía la consulta haciendo clic en el botón +

Con los resultados de los metadatos, puede ver que la identificación del recurso corresponde a la VUNIT XC-20.

Calcular direcciones de precompilación

Ahora que ha recuperado una lista de los XC-20 disponibles, antes de poder interactuar con ellos a través de la precompilación, debe derivar la dirección de precompilación del ID de activo.

La dirección de precompilación XC-20 se calcula usando lo siguiente:

code" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; font-size: inherit; background: transparent; border: 0px; position: absolute; top: 0.5em; right: 0.5em; z-index: 1; width: 1.5em; height: 1.5em; color: var(--md-default-fg-color--lightest); border-radius: 0.1rem; cursor: pointer; transition: color 250ms ease 0s;">address = "0xFFF..." + DecimalToHex(AssetId)

Dado el cálculo anterior, el primer paso es tomar la representación u128 de la ID del activo y convertirla a un valor hexadecimal. Puede usar el motor de búsqueda de su elección para buscar una herramienta simple para convertir decimales a valores hexadecimales. Para el ID de activo 42259045809535163221576417993425387648, el valor hexadecimal es 1FCACBD218EDC0EBA20FC2308C778080.

Dado que las direcciones de Ethereum tienen 40 caracteres, deberá anteponer Fs al valor hexadecimal hasta que la dirección tenga 40 caracteres.

El valor hexadecimal que ya se calculó tiene 32 caracteres, por lo que anteponer 8 Fs al valor hexadecimal le dará la dirección de 40 caracteres que necesita para interactuar con la precompilación XC-20. Para este ejemplo, la dirección completa es 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080.

Las precompilaciones de activos solo pueden estar entre 0xFFFFFFFF00000000000000000000000000000000y 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.

Ahora que ha calculado la dirección de precompilación del XC-20, puede usar la dirección para interactuar con el XC-20 como lo haría con cualquier otro ERC-20 en Remix.

La interfaz ERC-20

La interfaz ERC20.sol en Moonbeam sigue el estándar de token EIP-20, que es la interfaz API estándar para tokens dentro de contratos inteligentes. El estándar define las funciones y eventos requeridos que un contrato de token debe implementar para ser interoperable con diferentes aplicaciones.

La interfaz incluye las siguientes funciones:

  • name() : función de solo lectura que devuelve el nombre del token
  • symbol() — función de solo lectura que devuelve el símbolo del token
  • decimals() — función de solo lectura que devuelve los decimales del token
  • totalSupply() : función de solo lectura que devuelve el número total de tokens existentes
  • balanceOf( dirección quién) : función de solo lectura que devuelve el saldo de la dirección especificada
  • asignación ( propietario de la dirección , gastador de la dirección) : función de solo lectura que verifica y devuelve la cantidad de tokens que un propietario tiene permitido para un gastador
  • transfer( dirección a, valor uint256 ) — transfiere una cantidad dada de tokens a una dirección específica y devuelve verdadero si la transferencia fue exitosa
  • aprobar ( gastador de dirección , valor uint256 ) : aprueba la dirección proporcionada para gastar una cantidad específica de tokens en nombre de msg.sender. Devuelve verdadero si tiene éxito
  • transferFrom( dirección de, dirección a, valor uint256 ) — transfiere tokens de una dirección dada a otra dirección dada y devuelve verdadero si tiene éxito

Nota

El estándar ERC-20 no especifica las implicaciones de múltiples llamadas a approve. Cambiar una asignación con esta función varias veces habilita un posible vector de ataque. Para evitar pedidos de transacciones incorrectos o no deseados, primero puede reducir la spenderasignación 0y luego establecer la asignación deseada después. Para obtener más detalles sobre el vector de ataque, puede consultar la descripción general de la API ERC-20: un vector de ataque en los métodos de aprobación/transferencia.

  • La interfaz también incluye los siguientes eventos necesarios:
  • Transferencia ( dirección indexada desde, dirección indexada a, valor uint256 ) : se emite cuando se realiza una transferencia
  • Aprobación ( propietario indexado por dirección, gastador indexado por dirección, valor uint256 ) : emitido cuando se ha registrado una aprobación

Comprobación de requisitos previos

Para aprobar un gasto o transferir XC-20 a través de la precompilación XC-20, necesitará:

Interactuar con la precompilación usando Remix

Puede interactuar con la precompilación XC-20 usando Remix . Primero, deberá agregar la interfaz ERC-20 a Remix:

  1. Obtenga una copia de ERC20.sol
  2. Pegue el contenido del archivo en un archivo Remix llamado IERC20.sol

Compilar el contrato

Una vez que tenga la interfaz ERC-20 cargada en Remix, deberá compilarla:

  1. Haga clic en la pestaña Compilar , la segunda desde arriba
  2. Compile el archivo IER20.sol

Si la interfaz se compiló correctamente, verá una marca de verificación verde junto a la pestaña Compilación .

Accede al Contrato

En lugar de implementar la precompilación ERC-20, accederá a la interfaz dada la dirección de la precompilación XC-20:

  1. Haga clic en la pestaña Implementar y ejecutar directamente debajo de la pestaña Compilar en Remix. Tenga en cuenta que el contrato precompilado ya está implementado
  2. Asegúrese de que Web3 inyectado esté seleccionado en el menú desplegable Entorno . Una vez que seleccione Injected Web3 , es posible que MetaMask le pida que conecte su cuenta a Remix
  3. Asegúrese de que se muestre la cuenta correcta en Cuenta
  4. Asegúrese de que IERC20 — IERC20.sol esté seleccionado en el menú desplegable Contrato . Dado que se trata de un contrato precompilado, no es necesario implementar ningún código. En su lugar, proporcionaremos la dirección de la precompilación en el campo En la dirección .
  5. Proporcione la dirección de la precompilación XC-20 calculada en la sección Calcular dirección0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080 de precompilación y haga clic en En la dirección

Nota

Opcionalmente, puede realizar una suma de verificación de la dirección de precompilación XC-20 yendo al motor de búsqueda de su elección y buscando una herramienta para realizar una suma de verificación de la dirección. Una vez que se haya realizado la suma de verificación de la dirección, puede usarla en el campo En la dirección .

La precompilación IERC20 para el XC-20 aparecerá en la lista de contratos implementados . Ahora puede llamar a cualquiera de las funciones estándar del ERC-20 para obtener información sobre el XC-20 o transferir el XC-20.

Para aprender a interactuar con cada una de las funciones, puede consultar la guía de precompilación ERC-20 y modificarla para interactuar con la precompilación XC-20.

--

--