Contrato Legal y Solidity

Cláusula 1: Objeto del Contrato

Este contrato tiene por objeto regular las condiciones de colaboración entre la marca y el influencer, estableciendo derechos, obligaciones y los mecanismos de pago a través de la plataforma blockchain.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract ContratoColaboracion {
    address public plataforma;

    constructor() {
        plataforma = msg.sender;
    }
}
Cláusula 2: Registro de Participantes

La plataforma permitirá el registro de marcas e influencers mediante la validación de su información básica, garantizando su actividad en el sistema.

struct Participante {
    string nombre;
    uint256 ranking;
    bool activo;
}

mapping(address => Participante) public marcas;
mapping(address => Participante) public influencers;

function registrarMarca(address marca, string memory nombre) public {
    marcas[marca] = Participante(nombre, 0, true);
}

function registrarInfluencer(address influencer, string memory nombre) public {
    influencers[influencer] = Participante(nombre, 0, true);
}
Cláusula 3: Mecanismos de Pago

Las transacciones financieras entre la marca y el influencer se realizarán mediante contratos inteligentes, asegurando el pago en tiempo real tras la finalización de cada campaña.

function realizarPago(address influencer, uint256 monto) public {
    require(marcas[msg.sender].activo, "Marca no registrada");
    require(influencers[influencer].activo, "Influencer no registrado");

    payable(influencer).transfer(monto);
}
Cláusula 4: Propiedad Intelectual

Todo contenido generado durante la campaña será propiedad exclusiva de la marca, salvo que se estipule lo contrario en acuerdos adicionales.

mapping(uint256 => address) public propiedadIntelectual;

function registrarPropiedad(uint256 id, address marca) public {
    require(marcas[marca].activo, "Marca no registrada");
    propiedadIntelectual[id] = marca;
}
Cláusula 5: Confidencialidad

Ambas partes acuerdan mantener la confidencialidad de la información compartida durante la vigencia del contrato y por un período de 2 años posterior a su finalización.

// No se implementa directamente en Solidity. Acuerdos legales adicionales aplican.
Cláusula 6: Resolución de Conflictos

Cualquier disputa será resuelta mediante arbitraje digital gestionado por la plataforma, siendo su decisión vinculante.

function resolverConflicto(uint256 id, string memory decision) public onlyPlataforma {
    // Arbitraje digital
}
Cláusula 7: Listado de Contratantes

Las marcas y los influencers registrados se incluirán en un listado accesible dentro de la plataforma para su consulta.

address[] public listadoMarcas;
address[] public listadoInfluencers;

function obtenerListadoMarcas() public view returns (address[] memory) {
    return listadoMarcas;
}

function obtenerListadoInfluencers() public view returns (address[] memory) {
    return listadoInfluencers;
}
Cláusula Opcional 9: Venta Flash

Los compradores pueden apartar promociones pagando el 10% inicial y el resto contra entrega.

struct VentaFlash {
    address comprador;
    uint256 adelanto;
    uint256 restante;
    bool completado;
}

mapping(uint256 => VentaFlash) public ventasFlash;

function registrarVentaFlash(uint256 id, uint256 adelanto, uint256 restante) public {
    ventasFlash[id] = VentaFlash(msg.sender, adelanto, restante, false);
}

function completarVentaFlash(uint256 id) public {
    require(ventasFlash[id].comprador == msg.sender, "No autorizado");
    ventasFlash[id].completado = true;
}
Cláusula 10: Embajador de Marca

El influencer asumirá la responsabilidad de representar la marca durante la campaña, asegurando la promoción activa del producto y reforzando los valores asociados a la marca.

struct Embajador {
    address influencer;
    uint256 duracion;
    bool activo;
}

mapping(address => Embajador) public embajadores;

function designarEmbajador(address influencer, uint256 duracion) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    embajadores[influencer] = Embajador(influencer, duracion, true);
}

function finalizarEmbajador(address influencer) public {
    require(embajadores[influencer].activo, "No es embajador");
    embajadores[influencer].activo = false;
}
Cláusula 11: Crowdfunding

El influencer podrá iniciar proyectos comerciales o sociales mediante campañas de crowdfunding gestionadas a través de la plataforma.

struct Proyecto {
    address creador;
    string descripcion;
    uint256 meta;
    uint256 fondos;
    bool completado;
}

mapping(uint256 => Proyecto) public proyectos;

function crearProyecto(uint256 id, string memory descripcion, uint256 meta) public {
    require(influencers[msg.sender].activo, "Influencer no registrado");
    proyectos[id] = Proyecto(msg.sender, descripcion, meta, 0, false);
}

function donar(uint256 id) public payable {
    require(proyectos[id].fondos < proyectos[id].meta, "Proyecto completado");
    proyectos[id].fondos += msg.value;
}

function completarProyecto(uint256 id) public {
    require(proyectos[id].fondos >= proyectos[id].meta, "Meta no alcanzada");
    proyectos[id].completado = true;
}
Cláusula 12: Pago en Tiempo Real

Los pagos de comisiones se ejecutarán en tiempo real, asegurando la automatización del proceso y reduciendo la burocracia.

function pagarComision(address influencer, uint256 monto) public {
    require(marcas[msg.sender].activo, "Marca no registrada");
    payable(influencer).transfer(monto);
}
Cláusula 13: Trabajo en Tiempo Real

La marca deberá mantener activa la campaña depositando al liquidity pool. Si no se realiza el depósito, la campaña se pausará automáticamente sin responsabilidad para el influencer.

mapping(address => uint256) public liquidity;

function depositarLiquidity(address marca, uint256 monto) public {
    require(marcas[marca].activo, "Marca no registrada");
    liquidity[marca] += monto;
}

function pausarCampana(address marca) public {
    require(liquidity[marca] == 0, "Liquidity suficiente");
    // Lógica para pausar campaña
}
Cláusula 14: Ranking de Trabajo

Las acciones u omisiones de ambas partes influirán en un ranking. Tras múltiples incumplimientos, la plataforma bloqueará su acceso.

function actualizarRanking(address participante, uint256 puntos) public {
    if (marcas[participante].activo) {
        marcas[participante].ranking += puntos;
    } else if (influencers[participante].activo) {
        influencers[participante].ranking += puntos;
    }
}

function bloquearParticipante(address participante) public {
    if (marcas[participante].ranking < 0 || influencers[participante].ranking < 0) {
        if (marcas[participante].activo) {
            marcas[participante].activo = false;
        } else if (influencers[participante].activo) {
            influencers[participante].activo = false;
        }
    }
}
Cláusula 15: Promoción Llamada Venta Flash

El influencer podrá ofrecer una promoción especial en la cual el comprador pague un 10% del valor del producto al realizar la compra, y el resto lo abone contra entrega del producto.

struct PromocionFlash {
    address influencer;
    uint256 porcentajePagoInicial;
    bool activa;
}

mapping(address => PromocionFlash) public promocionesFlash;

function activarPromocionFlash(address influencer, uint256 porcentaje) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    promocionesFlash[influencer] = PromocionFlash(influencer, porcentaje, true);
}

function realizarPagoFlash(address influencer, uint256 montoInicial) public {
    require(promocionesFlash[influencer].activa, "Promocion no activa");
    uint256 saldoRestante = montoInicial * (100 - promocionesFlash[influencer].porcentajePagoInicial) / 100;
    payable(influencer).transfer(saldoRestante);
}
Cláusula 16: Venta de Producto

El influencer se compromete a promover la venta de productos asociados al contrato, con la obligación de asegurar el cumplimiento de los términos de cada campaña.

mapping(address => uint256) public ventasRealizadas;

function registrarVenta(address influencer, uint256 monto) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    ventasRealizadas[influencer] += monto;
}
Cláusula 17: Responsabilidad por la Promoción

El influencer es responsable de realizar la promoción del producto de manera efectiva y ética, garantizando el cumplimiento de las expectativas de la campaña.

function verificarResponsabilidad(address influencer) public view returns (bool) {
    require(influencers[influencer].activo, "Influencer no registrado");
    // Verificar si el influencer ha cumplido con las responsabilidades de la campaña
    return ventasRealizadas[influencer] > 0;
}
Cláusula 18: Exclusividad

El influencer acuerda no promocionar productos de marcas competidoras durante la vigencia del contrato, garantizando la exclusividad de su promoción para la marca contratante.

mapping(address => bool) public exclusividadActiva;

function activarExclusividad(address influencer) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    exclusividadActiva[influencer] = true;
}

function verificarExclusividad(address influencer) public view returns (bool) {
    return exclusividadActiva[influencer];
}
Cláusula 19: Modificaciones del Contrato

Cualquier modificación del contrato deberá ser acordada por ambas partes mediante un consentimiento formal, y su implementación será realizada mediante una actualización del contrato inteligente.

function modificarContrato(address influencer, uint256 nuevoMonto) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    // Modificar los términos del contrato
    influencers[influencer].comision = nuevoMonto;
}
Cláusula 20: Duración del Contrato

El contrato tendrá una duración inicial de [X] meses, renovable de forma automática si ambas partes están de acuerdo, con la posibilidad de cancelación anticipada por cualquiera de las partes con un aviso previo.

uint256 public duracionContrato = 180 days;

function verificarDuracion(address influencer) public view returns (uint256) {
    return block.timestamp - influencers[influencer].fechaInicio;
}

function cancelarContrato(address influencer) public {
    require(block.timestamp - influencers[influencer].fechaInicio > duracionContrato, "Contrato en vigencia");
    influencers[influencer].activo = false;
}
Cláusula 21: Confidencialidad

Ambas partes se comprometen a mantener la confidencialidad de la información sensible que se comparta durante la vigencia del contrato, incluida la información financiera y de campaña.

mapping(address => bool) public confidencialidadCumplida;

function firmarConfidencialidad(address influencer) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    confidencialidadCumplida[influencer] = true;
}

function verificarConfidencialidad(address influencer) public view returns (bool) {
    return confidencialidadCumplida[influencer];
}
Cláusula 22: Terminación del Contrato

El contrato podrá ser terminado por cualquiera de las partes antes de su vencimiento mediante notificación formal, con las condiciones establecidas para la liquidación de pagos y responsabilidades.

function terminarContrato(address influencer) public {
    require(influencers[influencer].activo, "Influencer no registrado");
    influencers[influencer].activo = false;
}