Operaciones blockchain de la escena
Aprende qué ofrece el SDK para realizar operaciones con la blockchain de Ethereum
Una scene 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 activar transacciones que podrían involucrar cualquier Token de Ethereum, fungible o no fungible. Esto puede usarse de muchas maneras, por ejemplo para vender Tokens, para recompensar Tokens como parte de una mecánica de juego, para cambiar cómo un jugador interactúa con una scene si posee ciertos Tokens, etc.
Ten en cuenta que todas las transacciones en la mainnet de Ethereum que sean activadas por una scene requerirán que un jugador las apruebe y pague una tarifa de gas.
Todas las operaciones de blockchain también deben realizarse como funciones asíncronas, ya que el momento depende de eventos externos.
Obtener la cuenta de Ethereum de un jugador
Para obtener la cuenta de Ethereum de un jugador, usa la getPlayer() función.
import { getPlayer } from "@dcl/sdk/src/players";
export function main() {
let userData = getPlayer();
if (!userData) return;
if (!userData.isGuest) {
console.log(userData.userId);
} else {
console.log("El jugador no está conectado con Web3");
}
}Ten en cuenta que si un jugador ha entrado en Decentraland como invitado, no tendrá una Wallet de Ethereum conectada. Si está conectado como invitado, el isGuest campo en la respuesta de getPlayer() será true. De lo contrario, puedes obtener la dirección de la Wallet del jugador del userId campo. Obtén más información sobre los datos que puedes obtener de un jugador en obtener datos del jugador
📔 Nota: Aunque la dirección ETH puede contener caracteres en mayúsculas, algunos navegadores convierten automáticamente la cadena devuelta a minúsculas. Si deseas comparar valores de direcciones y que funcione en todos los navegadores, usa el .toLowerCase() método para convertir el valor a minúsculas.
Comprobar el precio del gas
Después de importar la eth-connect biblioteca, debes instanciar un proveedor de web3 y un request manager, lo que te permitirá conectar vía web3 con MetaMask en el navegador del jugador.
La función de abajo obtiene el precio actual del gas en la red principal de Ethereum e imprime el valor.
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 toman y qué devuelven. Cada contrato de Ethereum tiene su propio ABI; debes importar los ABIs de todos los contratos que quieras usar en tu proyecto.
Por ejemplo, aquí tienes un ejemplo de una función en el ABI de MANA:
Las definiciones de ABI pueden ser bastante extensas, ya que a menudo incluyen muchas funciones, así que recomendamos pegar el contenido JSON de un archivo ABI en un .ts archivo independiente y luego importarlo a otros archivos de scene desde allí. También recomendamos guardar todos los archivos ABI en una carpeta separada de tu scene, llamada /contracts.
Aquí tienes enlaces a distintos 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 distintas colecciones de wearables: (cada colección se emitió como un contrato independiente)
Configurar TypeScript para poder importar desde un archivo JSON tiene sus dificultades. La solución alternativa recomendada y más sencilla es cambiar la ABI.JSON extensión del archivo a .ts y modificarlo ligeramente para que su contenido comience con export default.
Por ejemplo, si el contenido del archivo ABI comienza con [{"constant":true,"inputs":[{"internalType":"bytes4" ...etc, modifícalo para que comience con export default [{"constant":true,"inputs":[{"internalType":"bytes4" ...etc.
Instanciar un contrato
Después de importar la eth-connect biblioteca y el abi, 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 de web3. Esto se debe a que MetaMask en el navegador del jugador usa web3, así que necesitamos una forma de interactuar con eso.
Llamar a los métodos de un contrato
Una vez que hayas creado un objeto contract , puedes llamar fácilmente a las funciones definidas en su ABI, pasándole los parámetros de entrada especificados.
El ejemplo anterior usa el abi de un falso MANA contrato de prueba, y llama a su setBalance método para otorgar 100 falso MANA a una cuenta. Al adaptar este ejemplo, reemplaza la dirección y el abi por los del contrato al que quieras llamar, y llama a los métodos que define su abi.
Otras funciones
La biblioteca eth-connect incluye otros varios helpers que puedes usar. Por ejemplo para:
Obtener un precio de gas estimado
Obtener el saldo de una dirección dada
Obtener un recibo de transacción
Obtener el número de transacciones enviadas desde una dirección
Convertir entre varios formatos, incluidos hexadecimal, binario, utf8, etc.
Usar la red de prueba de Ethereum
Mientras pruebas tu scene, para evitar transferir MANA real u otras monedas, puedes usar la red de prueba Ethereum Sepolia y transferir en su lugar MANA ficticia de testnet.
Para usar la red de prueba debes configurar la extensión de Chrome de MetaMask para usar la red de prueba Sepolia en lugar de red principal.
Debes conseguir Ether de Sepolia, que puedes obtener gratis desde varios faucets externos como este.
Para previsualizar tu scene usando la red de prueba, pega la siguiente URL en una pestaña del navegador. Esto abrirá la scene 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
Cualquier transacción que aceptes mientras ves la scene en este modo ocurrirá solo en la red de prueba y no afectará el saldo de MANA en tu Wallet real.
Si necesitas probar transacciones en la Polygon Testnet y necesitas tener MANA en esa testnet, tendrás que cambiar MANA a esa red después de adquirirla en Sepolia. Para transferir MANA de Sepolia a la Polygon Testnet, visita tu página de cuenta de Decentraland en Sepolia y haz clic en ‘swap’ en el lado de Ethereum MANA.
Cuando ejecutes una preview en el cliente web heredado, de una scene que use una de las bibliotecas de Ethereum, debes abrir la preview en una ventana aparte del navegador, 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 a través del protocolo RPC.
Smart contracts de Decentraland
En el siguiente enlace puedes encontrar una lista de smart contracts de Ethereum relevantes para el ecosistema de Decentraland. La lista incluye los contratos en la mainnet así como en otras redes de prueba de Ethereum.
Última actualización