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íncronas, 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 data
Deberías envolver la función en un async() function, aprende más sobre esto en async functions
📔 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 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.
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)
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'
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.
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
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. 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'.
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
Última actualización