all files / contracts/ Escrow.sol

100% Statements 13/13
87.5% Branches 7/8
100% Functions 9/9
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82                                    12× 12×                                 12× 12× 12× 12× 12×                                                          
/*
 Bitsign escrow contract v0.1
*/
pragma solidity ^0.4.15;
 
 
contract Escrow {
  //State variables
  address public buyer;
  address public seller;
  address public arbiter;
  uint public value;
  uint public endTime;
  //Events
  event Payout(uint _value, address _to);
  event Refund(uint _value, address _to);
 
  modifier validateParams (address _seller, address _buyer) {
    Erequire (_seller != address(0) && _buyer != address(0) && _seller != _buyer);
    _;
  }
 
  modifier isBuyerOrArbiter () {
    require (msg.sender == buyer || msg.sender == arbiter);
    _;
  }
 
  modifier isSellerOrArbiter () {
    require (msg.sender == seller || msg.sender == arbiter);
    _;
  }
 
 
  modifier isArbiter () {
    require (msg.sender == arbiter);
    _;
  }
 
  /**
    TODO: doc
   */
  function Escrow (address _seller, address _buyer, uint _endTime) public payable validateParams (_seller, _buyer) {
    arbiter = msg.sender;
    value = msg.value;
    buyer = _buyer;
    seller = _seller;
    endTime = _endTime;
  }
 
  /**
    TODO: Si las condiciones del contrato se cumplen, el arbiter o comprador puede ejecutar
    esta función para pagar al vendedor.
   */
  function pay() external isBuyerOrArbiter() {
    Payout(this.balance, seller);
    seller.transfer(this.balance);
  }
 
  /**
    TODO: Si las condiciones no se cumplen por algún motivo, se ejecuta
    esta función para devolver al comprador los fondos.
   */
  function refund() external payable isSellerOrArbiter() {
    Refund(this.balance, buyer);
    buyer.transfer(this.balance);
  }
 
  /**
    TODO: Devuelve el balance depositando en el contrato
  */
  function getBalance() external constant returns (uint) {
    return this.balance;
  }
 
  /**
    TODO: doc
  */
  function kill() public payable isArbiter() {
    selfdestruct(msg.sender);
  }
}