Skip to content

jcontrerasd/Proyecto-MUTs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

152 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌐 APLICACIÓN DApp Web3 MUTs 🚀

🌆 Marketplace Memoria Urbana MUTs 🖼️

image



Índice


1.- ARQUITECTURA GENERAL


  • MetaMask: Actúa como puerta de entrada a la Blockchain, permitiendo la gestión de redes, cuentas y transacciones.
  • Ethereum: La cadena de bloques principal, junto con Sepolia para pruebas.
  • Truffle Suite: Herramienta para el desarrollo de Smart Contract.
  • OpenZeppelin: Proporciona librería de Smart Contract seguros y probados.
  • NFT.storage (IPFS): _Garantiza la persistencia descentralizada de archivos, esencial para NFTs.

image

  • React: Framework JavaScript para la creación de interfaces de usuario interactivas y dinámicas
  • Material UI: Biblioteca de componentes de interfaz de usuario que facilita el desarrollo y mantiene la consistencia visual.
  • Three.js: Biblioteca JavaScript para la creación de gráficos 3D en el navegador web, utilizada para la visualización de NFTs en el metaverso.
  • Web3.js: Biblioteca JavaScript para la interacción con la BlockChain Ethereum, permitiendo la conexión con MetaMask y la gestión de NFTs.
image

2.- DESPLIEGUE DE PRODUCTO


Incorpora la automatización de la compilación, implementación y verificación de los Smart Contracts en la red Sepolia.

2.1.- Script deploy_muts.sh

deploy_muts.sh ⚙️
#!/bin/bash

declare -a sepolia_links

# Colores usando tput
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
RESET=$(tput sgr0)

echo "${BLUE}"
echo "█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓██▓█▓ S E  P O L I A  █▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█"
echo "${YELLOW}"
echo "█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓ INICIO COMPILACION  █▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓"
echo "${RESET}"
echo " "
echo " "

# Migrar en la red Ethereum sepolia Testnet y capturar la salida
truffle migrate --network eth_sepolia_testnet | tee migration_output_sepolia.txt

# Extraer las direcciones de los contratos para sepolia
ADDRESS_MemoriaUrbanaToken_sepolia=$(sed -n '/MemoriaUrbanaToken/,/contract address:/p' migration_output_sepolia.txt | grep 'contract address:' | awk '{print $4}')
ADDRESS_Market_Place_sepolia=$(sed -n '/Market_Place/,/contract address:/p' migration_output_sepolia.txt | grep 'contract address:' | awk '{print $4}')

echo "${GREEN}█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓ FIN COMPILACION  █▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓${RESET}"
echo " "
echo "${MAGENTA}█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓ INICIO VERIFICACION  █▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓${RESET}"

if [ -z "$ADDRESS_MemoriaUrbanaToken_sepolia" ] || [ -z "$ADDRESS_Market_Place_sepolia" ]; then
    echo "${RED}Error: No se pudo extraer las direcciones para sepolia.${RESET}"
else
    truffle run verify MemoriaUrbanaToken@$ADDRESS_MemoriaUrbanaToken_sepolia --network eth_sepolia_testnet
    sepolia_links+=("MemoriaUrbanaToken: https://sepolia.etherscan.io/address/$ADDRESS_MemoriaUrbanaToken_sepolia")
    echo "${CYAN}${sepolia_links[0]}${RESET}"
    
    echo " "

    truffle run verify Market_Place@$ADDRESS_Market_Place_sepolia --network eth_sepolia_testnet
    sepolia_links+=("Market_Place: https://sepolia.etherscan.io/address/$ADDRESS_Market_Place_sepolia")
    echo "${CYAN}${sepolia_links[1]}${RESET}"
fi
echo "${GREEN}█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓ FIN VERIFICACION  █▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓${RESET}"
echo " "

echo "${YELLOW}█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓██▓█▓ S E  P O L I A  █▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█▓█${RESET}"
echo "Enlaces al explorador de bloques sepolia:"
for link in "${sepolia_links[@]}"; do
    echo " "
    echo "${YELLOW}$link${RESET}"
    echo " "
done

2.2.- Compilación/Despliegue/Verificación

image
1_deploy_contracts.js SMART CONTRACT ⚙️
var MemoriaUrbanaToken = artifacts.require("./MemoriaUrbanaToken.sol");
var Market_Place = artifacts.require("./Market_Place.sol");

// El deploy debe ser anidado, dado que el contrato Marketplace requiere el contrato con el que
// estará vinculado

module.exports = function (deployer) {

  deployer.deploy(MemoriaUrbanaToken).then(function () {      
      return deployer.deploy(Market_Place, MemoriaUrbanaToken.address);
  });
};

Es importante tener en cuenta que los Smart Contracts están interconectados, por lo tanto, se requiere una configuración específica para la migración. En esta configuración, la Address del contrato MemoriaUrbanaToken se utiliza para el despliegue del Contrato Market_Place.


3.- MANEJO DE EVENTOS (Event/Emit)


3.1.- EVENT SMART CONTRACT MEMORIAURBANATOKEN.SOL

image

3.2.- EVENT SMART CONTRACT MARKET_PLACE.SOL

image

4.- USO DE IPFS NFT.Storage y METADATOS del NFT.



5.- SMART CONTRACTS


5.1.- MemoriaUrbanToken

El contrato crea un token ERC721 llamado MemT (MUT). El contrato puede ser utilizado para crear nuevos tokens, aprobar la custodia del NFT a un contrato que permita custodiar el NFT y comercializarlo.

5.1.1.- Read Contract

1. balanceOf : Devuelve la cantidad de un token que posee una dirección.

2. getApproved : Devuelve la dirección que está autorizada para transferir un token en nombre de otra dirección.

3. isApprovedForAll : Devuelve si una dirección está autorizada para transferir todos los tokens en nombre de otra dirección.

4. name : Devuelve el nombre del token.

5. ownerOf : Devuelve la dirección del propietario de un token.

6. supportsInterface : Devuelve si un contrato implementa una interfaz.

7. symbol : Devuelve el símbolo del token.

8. tokenURI : Devuelve la URI del token.

5.1.2.- Write Contract

1. approve : Autoriza a una dirección para transferir un token en nombre de otra dirección.

2. approveToMarketplace : _Autoriza a un mercado para transferir un token en nombre de un usuario.

3. awardItem : Crea un nuevo token y lo asigna a una dirección especificada.

4. safeTransferFrom : Transfiere un token de una dirección a otra de forma segura, verificando que la transferencia es válida y que el receptor tiene suficiente saldo.

5. safeTransferFrom : Transfiere un token de una dirección a otra de forma segura, verificando que la transferencia es válida y que el receptor tiene suficiente saldo.

6. setApprovalForAll : Autoriza a una dirección para transferir todos los tokens en nombre de otra dirección.

7.transferFrom : Transfiere un token de una dirección a otra.

⚠️ IMPORTANTE

4.safeTransferFrom() (ERC721) : Transfiere un token de una dirección a otra. No verifica que el receptor tenga suficiente saldo.

5.safeTransferFrom() (OpenZeppelin) : Transfiere un token de una dirección a otra de forma segura. Verifica que el receptor tenga suficiente saldo y que el remitente esté autorizado para transferir el token.

5.2.- Marketplace

Corresponde a un MarketPlace que permite a los usuarios comprar y vender tokens ERC721. En resumen permite comprar y vender tokens ERC721.

5.2.1.- Read Contract

1. itemsForSale: Variable de estado que cuenta el número de NFTs en venta. 2. balanceOf: Devuelve la cantidad de un token que posee una dirección. 3. balanceOfBatch: Devuelve la cantidad de un token que poseen varias direcciones. 4. getPrice: Devuelve el precio de un NFT en wei. 5. isApprovedForAll: Devuelve si una dirección está aprobada para transferir tokens en nombre de otra dirección._ 6. marketplaceOwner: Dirección del propietario del contrato Market_Place. 7. supportsInterface: Devuelve si un contrato implementa una interfaz ERC721. 8. uri: Devuelve la URI de un NFT.

5.2.2.- Write Contract

1. acceptCommission: Permite al propietario del NFT aceptar o rechazar la comisión propuesta. Si se acepta la comisión, el NFT se pone a la venta automáticamente. Si se rechaza, la comisión pendiente se elimina.

2. buyToken: Compra un NFT ERC721 del mercado, pagando el precio especificado por el vendedor. Ahora, cuando se compra un NFT, se calcula la comisión (2.5% del precio de venta) y se descuenta del monto que recibe el vendedor. La comisión se transfiere al propietario del mercado (marketplaceOwner).

3. onERC721Received: Recibe un NFT ERC721 en el contrato, verificando que el remitente está autorizado para transferirlo.

4. proposeCommission: Permite al propietario de un NFT proponer una comisión al vendedor antes de poner el NFT a la venta. La comisión se calcula como un porcentaje del precio de venta (en este caso, el 2.5%).

5. safeBatchTransferFrom: Transfiere un lote de tokens ERC1155 de una dirección a otra de forma segura, verificando que la transferencia es válida y que el receptor tiene suficiente saldo.

6. safeTransferFrom: Transfiere un token ERC721 de una dirección a otra de forma segura, verificando que la transferencia es válida y que el receptor tiene suficiente saldo.

7. setApprovalForAll: Aprueba a una dirección para transferir todos los tokens ERC721 en nombre de otra dirección, otorgando permiso a un mercado para vender los tokens ERC721 de un usuario.

8. setSale: Pone un NFT ERC721 a la venta en el mercado, especificando el precio al que se quiere vender. Ahora, antes de poner un NFT a la venta, se debe proponer y aceptar una comisión.

9. unsetSale: Elimina un NFT ERC721 de la venta en el mercado, permitiendo al propietario eliminarlo en cualquier momento.

About

Proyecto Web3 (React + Metamak + Smart Contract Ethereum )

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors