Operaciones blockchain en la escena

Aprende qué ofrece el SDK para realizar operaciones con la blockchain de Ethereum

Una escena de Decentraland puede interactuar con la blockchain de Ethereum. Esto puede servir para obtener datos sobre la wallet del usuario y los tokens que contiene, o para desencadenar transacciones que podrían involucrar cualquier token de Ethereum, fungible o no fungible. Esto puede usarse de muchas maneras, por ejemplo para vender tokens, recompensar tokens como parte de una mecánica de juego, cambiar cómo un jugador interactúa con una escena si posee ciertos tokens, etc.

Ten en cuenta que todas las transacciones en la mainnet de Ethereum que sean desencadenadas por una escena requerirán que el jugador apruebe y pague una comisión de gas.

Todas las operaciones con la blockchain también deben realizarse como funciones asíncronasarrow-up-right, ya que el tiempo depende de eventos externos.

Obtener la cuenta ethereum de un jugador

Para obtener la cuenta de Ethereum de un jugador, usa el getPlayer() función.

import { getPlayer } from '@dcl/sdk/src/players'

export function main() {
	let userData = getPlayer()
	if (!userData.isGuest) {
		console.log(userData.userId)
	} else {
		log('El jugador no está conectado con Web3')
	}
}

Ten en cuenta que si un jugador ha entrado a Decentraland como invitado, no tendrá una wallet de ethereum conectada. Si están conectados como invitados, el isGuest campo en la respuesta de getPlayer() será verdadero. Si hasConnectedWeb3 es verdadero, entonces puedes obtener la dirección del jugador desde el campo publicKey. Aprende más sobre los datos que puedes obtener de un jugador en get player dataarrow-up-right

Deberías envolver la función en un async() function, aprende más sobre esto en async functionsarrow-up-right

circle-exclamation

Comprobar el precio del gas

Después de importar la eth-connect librería, debes instanciar un proveedor web3 y un request manager, lo que te permitirá conectarte vía web3 a Metamask en el navegador del jugador.

La función a continuación obtiene el precio de gas actual en la red principal de Ethereum y lo imprime.

circle-info

💡 Consejo: Ten en cuenta que las funciones manejadas por el requestManager deben ser llamadas usando await, ya que dependen de la obtención de datos externos y pueden tardar en completarse.

Importar un ABI de contrato

Un ABI (Application Binary Interface) describe cómo interactuar con un contrato de Ethereum, determinando qué funciones están disponibles, qué entradas aceptan y qué devuelven. Cada contrato de Ethereum tiene su propio ABI; debes importar los ABI de todos los contratos que desees usar en tu proyecto.

Por ejemplo, aquí hay un ejemplo de una función en el ABI de MANA:

Las definiciones ABI pueden ser bastante extensas, ya que a menudo incluyen muchas funciones, por lo que recomendamos pegar el contenido JSON de un archivo ABI en un .ts archivo separado e importarlo en otros archivos de la escena desde allí. También recomendamos mantener todos los archivos ABI en una carpeta separada de tu escena, llamada /contracts.

Aquí tienes enlaces a diferentes contratos de Decentraland. Obtén el ABI de cada contrato haciendo clic en Export ABI y eligiendo JSON Format.

Estos son los contratos de las varias colecciones de wearables: (cada colección se desplegó como un contrato separado)

circle-info

💡 Consejo: Para ver claramente las funciones expuestas por un contrato, ábrelo en abitopic.ioarrow-up-right. Simplemente pega la dirección del contrato allí y abre la pestaña functions para ver la lista completa de funciones soportadas y sus argumentos. Incluso puedes probar a llamar a las funciones con diferentes parámetros a través de la página web.

Configurar TypeScript para poder importar desde un archivo JSON tiene sus dificultades. La solución alternativa recomendada y más sencilla es cambiar la extensión del archivo ABI.JSON y modificarlo ligeramente para que su contenido comience con .ts export default Por ejemplo, si el contenido del archivo ABI comienza con.

[{"constant":true,"inputs":[{"internalType":"bytes4" ...etc , modifícalo para que comience conexport default [{"constant":true,"inputs":[{"internalType":"bytes4" ...etc Instanciar un contrato.

librería y el

Después de importar la eth-connect abi de un contrato, debes instanciar varios objetos que te permitirán usar las funciones del contrato y conectarte a Metamask en el navegador del jugador.También debes importar el proveedor web3. Esto se debe a que Metamask en el navegador del jugador usa web3, por lo que necesitamos una forma de interactuar con eso.

import { RequestManager, ContractFactory } from 'eth-connect'

circle-info

💡 ConsejoContractFactory objeto con ese ABI y usas esa misma factory para instanciar interfaces para cada contrato. Llamar a los métodos en un contrato

Una vez que hayas creado un

contract objeto, puedes llamar fácilmente a las funciones que están definidas en su ABI, pasándoles los parámetros de entrada especificados. try {

MANA falso a tu cuenta en la red de pruebas Ropsten. Otras funciones

La librería eth-connect incluye una serie de otros ayudantes que puedes usar. Por ejemplo para:

Obtener un precio de gas estimado

  • Obtener el balance de una dirección dada

  • Obtener un receipt de transacción

  • Obtener el número de transacciones enviadas desde una dirección

  • Convertir entre varios formatos incluyendo hexadecimal, binario, utf8, etc.

  • Mientras pruebas tu escena, para evitar transferir MANA real u otras monedas, puedes usar la

Uso de la red de pruebas de Ethereum

Ethereum Sepolia test network y transferir MANA de testnet falsos en su lugar. Debes adquirir Ether de Sepolia, que puedes obtener gratis desde varios faucets externos como

Para usar la red de pruebas debes configurar tu extensión de Metamask en Chrome para usar la Sepolia test network en lugar de Main network.

este : Cambia el parámetro position a las coordenadas de tu escena, para cargar directamente en tu escena..arrow-up-right.

circle-info

💡 Consejo: Para ejecutar la transacción de transferir MANA de Sepolia a tu wallet, necesitarás pagar una tarifa de gas en Sepolia Ether.

Para previsualizar tu escena usando la red de pruebas, pega la siguiente URL en una pestaña del navegador. Esto abrirá la escena en el cliente de escritorio de Decentraland:

decentraland://realm=http://127.0.0.1:8000&local-scene=true&debug=true&dclenv=zone&position=0,0

circle-info

💡 ConsejoSi necesitas probar transacciones en la Testnet de Polygon y necesitas tener MANA en esa testnet, tendrás que intercambiar MANA a esa red después de adquirirlo en Sepolia. Para puentear MANA de Sepolia a la Testnet de Polygon, visita tu

Cualquier transacción que aceptes mientras visualizas la escena en este modo solo ocurrirá en la red de pruebas y no afectará el saldo de MANA en tu wallet real.

Decentraland account page in Sepolia y haz clic en ‘swap’ en el lado de Ethereum MANA.arrow-up-right Al ejecutar una vista previa en el cliente web heredado, de una escena que usa una de las librerías de ethereum, debes abrir la vista previa en una ventana de navegador separada, tener Metamask abierto en tu navegador e incluir manualmente la cadena

&ENABLE_WEB3 Enviar mensajes RPC personalizados.

Usa la función

sendAsync() para enviar mensajes sobre el protocolo RPC import { sendAsync } from '~system/EthereumController'arrow-up-right.

En el siguiente enlace puedes encontrar una lista de contratos inteligentes de Etherum relevantes para el ecosistema de Decentraland. La lista incluye los contratos en mainnet así como en otras redes de prueba de Ethereum.

contracts.decentraland.org

contracts.decentraland.orgarrow-up-right

Última actualización