¿Es factible el siguiente escenario mediante un contrato inteligente?

Tengo 2 personas (digamos A o B). Quieren tener el siguiente acuerdo. La persona 'A' especifica un depósito (x monedas) para el usuario 'B' bajo una determinada condición con un bloqueo de tiempo futuro 't'. Si el usuario 'B' proporciona una solución válida, obtendrá el depósito. ¿Cómo podemos agregar un pago de multa al usuario 'B' al usuario 'A' si no proporciona una solución válida después del bloqueo de tiempo 't'? ¿Alguna solución detallada de contrato inteligente será muy útil?

Respuestas (1)

Sí.

Podría ayudar pensar en el contrato como una máquina expendedora que hace cumplir y procesa.

El usuario A depositará algunos fondos. Esto podría modelarse como una oferta.

Si es posible que el usuario A reciba fondos de penalización del usuario B, entonces el usuario B también depositará fondos. Esto podría modelarse como la aceptación de los términos de la oferta.

Finalmente, el usuario B completaría la tarea o dejaría de hacerlo. Lo mejor es que el contrato pueda determinar por sí mismo que la condición se ha cumplido o que el límite de tiempo ha expirado para que pueda determinar qué usuario tiene derecho a los fondos. Es importante destacar que el contrato se limita a repartir fondos/activos que están bajo su contrato, razón por la cual los dos primeros pasos fueron depósitos de ambos participantes.

Espero eso ayude.

ACTUALIZAR

Este es un ejemplo simple de fecha límite. No aborda todas las preocupaciones de seguridad para una implementación lista para producción. Solo con fines ilustrativos. Sin garantía. ;-)

pragma solidity 0.5.1;

contract Timelock {

    uint public deadline;
    address owner;

    constructor(uint _deadline) public payable {
        deadline = _deadline;
        owner = msg.sender;
    }

    function withdrawFunds() public {
        require(msg.sender == owner); // funds are only for a certain entity
        require(now >= deadline); // cannot be taken before the deadline
        msg.sender.transfer(address(this).balance);
    }

}
¿Podría darme un ejemplo de un contrato inteligente para aclarar la idea? ¿Se admite el bloqueo de tiempo, de modo que si el usuario B fue honesto y proporcionó una solución válida antes de ese momento, puede obtener el depósito?
Todo es una gran pregunta y no un proyecto de nivel principiante. Mucho depende del desafío que se supone que debe completar el usuario B. Parece preocupado por el bloqueo de tiempo, que es mucho más fácil de resolver, por lo que actualicé la respuesta con un ejemplo simple.