Skip to content

Instantly share code, notes, and snippets.

@EthereumWorks
Created August 28, 2017 14:04
Show Gist options
  • Save EthereumWorks/f2fffd1c7e47b1de6da306d9484adaf8 to your computer and use it in GitHub Desktop.
Save EthereumWorks/f2fffd1c7e47b1de6da306d9484adaf8 to your computer and use it in GitHub Desktop.
pragma solidity ^0.4.11;
// Безопасные расчеты между контрагентами
contract order {
address public buyer; // покупатер
address public seller; // продавец
address public deliver; // доставщик
uint public itemId; // код товара
uint public amount; // стоимость
string public deliveryAddress; // адрес доставки
bool public delivered; // флаг доставки
uint public deadline; // крайний срок доставки
// заказ товара/услуги
function order ( uint _itemId, string _deliveryAddress ) payable {
require (msg.value >0 );
buyer = msg.sender;
amount = msg.value;
itemId = _itemId;
deliveryAddress = _deliveryAddress;
delivered = false;
deadline = 0;
}
// подтверждение заказа
function confirmOrder (address _deliver, uint _deliveryPeriod) {
require (_deliveryPeriod>0);
seller = msg.sender;
deliver = _deliver;
deadline = now + _deliveryPeriod * 1 days;
}
// подтверждение доставки/услуги
function deliverySign(){
require (msg.sender == deliver);
delivered = true;
seller.transfer( amount ); // деньги уходят продавцу
}
// возврат денег заказчику, если товар не доставлен вовремя/услуга не оказана
function refund() {
require ( msg.sender == buyer );// вызывает заказчик
require ( expired() ); // время истекло
require ( !delivered ); // товар не доставлен
require ( amount > 0); // на контракте остались средства
buyer.transfer( amount ); // деньги возвращаются покупателю
amount = 0;
}
function expired() returns (bool) {
require (deadline != 0);
return (now > deadline);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment