Post
Topic
Board Кодеры
Re: Децентрализованная биткойн биржа
by
btconly
on 29/09/2017, 00:30:30 UTC
5 этап. Система переводит деньги со своего счета на счет продавца.
Не совсем понимаю, что вы подразумеваете под "Система".

Для тех кому интересно, попробую на простом примере пояснить механизм взаимодействия клиентов во время сделки.

Для простоты, пожертвуем залогом и выкинем escrow из схемы. Тогда, в самом наипростейшем виде решение может быть таким:

1. Продавец договаривается продать покупателю 5 BTC. Они создают двунаправленный канал, и переводят на общий multisig-адрес по 5 BTC каждый. При этом, они изначально делят эти биткойны в соотношении 4.75/4.50 BTC, а оставшиеся 0.75 BTC сгорают. Так, что 4.75 BTC получает тот, кто первый публикует транзакцию
2. Пользователи постоянно находятся на связи, и если, например, курс резко вырос на 1%, то продавец мгновенно и добровольно отказывается от 0.05 BTC. Соотношение становится 4.70/4.55 (если транзакцию опубликует продавец, то в его пользу), или 4.80/4.45 (по инициативе покупателя и в его пользу). Ну, то есть тот, кто публикует транзакцию может получить 95% своих средств, а второй участник при этом получит только 90%. Оставшиеся в залоге биткойны при этом сгорают (их можно спасти если усложнить схему и добавить в нее escrow).
3. Когда один из пользователей решает завершить сделку они закрывают канал - распределяют 10 BTC в соответствии с текущим курсом и выводят биткойны на свои личные адреса в полном объёме.

Ну, я думаю смысл понятен. Пока пользователи в игре - они добровольно обновляют свои балансы, так как их биткойны завязаны на общем multisig адресе, и в одностороннем порядке они свою часть полностью вывести не могут.

Предположим, что во втором пункте курс вырос (пусть мгновенно на 1%), и продавец добровольно не подписывает обновлённые транзакции. Тогда покупатель публикует свою старую транзацию и получает 4.75 BTC (при этом теряет 0.3 BTC), а продавец в свою очередь получит 4.50 BTC (теряет 0.45 BTC). То есть, продавец экономически заинтересован находиться на связи и обновлять транзации. И даже если продавец опередит покупателя и опубликует старую транзакцию быстрее, то он всё равно теряет 0.20 BTC. Ему в любом случае выгоднее или продолжать, или закрыть сделку по честному и получить свои 4.95 BTC.

Понятно, что настолько примитивный механизм со сжиганием залога для биржи не годится. Даже если пользователи запустят каждый по клиенту на проводном и на мобильном интернете - есть опасность, что кто-то модифицирует своего клиента, будет намеренно форсировать закрытие сделок, и тем самым наносить убытки пользователям (даже несмотря на собственные убытки).

Этот упрощённый пример я написал только с целью объяснить сам принцип. В моём окончательном решении риск можно уменьшить практически до нуля, а если внести большой залог, то даже выключение клиента может быть допустимо.