Децентрализованный краудфандинг для любых проектов

в 5:55, , рубрики: open source, Блог компании Dсoin, краудфандинг

Что мне не нравится в краудфандинговых площадках:
— огромная комиссия — до 10%
— жесткая модерация — не любой проект можно опубликовать
— отсутствие мультиязычного описания проектов и большие трудности с переводом денег, если бэкер, например, из Китая
— невозможность вернуть хотя бы часть денег, если автор проекта не выполняет свои обязательства в указанный срок.
Все вышеперечисленные проблемы я, частично или полностью, решил в своей криптовалюте, в которую встроил механизм децентрализованного краудфандинга.

Децентрализованный краудфандинг для любых проектов

В 2-х словах о том, что у меня получилось

  • Механизм краудфандинга внедрен в сам протокол Dcoin. Данные о проектах, бэкерах, комменты копируются на все ноды. Никакие центральные сервера не нужны (за исключением фотохостингов, типа imgur.com, для размещения описаний проектов).
  • Комиссия 0,1% (достается нодам, подписывающим блок).
  • Разместить можно абсолютно любой проект, никто не может заблокировать ни проект, ни кошелек.
  • Можно собирать средства, оставаясь анонимным.
  • Можно добавить описание на 10-и языках.
  • Если Вам нужны рубли, то Вы можете собирать именно рубли. Если кто-то из Китая решил вложить в Ваш проект 300 юаней, ему нужно будет зайти на валютную биржу (кстати, тоже децентрализованную и встроенную в Dcoin) и обменять юани на рубли.
  • Если проект набирает обозначенную сумму, тогда автоматически выпускается новая криптовалюта. Монеты этой валюты автоматически распределяются между всеми бэкерами пропорционально суммам, которые они вложили в проект. Монеты проекта можно свободно продавать и покупать на биржах. Автор проекта должен будет продать свой продукт за данную валюту. Таким образом, валюта выходит из обращения в тот момент, когда автор проекта выполнил свои обязательства. Если бэкер передумал ждать, когда будет готов продукт, то он может продать монеты на бирже тем, кто готов ждать до победного конца.

Про Dcoin

Dcoin — децентрализованная криптовалюта, которая функционирует с апреля 2014. Имеет 2 типа аккаунтов — анонимные и майнерские. Если покупать монеты на бирже, то можно использовать простой анонимный аккаунт. Анонимные аккаунты и средства, находящиеся на их кошельках невозможно ни заблокировать, ни удалить.

Еще немного подробностей про Dcoin

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

В отличие от биткоина, в Dcoin не один, а 48 типов различных транзакций, благодаря которым 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.

Добавление нового проекта

Запуск нового проекта очень прост. Нужно всего лишь заполнить несколько полей.

Децентрализованный краудфандинг для любых проектов

Через несколько минут после отправки в DC-сеть, когда транзакция попадет в блок, Ваш проект станет доступен для финансирования, и на него уже можно будет отправлять монеты.

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

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

Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
CURRENCY_ID ID валюты
AMOUNT Желаемая сумма
END_TIME Время окончания сбора средств
LATITUDE Широта
LONGITUDE Долгота
CATEGORY_ID ID категории
PROJECT_CURRENCY_NAME Название для новой криптовалюты
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,CURRENCY_ID,AMOUNT, END_TIME,LATITUDE,LONGITUDE,CATEGORY_ID,PROJECT_CURRENCY_NAME) от пользователя USER_ID

Пример транзакции

(
   [type] => 35
   [time] => 1408470376
   [user_id] => 1
   [currency_id] => 72
   [amount] => 1000
   [end_time] => 1409075213
   [latitude] => 39.94887
   [longitude] => -75.15005
   [category_id] => 4
   [project_currency_name] => TEST003
   [sign] => 820100701a18c4e8f3f92a109ff347784bcd1b78325e8ccbb4b69693b509a211212a7d3306268347c2228de0d395f11368358c52141c8fe6056d63b520942d8f1434722b5bdbf97c412099f20b3f82fc48dc484db93baf78084583134b0f0b9b667cabc5b842befa6ad4519677241f37de8ecdac6ac9026bfe2454810f267fe8f6547516e358cdf9eb3f705085833aa37f4c8a6cb046949f415085e56a537698b0c6d762840b82188ebfe86736d5b7ac47823bc4a25d72065208f082968377c902a757bfe6fd10225d1f7c96fcb860543d8e5c2cae92baa67fb705560e437141f6610798f58e6564b24ef8dbbc0a00011f7e21cc399f941babaab3637f6555f2077170
)

После обработки такой транзакции создается запись в таблице cf_projects

Добавление описания для проекта

Всего можно прикрепить до 10-и описаний на разных языках. Описания можно добавлять только в виде URL картинок. Это необходимо для того, чтобы переложить ответственность за содержимое контента с немодерируемых нодов на хостинг, где будет размещена картинка, а также — для экономии места в БД нодов.

Децентрализованный краудфандинг для любых проектов

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

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

Поле Описание
TYPE Тип транзакции
TIME Время транзакции
USER_ID ID пользователя, который создал транзакцию
PROJECT_ID ID проекта
LANG_ID ID языка
BLURB_IMG Изображение для каталога
HEAD_IMG Изображение для шапки
DESCRIPTION_IMG Картинка-описание проекта
PICTURE Главная картинка
VIDEO_TYPE Если есть видео, то video_type
VIDEO_URL_ID Если есть видео, то video_url_id
NEWS_IMG Картинка новостей проекта
LINKS Ссылки для картинки-описания в формате [[«url1»,x1,y1,x2,y2],[«url2»,x1,y1,x2,y2],...]. до 512 знаков.
HIDE Можно спрятать, если случайно было добавлено описание на ненужном языке
SIGN От 1 до 3-х подписей (TYPE,TIME,USER_ID,PROJECT_ID,LANG_ID, BLURB_IMG,HEAD_IMG,DESCRIPTION_IMG,PICTURE,VIDEO_TYPE,VIDEO_URL_ID,NEWS_IMG,LINKS,HIDE) от пользователя USER_ID

Пример транзакции

(
   [type] => 40
   [time] => 1408470908
   [user_id] => 1
   [project_id] => 4
   [lang_id] => 42
   [blurb_img] => http://i.imgur.com/BBnBbC5.png
   [head_img] => http://i.imgur.com/BBnBbC5.png
   [description_img] => 0
   [picture] => http://i.imgur.com/BBnBbC5.png
   [video_type] => youtube
   [video_url_id] => 0
   [news_img] => 0
   [links] => 0
   [hide] => 0
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)

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

Отправка монет в краудфандинг-проект

Для того чтобы профинансировать какой-то проект, нужно просто кликнуть «Профинансировать», после чего откроется вот такая форма:

Децентрализованный краудфандинг для любых проектов

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

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

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

Пример транзакции

(
   [type] => 48
   [time] => 1408471786
   [user_id] => 1
   [project_id] => 4
   [amount] => 100
   [commission] => 0.1
   [comment] => 4793010de6e65288fba7ba71e93883cafc0c724fb6306cc77b0525721b5e76883234997bcb4bda16e2568e5c1c30fb53fdb61999aa0c066189352d8ebc9d4dfb58d298d997cfdcf60c10d89815a4f620a68bbc690f95503e50e1913b3f82322df37895587413fde1b09c8acc4d746a145027b4753f180b073c31c8ab199f475d5c9c86841aaee506cb97bebe799e7497bf5765f848d9bfda3c58a44be9da4e86bb319d6580c5a35a8e49ec3a519bbfb53b33d590f691247929c2d489bcd8fa0d70c78c0b302edd39a474f116cfbf0d972ce0dee3999525d021161a6c5492c9a895eb01e764ee4fc1287ac41d3aea1b251108f362eb4984f01acf34ab0d202991
   [sign] => 820100766b5e41a7fcc473912dfc74afdd7f47dbacbf0a8ebd6b3f552a3d58972cbd979c61e1942b59b1cfaa74b89a8bbc30849b7e9942e1fd16be2a48ccc0b2ffb1152bc737967ec3330b4225b4f195d7d7f8356c15ab72ccbaed9587445bacd45f367d7d20a34ed546b0d48dafe1cb4cf3a3d3187a50a52eafd09d874da67f7e2ccfd861a17b5ee91bbcf5cd92565faf5b2d25d249d0f6fe307d63cb883343eb9c9be4ff4c0ed2ca83ea3e5e8c54bf9d780d819e3f5ca2495c5aab4dff6c34bfa8d5bde60beeb84c6474305c968920a5526a6c563c96abdd4a67efb793637d009f0878bbec56e277b87ad4675098a4eb650c6910ab973d7f72980554f068499a33ad

)

После обработки такой транзакции создается запись в таблице cf_funding, где записывается amount из транзакции, а у отправителя эта сумма списывается со счета.
Если end_time проекта <= time из блока, тогда проект закрывается — в cf_projects в close_block_id указывается ID текущего блока. Далее возможны 2 сценария:
1. Нужная сумма набрана. В таблице cf_currency создается запись с названием валюты проекта. Автору проекта начисляется собранная сумма. Бэкерам начисляется валюта проекта пропорционально суммам, которыми они профинансировали проект.
2. Нужная сумма не набрана. Всем бэкерам возвращаются монеты, которые они отправлял в данный проект.

Отмена финансирования

Если Вы передумали, то до завершения проекта можете вернуть свои монеты. Нужно просто нажать cancel в списке операций по Вашему счету.

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

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

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

Пример транзакции

(
   [type] => 44
   [time] => 1408472956
   [user_id] => 1
   [funding_id] => 40
   [sign] => 8201001245f8abcaf636c43ddecd54348c1f3462ce3ef3179c5da246e221f09567dc909ba1c477e62ed1a3bb4909230045eda3476c3a69ac602730f6f47955ca67b030011872b0f780c1f4a8e140f2e90e2f76de8781c372922c172c07e8065227f04fb7bf16b810c884f4c190915f9c9d40ee03bed24cfa239ef1400b536511150201a87c125467cc08253647d53381f75baf791f42d68cd707f61c13c4efeb780f1ae7ed3bb6915a4a4e666ace825bf64bdd0bc7246869cb1d1c76f16d377b9d543c085b1b4062e5602fe2bc919c6f54805a8ad1cd9fbb97e03e68c57f56eac96810a60f6d5529dcb143c39920bcd46391d489adf3bbddcea4d3fdbe9e53267ae828
)

После обработки такой транзакции в таблице cf_funding для указанного ID указывается del_block_id. И отправителю возвращаются его монеты.

Удаление проекта

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

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

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

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

Пример транзакции

(
   [type] => 46
   [time] => 1408473247
   [user_id] => 1
   [project_id] => 3
   [sign] => 82010034492a93753feb86a4ef56ec465f67eca9ad6969867e9f59ccbf93e5e729ea645de0848f5501366f4bc0db4be41ceef8fe0650962323b7ba41f328af4d2f3228a7a0ce0865b05d1e7e27c075f779db6af864b914281d97d5c4445ec94fe15667197496d7363a2036ed5d829ceeb73056e31888abc8988164a9ec30bd9f133776288bce53200654d09cd5630e57fb38ff8dfc7f820e37bf7985f20c29030f84abb6f03ebfc170fdee7ebec99c777a7bdd4ac01e2ea1a50cb88f7ae9f127cabe33fd3f4a25effd321f0fc5e3c196db64d51d4adfc52e0d878a5fb1f5863facabd34d33a41cfa62d196e67f5c209b48310e78524e3a3a2be1564a5eb7d5af3f33e4
)

После обработки такой транзакции в таблице cf_projects для данного проекта указывается del_block_id. И всем бэкерам возвращаются их монеты.

Изменение категории для проекта

Категорию проекта можно в любой момент изменить.

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

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

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

Пример транзакции

(
   [type] => 50
   [time] => 1408475554
   [user_id] => 1
   [project_id] => 4
   [category_id] => 13
   [sign] => 8201004155bf4df043e9c7d450d66ff24a6c139f0943fc1572b5ecb95cbaa0d390f374f1a3f968e779b7dc067aff5a7dfcd353d53aa533c0c4f85c429954176bcb2136e63fa985008b889c5aa69c2eb2c65d0bf08bcf61cc66da18d70df5e07d9fcb484207ea98fb60b2fca6e5657b7d0d3c55f13e6e3a12840eb7162807fc54be5af15b32403a40d33b11e8130cf152a204c5bc235cd5e1b7665083a26425807512b09a6adf894d2e2b9c74a88112bf4962e1592cdbdd2fbdf7095f1c70b599f2b8b3afcc9a47935f49696316bb76ede1b999a7b62fc6de138e1be9948f222df8ab57457325a3197a03ca1c954a75cc8ba830bc9adbf34a25c77ddfe97ba8ec76fba1
)

После обработки такой транзакции в таблице cf_projects для данного проекта меняется category_id.

Комментарии

Комментарии могут писать только те, кто профинансировал проект, либо автор проекта. Удалять комментарии нельзя.

Децентрализованный краудфандинг для любых проектов

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

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

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

Пример транзакции

(
   [type] => 47
   [time] => 1408475862
   [user_id] => 1
   [project_id] => 4
   [lang_id] => 42
   [comment] => Test
   [sign] => 820100beb4a532f32b465b86d4ad54245e121d083a031e75da6c270af906ea55914bbc51ec6dcbfde872600b3d154d7f72dc70706a76ef153ec693dc2baf8f5938e393dc91fdc376cf5beada0bcf51aa4d409cf802b01738aae8c709b7734d68a84addd8bebd9079a4843a746fa209e350b656dee5038540099e809de6850907103d41561ef67757a02f68f8f19822ed7e33a4698cc45d17c2de02ff8530dba4a9a9b3866a518e3aeb31488321439d31a24e8d5fbd711a2f120d6e714e061427916c9f22a7553395772aec400c8305d156b30bdd7ed568d1826f005b56a2ad2ac6aed607a1c204e8c39b07513435cff0b9c56746d39017f5dd4fe20b7ac2c83cb39959
)

После обработки такой транзакции в таблице cf_comments добавляется строка с новым комментарием к проекту.

Вот и все транзакции, которые отвечают за функционирование краудфандинга в Dcoin.

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

«Всё или ничего»

Автор проекта не может забрать монеты, если проект еще не завершился. Это нужно для борьбы с мошенничеством. Допустим, набралось 80% от суммы, и вдруг кто-то из бекеров выясняет, что это, например, перепродажа какого-то товара с ebay в тридорого. Он пишет об этом в комментариях, и этот комментарий видят все старые и новые бэкеры. Часть старых бекеров отменит свой платеж, проект не наберет нужной суммы, и все монеты будут возвращены.

Анонимность и безопасность

Имея 3 ключа, привязанных к одному user_id, можно безопасно и анонимно пользоваться Dcoin. Вы просто вбиваете в браузере адрес любого пула, вводите 1-й ключ и попадаете в свой кабинет. В базе данных пула не останется никаких следов Вашего пребывания. В таком режиме можно переводить и получать монеты, создавать и финансировать краудфандинг-проекты. Если админ пула встроит скрипт, который будет отсылать на его сервер Ваш ключ, то он с ним ничего не сможет сделать, т.к. для любой транзакции от Вашего имени будет требоваться еще 2 подписи.

Внешние гейты

Любой желающий может распарсить блокчейн и получить список всех краудфандинг-проектов, оформив это в виде сайта, например, вот такого — dcrowd.org.

Как запустить свой краудфандинг-проект

1. Возьмите ключ тут, тут или у какого-нибудь майнера.
2. Зайдите в пул или поставьте исходники, укажите взятый в п.1 ключ
3. Нажмите «Запустить свой краудфандинг-проект»
(Если хотите сохранить аккаунт за собой, то не забудьте сменить ключ)

Автор: c-darwin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js