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



Вначале кратко о том, что у меня получилось в итоге


  • Арбитры не могут забрать себе ни деньги покупателя, ни деньги продавца. Они могут лишь принимать решение о списании денежных средств со счета продавца в случае, если от покупателя поступила претензия. За свои услуги арбитры получают комиссионные – процент от каждой сделки, где они указаны в качестве арбитров.
  • Для того чтобы сделка состоялась, и у покупателя и у продавца должен быть хотя бы один общий арбитр.
  • Покупатель может прикрепить к одной сделке до 5-и арбитров. Все арбитры обладают равными правами, каждый из них может осуществить манибек.
  • Перед переводом средств покупателю предоставляется информация о продавце: оборот, количество покупателей (анонимных, не анонимных) и пр.


Прежде всего, покупателю нужно выбрать арбитров, которым он готов доверить решение возможных споров с продавцами.


Любое действие арбитра фиксируется и хранится в блокчейне. Таким образом, информация о деятельности арбитра является общедоступной. Однако для защиты от накрутки статистка выдается только по идентифицированным пользователям.


При переводе монет пользователь выбирает арбитра из списка арбитров, которым доверят и он и продавец, затем жмет «отправить».


Если у покупателя возникают претензии к продавцу, он заходит в список покупок, жмет «Манибек», указывает свой email, который шифруется открытым ключом арбитра(ов) и продавца, и ждет, пока с ним свяжутся для выяснения обстоятельств.

А теперь детали


Вначале пара слов про Dcoin
В Dcoin нет центральных серверов, также как в Bitcoin у каждой ноды хранится полная копия базы данных. Обмен новыми данными между нодами происходит при помощи блоков. Каждый блок содержит хэш предыдущего блока. Все транзакции, исходящие от пользователя содержат уникальную подпись, которая доказывает, что транзакция создана именно этим пользователем.


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

Пример структуры транзакции:
Поле Описание Размер
TYPE Тип транзакции 1 байт
TIME Время транзакции 4 байта
USER_ID ID пользователя, который создал транзакцию 5 байт
CURRENCY_ID ID валюты 1-3 байта
AMOUNT Размер обещанной суммы 1-12 байт
VIDEO_TYPE youtube,vimeo,youku,null 4-7 байт
VIDEO_URL_ID ID с видео-хостинга 5-32 байта
PAYMENT_SYSTEMS_IDS ID платежных систем 1-24 байта
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,CURRENCY_ID,AMOUNT, VIDEO_TYPE,VIDEO_URL_ID,PAYMENT_SYSTEMS_IDS) от пользователя USER_ID от 128 до 4096 байт
Заголовок (TYPE,TIME,USER_ID) и SIGN есть у всех транзакций, а все остальные поля меняются в зависимости от назначения транзакции.

Структура блока:
Поле Описание Размер
BLOCK_ID Порядковый номер блока 4 байта
TIME Время, когда был создан блок 4 байта
USER_ID ID пользователя, который подписал блок 5 байт
LEVEL Уровень, на котором был майнер в момент создания блока 2 байта
SIGN Подпись от (TYPE, BLOCK_ID, PREV_BLOCK_HASH, TIME, USER_ID, LEVEL, MRKL_ROOT), сделанная при помощи node-ключа от 128 байта до 512 байт
TRANSACTIONS Список транзакций До 3Mb
С более детальным описанием работы Dcoin можно ознакомиться в wiki.

Про майнинг в Dcoin
Майнинг в Dcoin – не есть майнинг в чистом виде, к которому все привыкли на примере прочих криптовалют. Производство новых монет не требует от пользователей каких бы то ни было усилий. Dcoin-монеты создаются с каждым новым блоком и распределяются между всеми участниками. Для анонимных пользователей рост объема монет на их счетах составляет около 0,0004%/блок. Величину процента определяют идентифицированные пользователи путем голосования
Один идентифицированный пользователь может создать ограниченное количество монет из ничего. Т.е. пользователи, которые доказали, что они не боты, отвечают за создание начальной денежной массы. При этом каждый такой пользователь является точкой обмена наличных на монеты в оффлайне. Для простоты, идентифицированных пользователей я называю майнерами.
Есть периоды сокращения объема монет, когда созданных монет оказалось больше, чем нужно рынку. Сокращение запускается на основе данных из блокчейна и его можно спрогнозировать, опираясь на количество майнеров, количество созданных монет и количество обещанных сумм. Пока число майнеров и объем обещанных сумм увеличивается, сокращения не происходят. Более подробно про периоды сокращения и периоды размножения можно почитать тут. А про идентификацию пользователей — тут.

Подробнее про арбитраж


Мульти-арбитраж


Dcoin дает возможность прикрепить к одной сделке до 5-и арбитров. В случае если покупатель запросит манибек, его запрос сможет удовлетворить любой из выбранных арбитров. После того, как сделка запечаталась в блокчейн, изменить список арбитров по данной сделке становится невозможным. Каждому арбитру, который прикрепляется к сделке, начисляются комиссионные.


Список доверенных арбитров


Для того чтобы сделка состоялась, и у покупателя и у продавца должен быть хотя бы один общий арбитр.

Как это выглядит изнутри

Структура транзакции


Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
TRUST_LIST Список арбитров, которым доверяет пользователь
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,TRUST_LIST) от пользователя USER_ID

Пример транзакции
(
   [type] => 62
   [time] => 1408470908
   [user_id] => 1
   [arbitration_trust_list] => [2,107,269]
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)


Условия арбитра


Арбитр может задать различные условия по каждой валюте. Максимум — 0. Это значит без ограничений.
Как это выглядит изнутри

Структура транзакции


Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
CONDITIONS Комиссия: мин, макс, %; мин, макс сумма по каждой валюте, с которой работает арбитр
URL Адрес сайта арбитра, где он может показать какую-то информацию о себе
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,CONDITIONS,URL) от пользователя USER_ID

Пример транзакции
(
   [type] => 62
   [time] => 1408470908
   [user_id] => 1
   [conditions] => {"23":["0.01","0","0.01","0","0.1"],"72":["0.01","0","0.01","0","0.1"]}
   [url] => http://arbitr.ru
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)


Holdback


Продавец может указать количество дней, в течение которых покупатель сможет запросить манибек, а также процент от суммы покупки, который замораживается на счету продавца на указанное ранее количество дней.
Для фирмы по изготовлению и доставке пиццы будет логично указать 3 дня и где-то 10% холдбека.
А вот для продавца, который первый раз продает что-то, например, через сервис аналогичный ebay.com, лучше указать 30 дней и 100% холдбек. Затем постепенно понижать % холдбека, когда будет появляться репутация. 100% холдбек означает, что вся сумма, которую оплатил покупатель, замораживается на счету продавца на 30 дней и может в любой момент быть возращена покупателю, если арбитр примет такое решение.

Как это выглядит изнутри

Структура транзакции


Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
ARBITRATION_DAYS_REFUND Кол-во дней, в течение которых покупатель сможет запросить манибек
HOLD_BACK_PCT % холдбека
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,ARBITRATION_DAYS_REFUND,HOLD_BACK_PCT) от пользователя USER_ID

Пример транзакции
(
   [type] => 62
   [time] => 1408470908
   [user_id] => 545
   [arbitration_days_refund] => 30
   [hold_back_pct] => 10
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)


Запрос манибека


Покупатель может запросить манибек в течение того времени, которое было указано у продавца на момент совершения сделки.

Как это выглядит изнутри

Структура транзакции


Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
ORDER_ID ID ордера, по которому пользователь хочет манибек
ARBITRATOR0_ENC_TEXT Контактные данные пользователя, зашифрованные открытым RSA ключом арбитра 1
ARBITRATOR1_ENC_TEXT Контактные данные пользователя, зашифрованные открытым RSA ключом арбитра 2
ARBITRATOR2_ENC_TEXT Контактные данные пользователя, зашифрованные открытым RSA ключом арбитра 3
ARBITRATOR3_ENC_TEXT Контактные данные пользователя, зашифрованные открытым RSA ключом арбитра 4
ARBITRATOR4_ENC_TEXT Контактные данные пользователя, зашифрованные открытым RSA ключом арбитра 5
SELLER_ENC_TEXT Контактные данные пользователя, зашифрованные открытым RSA ключом продавца
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,ORDER_ID,ARBITRATOR0_ENC_TEXT,ARBITRATOR1_ENC_TEXT,ARBITRATOR2_ENC_TEXT,ARBITRATOR3_ENC_TEXT,ARBITRATOR4_ENC_TEXT) от пользователя USER_ID

Пример транзакции
(
   [type] => 62
   [time] => 1408470908
   [user_id] => 6589
   [order_id] => 2725
   [arbitrator0_enc_text] => 4440b7abc674354aeb85a3e56e32e3a844a75571e12e516b35db27d6bab71813dd6b05deb36a27c074305476218810944c81f11f6f6fe53957daaa167cf533d06dfe5c5c98d26f004996bd1462cb775a9d8512c4494fb8326894a9e7038d1c073397a7ada2d22ed75118d0aaeba1b2721656320dd4d181fdddcf59a0fb66c3bf 
   [arbitrator1_enc_text] => 73e87240c492d500436fcae4932050cb649c82da95f35b2bc00dadff840c52b4c1ab5ffa55fa1382549c6ae606f569e86e48fec2abefdf5efac92a736e3ec84e481718c003c510de314080c26842c6752051221c9bb27b45e146505e30f760f54284cc8e2b5c9d01999cc4314ccffbb77fcf4a02d35cec5c1efd61af3733b81b 
   [arbitrator2_enc_text] => ec022338af265ffe077d42edc5f7bb62efabaa4a68760209e62ba323a9ac6bcf8a118564475538c18ed13ce4a56d3d67c2354c3a7f8e3f4a283bdcc78532968715715acab73a48943943e2e444e6f474230c1ee8391ee34cbcfa368a4be2f918724dc9c31e6ea10d5ba3e248708de8e9e00341887df22e6c1eccda8ea8db9942 
   [arbitrator3_enc_text] => 6a73044d9b3ae670a29598dbfe057490e68d21f67b691b8a3132debefbee46dc124a0c6a900702a00238e658df1250284c3477e23cfffef05fcd589f025bb1a589fe3689582010ab77318e2498483fe8855d314c2799215117c67402401fcf851563ab2e5421849b888ab3298795a8fc12fa32259a264382383c4f8b4d95fbb1 
   [arbitrator4_enc_text] => a4513ed3b369fd85dae21e5561aa13d52886b63171321d686dd8d083ae0db8e64cfd8a19419973e83fa275cc037962633d7694097bf56944d1e78ebd4ecbf321678a095ec27df9ff5555194b6df697ba37f9fd6f7dfa3781202473b908c471e507838d0a7cda04b2502cf276d229b2c0d4fed5329ec8421d4aec86b18f33c502 
   [seller_enc_text] => 54b0c7b193aee7fea8cf30a0bff179b41b65b083c3e9cb5562940ee3cd7490fc0d7c17b5bf577798bde829da7d8fa264afb9f6e96242057edd4a04446da2660ef36675f0161f452685fd6cb45e170f4de282dc4913c16a59428053df4a283e96fb77f7d9e6b1d0942bc9e1fac72127bfebba48d3cf0eca4846f32106d3523adf
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)


Удовлетворение запроса манибека


Запрос манибека видит и продавец и арбитр. Если продавец сумел договориться с покупателем до того, как арбитр принял решение, то он может сделать возврат самостоятельно. Если же продавец не сделал полный манибек, то его может сделать арбитр. Произвести манибек на сумму, большую, чем сумма сделки, невозможно.

Как это выглядит изнутри

Структура транзакции


Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
ORDER_ID ID ордера, по которому делается манибек
AMOUNT Сумма манибека
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,ORDER_ID,AMOUNT) от пользователя USER_ID

Пример транзакции
(
   [type] => 62
   [time] => 1408470908
   [user_id] => 7569
   [order_id] => 2725
   [amount] => 50.99
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)


Изменение времени рассмотрения спора


Времени, в течение которого возможен манибек, может не хватить для принятия взвешенного решения арбитром. Поэтому у него есть возможность однократно увеличить этот срок до 180 дней.
Как это выглядит изнутри

Структура транзакции


Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
ORDER_ID ID ордера, по которому делается увеличение времени
ADD_TIME Кол-во дней, на которое будет продлено время рассмотрения запроса
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,ORDER_ID,ADD_TIME) от пользователя USER_ID

Пример транзакции
(
   [type] => 62
   [time] => 1408470908
   [user_id] => 1
   [order_id] => 2725
   [add_time] => 180
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)


Недостатки


Самый главный недостаток арбитража заключается в том, что арбитры должны обладать высокой степенью доверия среди продавцов/покупателей и иметь репутацию справедливых судей, не экономящих времени на проведение полноценных расследований каждого спора, чтобы им можно было смело довериться и ни о чем не беспокоиться.

Итог


В итоге, ко всем прелестям независимости, которую дает децентрализация электронных денег, добавилось одно из главных преимуществ классических платежных инструментов – возможность оспорить сделку.

Тесты


На моем счете есть 20 dUSD, которые я готов раздать для тестов (по 1 dUSD), пишите в личку. Еще около 50 dUSD есть на бирже.
web-кошелек и exe, исходники
Список сервисов, уже принимающих Dcoin-ы:
racktech.ru
m4host.net
steadyhost.ru
komtet.ru (их главный инженер подсказал идею арбитража, за что ему огромное спасибо)

P.S.


С юзабили и интерфейсами у меня не очень, поэтому буду благодарен за советы, где что можно улучшить .