Desarrollo de Contratos Inteligentes para Ventas Seguras

Clase 12 de 21Curso de Introducción a Celo con Solidity

Resumen

¿Cómo iniciar el scaffolding de un proyecto de contrato inteligente?

El scaffolding, o andamiaje, es una técnica clave para planificar y desarrollar un proyecto de contrato inteligente. En este caso, estamos abordando un sistema de venta que involucra a un comprador, un vendedor y un árbitro. Al preparar esta estructura inicial, es fundamental delinear qué métodos y variables se necesitarán para satisfacer los requisitos del contrato.

¿Cuáles son las entidades principales del sistema de venta?

Antes de sumergirnos en la codificación detallada, es esencial identificar las entidades que formarán parte del sistema y sus propósitos.

  1. Direcciones de usuario:

    • Comprador: La dirección del comprador que realiza la transacción.
    • Vendedor: La dirección del vendedor que ofrece el producto.
    • Árbitro: La dirección de la tercera parte que resolverá cualquier disputa.
  2. Variables de estado:

    • Depósito listo: Un booleano que indica si el comprador ha realizado el depósito correspondiente.
    • Productos confirmados: Una variable que se activa cuando el comprador confirma que recibió los productos.
    • Proceso completo: Indica que el flujo de transacción está concluyendo y permite al vendedor retirar el pago.
  3. Monto del pago: Una variable para almacenar la cantidad de pago manejada por el contrato.

¿Cómo configurar el constructor y las funciones básicas?

Para empezar a darle forma al contrato inteligente, se deben definir el constructor y las funciones esenciales que interactuarán con las variables de estado establecidas.

  • Constructor: Se encarga de recibir los parámetros necesarios para inicializar el contrato y configurará las direcciones de comprador, vendedor y árbitro.
constructor(address _comprador, address _vendedor, address _arbitro, uint _monto) {
    comprador = _comprador;
    vendedor = _vendedor;
    arbitro = _arbitro;
    monto = _monto;
    depositoListo = false;
    productosConfirmados = false;
    procesoCompleto = false;
}
  • Función de depósito: Permite al comprador depositar el pago en el contrato.
function depositarPago() public payable {
    require(msg.sender == comprador, "Solo el comprador puede depositar.");
    require(msg.value == monto, "El depósito debe ser igual al monto del pago.");
    depositoListo = true;
}
  • Confirmación del comprador: Verifica que el comprador ha recibido los productos satisfactoriamente.
function confirmarProductos() public {
    require(msg.sender == comprador, "Solo el comprador puede confirmar los productos.");
    require(depositoListo, "El depósito debe estar listo para confirmar.");
    productosConfirmados = true;
}
  • Retiro por el vendedor: Permite al vendedor retirar el pago una vez que el proceso esté completo.
function retirarPago() public {
    require(msg.sender == vendedor, "Solo el vendedor puede retirar el pago.");
    require(productosConfirmados, "Los productos deben estar confirmados para retirar.");
    require(!procesoCompleto, "El proceso ya está completo.");
    procesoCompleto = true;
    payable(vendedor).transfer(monto);
}

¿Qué pasa en caso de una disputa?

En caso de existir alguna disputa, el árbitro tiene la facultad de intervenir y determinar el curso de la transacción. La intervención del árbitro puede ser programada de manera que él decida si se procesa o no el pago, dependiendo de la situación.

Aprender a construir un contrato inteligente es un proceso enriquecedor que requiere planificar y comprender cada elemento involucrado. Mientras avanzas en el curso, verás cómo cada función y variable desempeña un papel vital en la estructura del contrato, dando vida a un sistema robusto y funcional. ¡Sigue adelante, el mundo de la programación de contratos inteligentes te espera!