Ir al contenido principal
Volver a las aplicaciones de ejemplo

RWA Tokenizer

Convierte los activos del mundo real (RWA) en NFT mediante un estudio de acuñación IPFS y el puente LayerZero V2 entre Base y Ethereum .

Autor
Marco de trabajo/biblioteca de front-end:
Reaccionar
Idioma:
TypeScript
Herramienta de compilación/servidor de desarrollo:
Next.js
Vista previa de la aplicación de ejemplo

Resumen

Esta aplicación de ejemplo incluye un Estudio de acuñación de RWA sin código para crear NFT ERC-721 con IPFS , además de LayerZero ONFT V2 transferencias entre cadenas entre Base y Ethereum. Los contratos incluyen RWA721ONFTV2.sol (recomendado), con opciones de cableado y de trabajadores forzados para LayerZero V2.

Este ejemplo tiene fines exclusivamente educativos.

Requisitos previos


Variables de entorno

Este proyecto utiliza dos distintos .env archivos:


  • Raíz .env (para Foundry)
  • frontend/.env.local (Next.js)

Raíz .env:

# Añadir el prefijo 0x a la clave privada en caso de que falte
PRIVATE_KEY=
SEPOLIA_RPC_URL=
BASE_SEPOLIA_RPC_URL=

frontend/.env.local:

NEXT_PUBLIC_RPC_BASE_SEPOLIA=
NEXT_PUBLIC_RPC_SEPOLIA=
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=
NEXT_PUBLIC_PINATA_JWT=
NEXT_PUBLIC_RWA721_DIRECCIÓN_BASE_SEPOLIA= # configurar DESPUÉS de la implementación
NEXT_PUBLIC_RWA721_ADDRESS_SEPOLIA= # configurar DESPUÉS de la implementación

Inicio rápido

1. Clonar el repositorio

git clone https://github.com/quiknode-labs/qn-guide-examples.git
cd qn-guide-examples/sample-dapps/rwa-tokenizer

2. Instalar las dependencias

cp .env.example .env

A continuación, rellena el .env archivo con tu clave privada y las URL Quicknode .

3. Compilación y pruebas

# Instalar dependencias
forge instalar OpenZeppelin/openzeppelin-contracts
forge instalar foundry-rs/forge-std
forge instalar LayerZero-Labs/LayerZero-v2
forge instalar https://github.com/LayerZero-Labs/devtools
forge instalar GNSPS/solidity-bytes-utils

# Compilar contratos
forge build

# Ejecutar pruebas
forge test

Nota: Si utilizas una versión anterior de Foundry (anterior a la v1.1.0), es posible que tengas que añadir --no-commit a la Instalación de Forge comandos. Desde la versión 1.1.0, Foundry evita automáticamente la confirmación cambios al instalar las dependencias.

4. Implementar contratos

Utiliza los scripts de Foundry que se proporcionan para implementar RWA721ONFTV2 en Ethereum y Base ; a continuación, configura las conexiones entre pares y establece las opciones obligatorias para LayerZero V2.

Paso 1: Implementar RWA721ONFTV2 en ambas cadenas

Despliegue en Ethereum :

script de Forge script/DeployRWAV2.s.sol:DeployRWAV2 \
--rpc-url sepolia \
--broadcast

Guarda la dirección de implementación (que aparece como «RWA721ONFTV2 implementado en:»)

Despliegue en Base :

script de Forge script/DeployRWAV2.s.sol:DeployRWAV2 \
--rpc-url base_sepolia \
--broadcast

Guarda la dirección de implementación (que aparece como «RWA721ONFTV2 implementado en:»)

Paso 2: Actualizar el script WireONFTV2

Editar script/WireONFTV2.s.sol con tus direcciones implementadas:

// 👇 ACTUALIZA EL MARCADOR DE POSICIÓN CON EL CONTRATO DE RWA QUE HAS DESPLEGADO EN BASE SEPOLIA
dirección constante BASE_SEPOLIA_RWA = TU_CONTRATO_RWA721ONFTV2_EN_BASE_SEPOLIA;

// 👇 ACTUALIZA EL MARCADOR DE POSICIÓN CON EL CONTRATO RWA QUE HAS DESPLEGADO EN SEPOLIA
dirección constant SEPOLIA_RWA = TU_CONTRATO_RWA721ONFTV2_EN_SEPOLIA;

Paso 3: Configurar los contratos ONFT V2 (establecer pares)

IMPORTANTE: Debe ejecutarse en AMBAS cadenas

Base de alambre Base → Sepolia:

script de Forge script/WireONFTV2.s.sol:WireONFTV2 \
--rpc-url base_sepolia \
--broadcast

Sepolia de alambre → Base :

script de Forge script/WireONFTV2.s.sol:WireONFTV2 \
--rpc-url sepolia \
--broadcast

Paso 4: Configurar las opciones obligatorias (se requiere LayerZero V2)

IMPORTANTE: Debe ejecutarse en AMBAS cadenas - Sin esto, la conexión fallará con LZ_ULN_Opciones de trabajador no válidas

Actualizar direcciones en script/SetEnforcedOptions.s.sol.

if (block.chainid == 11155111) {
// Sepolia -> Base Sepolia 👇 UPDATE THE PLACEHOLDER WITH THE RWA CONTRACT YOU DEPLOYED ON SEPOLIA
rwaAddress = 0xYourSepoliaRWAAddress;
dstEid = Config.LZ_CHAIN_ID_BASE_SEPOLIA;
} else if (block.chainid == 84532) {
// Base Sepolia -> Sepolia 👇 UPDATE THE PLACEHOLDER WITH THE RWA CONTRACT YOU DEPLOYED ON BASE SEPOLIA
rwaAddress = 0xYourBaseSepoliaRWAAddress;
dstEid = Config.LZ_CHAIN_ID_SEPOLIA;
}
// ...

A continuación, ejecuta:

Configurar las opciones en Sepolia:

script de Forge script/SetEnforcedOptions.s.sol:SetEnforcedOptions \
--rpc-url sepolia \
--broadcast

Configurar las opciones en Base :

script de Forge script/SetEnforcedOptions.s.sol:SetEnforcedOptions \
--rpc-url base_sepolia \
--broadcast

Paso 5: Comprobar la implementación

Comprueba que los pares estén configurados correctamente (LayerZero V2):

# Comprobar que el contrato de Sepolia reconozca Base 
cast call 0xTuDirecciónRWAdeSepolia "peers(uint32)(bytes32)" 40245 \
--rpc-url sepolia

# Comprueba que el contrato Base de Base reconozca Sepolia
llamada de conversión 0xTuDirecciónRWAdeBaseSepolia "peers(uint32)(bytes32)" 40161 \
--rpc-url base_sepolia

Ambas deberían devolver valores de bytes32 distintos de cero (direcciones rellenadas). Si devuelven 0x0000..., se produjo un fallo en el cableado.

5. Configurar las variables de entorno del frontend

Crear frontend/.env.local según el ejemplo:

cp frontend/.env.example frontend/.env.local

Editar frontend/.env.local con:

NEXT_PUBLIC_RPC_BASE_SEPOLIA=
NEXT_PUBLIC_RPC_SEPOLIA=
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=
NEXT_PUBLIC_PINATA_JWT=
NEXT_PUBLIC_RWA721_DIRECCIÓN_BASE_SEPOLIA=0xTuBaseSepoliaRWA
NEXT_PUBLIC_RWA721_ADDRESS_SEPOLIA=0xTuRWAdeSepolia

6. Ejecutar el frontend

cd frontend
npm instalar
npm ejecutar en modo de desarrollo

Visita http://localhost:3000.


Vista previa

Vista previa

Aportaciones y comentarios
¡Nos encantaría conocer tu opinión y agradecemos cualquier aportación a esta aplicación de ejemplo!
Para informar de problemas o enviar comentarios, abre una incidencia en GitHub en el qn-guide-ejemplos repositorio.
Para colaborar, sigue estos pasos:
  1. Hacer un fork del repositorio
  2. Crear una rama de características:
    git checkout -b feature/amazing-feature
  3. Guarda los cambios:
    git commit -m "Añadir una función increíble"
  4. Envía tu rama:
    git push origin feature/amazing-feature
  5. Abre una solicitud de incorporación de cambios.