- PVSM.RU - https://www.pvsm.ru -
Bitcoin очень удобен и надёжен для хранения денег, но как проводить в нём сделки? Традиционные способы включают привлечение доверенной третьей стороны. Оказывается, bitcoin так могуч, что это вовсе не обязательно. Ниже я расскажу, как двум людям, не доверяющим друг другу, провернуть сделку в bitcoin без привлечения третьих сторон.
Сначала рассмотрим существующие способы.
Пользуясь этим способом, мы полагаемся на существующие юридические механизмы защиты продавца и покупателя от мошенничества со стороны друг друга. Нарушается принцип исключения третьих сторон, теряется возможность анонимности, добавляются комиссии по переводу. Кроме того, для экономики битконов лучше, чтобы сделки оплачивались непосредственно в bitcoin.
Гарант — третья сторона, которой доверяют обе стороны сделки. Покупатель отдаёт деньги гаранту, продавец отдаёт товар гаранту, после чего гарант отдаёт деньги продавцу, а товар — покупателю. Эта схема тоже не особенно хороша. Репутация гаранта зависит от числа успешных сделок, а число сделок растёт по мере увеличения репутации. Получается система с положительной обратной связью, что приводит к сокращению числа гарантов и централизации системы, от которой хотелось избавиться.
Я веду к тому, что третьим сторонам в сделке вообще не место. Есть покупатель и продавец, есть система bitcoin. На этой самодостаточной системе то и дело паразитируют банки, обменники, юристы, гаранты и т.д. А ведь в протоколе bitcoin всё необходимое для страхования сделок уже есть.
Алгоритм очень простой: обе стороны переводят деньги в залог. Если сделка проходит успешно, залог возвращается, иначе пропадает.
Для начала нам понадобится познакомиться с понятием multisig-адреса [1]. Для списания денег с multisig-адреса требуется несколько подписей. Популярны multisig-адреса 2/2 и 2/3. В случае адреса 2/2 нужны две подписи из двух, в случае 2/3 — две подписи из трёх.
Покупатель и продавец создают multisig-адрес 2/2 и переводят туда залог. Ни один из них не сможет вернуть залог без согласия другого. После этого происходит собственно сделка (будем считать что это покупка товара или оказание услуги за bitcoin). Если сделка завершается успешно (покупатель получил товар, продавец получил оплату), то участники сделки забирают залог. Если во время сделки происходит конфликт или кто-то из участников пропадает, то оба теряют залог.
Участники сделки зависят друг от друга. Риск потерять залог — не менее сильный аргумент, чем закон, на котором держатся обычные сделки. Не каждый остановится перед нарушением закона, но никто не захочет потерять залог. По-моему, в экономике деньги — это самый весомый аргумент. Нет смысла жульничать, если это заведомо приводит к убыткам.
Чтобы эта схема работала, сумма залога должна превышать цену товара. Иначе та из сторон, которая первой получит товар или оплату, может махнуть рукой на залог и пропасть. Мне кажется, что сумма залога с каждой стороны должна быть в 2 раза больше цены товара.
Ещё один подводный камень: когда один участник перевёл залог на multisig-адрес 2/2, второй участник может пропасть. Получается некрасивая ситуация: с одной стороны убытки, с другой ничего. К счастью, bitcoin позволяет застраховаться от подобных недобросовестных клиентов или шутников — перевод денег на multisig-адрес 2/2 должен проходить единой транзакцией, подписываемой обоими участниками. Или оба внесут залог, или никто не внесёт.
Итоговая схема выглядит так:
Пусть товар стоит 1 BTC. Залог: по 2 BTC с каждой стороны.
Эта схема с залогом — «обёртка» для любой сделки. Заметим, что все накладные расходы сводятся к двум транзакциям bitcoin (пополнение залога и возврат залога). Если учесть ещё две транзакции, пополняющие кошельки, участвующие в сделке (см. ниже раздел «Подготовка»), то все потери, связанные с залогом, равны 4-м комиссиям bitcoin, то есть 0.0004 BTC (примерно 8 рублей по нынешнему курсу). Если сделка требует личного присутствия участников, то действия, связанные с залогом, могут быть выполнены до и после личной встречи. Кроме того, участникам сделки будет комфортней на личной встрече, если они уже связаны залогом, а не просто посторонние люди. Описанный метод работает и тогда, когда сделка не требует личной встречи (пример: житель одной страны передаёт интеллектуальный продукт жителю другой страны). Несколько последовательных сделок можно защитить одним залогом.
Графические программы, которые я проверил, не предоставляют удобного интерфейса для проведения двух транзакций, описанных выше (программы bitcoin-qt и Electrum). Решил поискать веб-решения и практически сразу нашел веб-клиент coinbin [2], основанный на библиотеке BitcoinJS [3]. Клиент не зависит от сервера разработчика и не хранит ключи удалённо. Кроме того, coinbin можно скачать [4] и использовать локально или загрузить на свой сервер. E-mail и пароль используются как seed для генерации адреса и не запоминаются. Чтобы завести несколько адресов, надо использовать несколько пар (E-mail, пароль). Чтобы не потерять доступ к кошельку, надо делать резервную копию E-mail и пароля, например в KeePassX [5].
Мне удалось совершить транзакции, необходимые для страхования сделки. Ниже я приведу пошаговую инструкцию.
Теперь деньги помещены в залог и можно перейти к сделке как таковой.
Если сделка сорвалась, то обе стороны теряют залог. (Это и есть основная идея — заставить другую сторону добросовестно выполнять условия сделки под страхом потерять залог.) Если сделка завершилась успешно, то надо вернуть залог — это возможно только с согласия обеих сторон.
Деньги перемещены из залога на получающие адреса Алисы и Боба. Сделка завершена.
Данный алгоритм помогает защититься от мошенничества, так как в случае оного залог теряют оба. Данная защита не вносит третьих сторон в отличие от традиционных способов. Накладных расходов почти нет, если не считать необходимость понять длинный алгоритм и обучить ему другую сторону сделки. На самом деле ничего сложного там нет: мне потребовалось провести пару «сделок» с самим собой, чтобы полностью освоиться.
Приветствуются предложения по улучшению алгоритма и ПО, автоматизирующее алгоритм в большей степени.
GitHub разработчика: github.com/OutCast3k/coinbin [6]
Адрес Bitcoin разработчика: 1CWHWkTWaq1K5hevimJia3cyinQsrgXUvg
Мой адрес Bitcoin: 1CsfihQGy5kg3nnTJLzfmNDiPGqiQgdeMz
Автор: starius
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/77394
Ссылки в тексте:
[1] multisig-адреса: https://en.bitcoin.it/wiki/Address#Multi-signature_addresses
[2] coinbin: https://coinb.in/
[3] BitcoinJS: http://bitcoinjs.org/
[4] скачать: https://github.com/OutCast3k/coinbin/archive/master.zip
[5] KeePassX: https://www.keepassx.org/
[6] github.com/OutCast3k/coinbin: https://github.com/OutCast3k/coinbin
[7] Источник: http://habrahabr.ru/post/245791/
Нажмите здесь для печати.