gernar / pear2pear

The hackathon project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Контракт без посредника

Идея контракта в обеспечении честного P2P обмена, без привлечения посредника, но с необходимостью оставлять залог.

  1. Посредник инициирует обмен, отправляя транзакцию sendOffer(address buyer) с количеством эфира, в два раза большим чем сумма желаемого обмена (т.к. вторая половина резервируется на случай оплаты суда). При этом вызывается событие, содержащее sessionId
  2. Покупатель может принять обмен вызвав acceptOffer(uint sessionId). При этом он должен заложить как минимум половину от отправленной продавцом суммы (на оплату суда) (в этот момент продавец ещё может отменить обмен вызвав cancelTrade(uint sessionId))
  3. Далее покупатель нажимает approveBuyer(uint sessionId) и отправляет фиат на счёт продавца. После этого продавец не сможет отменить обмен.
  4. Продавец ждет поступления фиата на счёт и после его получения нажимает approveBuyer(uint sessionId), после чего покупателю отправляется половина залога продавца, а вторая половина возвращается продавцу.
  5. Если покупатель не отправляет деньги, либо продавец не подтверждает получение денег, любая сторона может обратиться в суд, вызвав callTheCourt(uint sessionId). Далее суд примет решение, и с помощью функции transferMoneyTo(uint sessionId, address to) переведет деньги потерпевшей стороне, при этом деньги на оплату суда взымутся со стороны, нарушевшей правила обмена.

Контракт с посредником

Идея контракта в обеспечении честного P2P обмена, с привлечением посредника, без необходимости оставлять залог.

  1. Посредник инициирует обмен, отправляя транзакцию sendOffer(address buyer, address seller) с количеством эфира, в три раза большим чем сумма желаемого обмена (для возможного покрытия издержек суда и другой стороны). При этом вызывается событие, содержащее sessionId
  2. Далее, в течении отведённого времени (в контракте это 1 минута), Стороны отправляют деньги посреднику, который пересылает их другой стороне. В течении этого времени посредник не может вывести свой залог. Он заблокирован контрактом.
  3. Если кто то из сторон не получил деньги, он может вызвать суд callTheCourt(uint sessionId) заплатив при этом ровно 1/3 от залога посредника. Во время суда посредник не может закончить обмен и вывести свой залог.
  4. Суд принимает одно из четырёх решений: обманут продавец, обманут покупатель, обмануты оба или не обманут никто transferMoney(uint sessionId, uint option). В каждом из этих случаев суд забирает плату за свою работу за счёт стороны, которая не права (либо ложный вызов суда, либо обман посредником).
  5. Если время обмена вышло, посредник завершает обмен вызвав finishTrade(uint sessionId).

About

The hackathon project


Languages

Language:JavaScript 63.0%Language:Solidity 17.8%Language:Go 17.1%Language:HTML 1.1%Language:CSS 0.9%Language:Shell 0.1%