From 8c0ec23feedc30e795d381cf1c21fecc25a95e86 Mon Sep 17 00:00:00 2001 From: LautiRad Date: Mon, 15 Aug 2022 16:54:41 -0300 Subject: [PATCH] Smart contracts Escrow Deed & Vending --- SC-Deed.sol | 22 ++++++++++++++++++++++ SC-Escrow.sol | 33 +++++++++++++++++++++++++++++++++ SC-Vending.sol | 27 +++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 SC-Deed.sol create mode 100644 SC-Escrow.sol create mode 100644 SC-Vending.sol diff --git a/SC-Deed.sol b/SC-Deed.sol new file mode 100644 index 0000000..2b9afac --- /dev/null +++ b/SC-Deed.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.5; + + +contract Deed{ + address public add1; + address payable public add2; + uint public earliest; + + constructor(address _add1, address payable _add2, uint fromNow)payable{ + add1 = _add1; + add2 = _add2; //Esta es la cuenta que va a recibir + earliest = block.timestamp + fromNow; + } + + function withdraw() public{ + require(msg.sender==add1,"Add1 solo puede pagar, no puede recibir :)"); + require(block.timestamp>=earliest,"Demasiado pronto para el pago :)"); + add2.transfer(address(this).balance); + } +} \ No newline at end of file diff --git a/SC-Escrow.sol b/SC-Escrow.sol new file mode 100644 index 0000000..99fb0cc --- /dev/null +++ b/SC-Escrow.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.5; + + +contract Escrow{ + address public payer; + address payable public payee; + address public lawyer; + uint public amount; + + constructor(address _payer, address payable _payee, uint _amount){ + payer = _payer; + payee = _payee; + lawyer = msg.sender; + amount = _amount; + } + + function deposit() payable public{ + require(msg.sender == payer, "LautiRad"); + require(address(this).balance <= amount, "LautiRad LautiRad"); + } + + function release() public{ + require(address(this).balance == amount, "Bla bla"); + require(msg.sender == lawyer, "Bla bla mas texto :D"); + payee.transfer(amount); + } + + function balanceOf() view public returns(uint) { + return address(this).balance; + } +} \ No newline at end of file diff --git a/SC-Vending.sol b/SC-Vending.sol new file mode 100644 index 0000000..9d62f53 --- /dev/null +++ b/SC-Vending.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.7; + +contract VendingMachine { + + address public owner; + mapping (address => uint) public cupcakeBalances; + + constructor() { + + owner = msg.sender; + cupcakeBalances[address(this)] = 100; + } + + function refill(uint amount) public { + require(msg.sender == owner, "Solo el propietario puede recargar."); + cupcakeBalances[address(this)] += amount; + } + + function purchase(uint amount) public payable { + require(msg.value >= amount * 1 ether, "Debes pagar al menos 1 ETH por cupcake, Sí esta caro el cupcake xD"); + require(cupcakeBalances[address(this)] >= amount, "No hay suficientes cupcakes en stock para completar esta compra 8)"); + cupcakeBalances[address(this)] -= amount; + cupcakeBalances[msg.sender] += amount; + } +}